我即将开发一个小脚本来收集 chroot-jail 的信息。
在我的例子中,这看起来(乍一看)非常简单:应用程序有一个干净的 rpm-install 并且几乎所有文件都安装到 /opt 的子目录中。
我的想法是:
- 查找所有二进制文件
- 检查他们的图书馆依赖
- 将结果记录到列表中
- 在启动应用程序之前将该列表同步到 chroot-target-directory
现在我想知道 - 是否有任何脚本已经完成了这样的工作(perl/bash/python)?
到目前为止,我只找到了针对单个应用程序的专门解决方案(如 sftp-chroot)。
尽管没关系(恕我直言)-操作系统是 CentOS 5 x86_64 当前的次要版本和补丁级别。
rpm -ql
恕我直言,它是否不够通用,因为它只涵盖基于rpm的发行版。上面提到的“全新安装”只是提到软件的文件没有分布在整个文件系统中。所以我的出发点是 - 目前 - 一个find /opt/directory/
......几乎可以在任何系统(甚至不是 Linux)上运行。
我建议创建一个模板 chroot 并安装所有你想要的包,就像它是一个普通的操作系统一样。之后,您可以使用典型工具(更新脚本、包管理器等)管理 chroot,并将更新同步到使用该模板构建的每个 chroot。
这种方法有几个优点。两个大的是你可以使用熟悉的工具管理模板(没有奇怪的箍来升级你的 chroot),如果你有一个 chroot由于某种原因无法更新(比如它需要一些特定版本包),您可以将其排除在
rsync
升级过程之外并独立管理它,就好像它是一台独立的机器一样,将包标记为“保留”或等效的,这样它就不会被踩踏。您的里程(和实施要求)可能会有所不同......
第一种方法(服务是应用程序本身):在 chroot 中为所有“通常的”二进制文件、库等执行 bind-ro-mount...:
现在可以测试服务是否在 chroot 中运行了。令我惊讶的是,我的 HIDS 告诉我在/opt/service的子目录中有一个写入。
所以我用一个 shell 手动 chroot 到这个并测试了写访问 - 这有效!
因此,如果没有其他帮助 - RTFM。
man mount
暗示只读绑定挂载只适用于内核 2.6.26 或更高版本(这里运气不好:CentOS 5 是 2.6.18)。另一个缺点:这让潜在的攻击者拥有全套操作系统工具。
现在这是我的 scipt 目前所在的位置:
mkchroot.cfg:
mkchroot.sh
仍然存在的问题:我的 chroot 中有 shell 文件。他们可能会引用其他一些二进制文件。
作为解决方法,这些必须手动放入 $FILES 中。
有一组名为jailkit的工具。
这也适用于 linux。根据它的主页,它被确认可以与
它的依赖项看起来不错: