在基于 Debian 的系统上...
我已经使用类似于以下脚本的脚本创建了一个最小的 chroot/jailhttps://github.com/pmenhart/make_chroot_jail/blob/master/make_chroot_jail.sh目标是创建一个除了运行所需程序(出于安全考虑)之外基本上什么都不能做的 jail。我的问题是,一旦设置了 jail,将程序安装到 jail 中的最佳方法是什么?由于 jail 很小,没有 apt 之类的包管理器,也没有构建工具。
我是否必须将程序安装到普通帐户并将所有必需文件复制到 chroot 目录?如果是这样,我该如何跟踪所做的所有更改以了解我需要做什么?我可以轻松跟踪诸如 rkhunter 之类的小程序,但无法跟踪诸如 MySQL 之类的较大程序,因为要复制的文件和要修改的配置文件太多了。
或者,有没有办法将最小的包管理器(例如 apt)安装到监狱中,安装所需的程序,最后删除包管理器?
有没有我不知道的更好的方法可以做到这一点?
谢谢!
在有人提出其他建议之前:
- 我知道维护多个 chroot 安装会带来额外的负担
- 我知道它并没有像你希望的那样增加安全性,因为配置不当的 chroot 可能会被打破。容器可能是更好的选择。
- 我知道有些程序已经内置了类似 chroot 的功能,但我想知道安装程序的通用方法。
答案1
设置 chroot jail 的方法有很多种。我个人见过 50 多种不同的脚本。所有 jail 都类似,但有大有小的差异,因此没有通用的方法可以在其中执行任何操作。
chroot jails 在安装软件方面最常见的用途是从源代码安装所有内容。有时 chroot jails 专门用于从源代码安装软件,避免在本地机器上安装来自软件包的依赖项(例如 zlib、libpng 或其他常用库)。
不幸的是,许多不同的 chroot jail 脚本都有一个共同点,那就是它们没有任何“升级模式”,因此每次您想要升级基本系统软件包或 jail 内的软件时,都必须重新设置此 jail。这当然可以编写脚本,但这与正常的软件包升级不同。
搜索 OpenVZ 或 LXC 半虚拟化技术。它们都用于创建“容器”(具有共享内核的独立系统)。它们都基于 chroot 概念,但在内核中的许多其他层上增加了分离。
LXC 较新且更现代,但 OpenVZ 提供更好的安全隔离。在这两种系统中,您都可以安装几乎完整的系统,包括包管理器、包中的库等,因此您可以像在基本系统中一样正常安装和升级软件。