我正在 linux 中创建 chroot jail,但我无权访问任何系统文件,如 ls/cd/gcc/g++。我需要将哪些必要的 libs/bin/systme 文件复制到我的 chroot 监狱?
2 回答
要创建一个基本的基于 debian 的根文件系统(不一定在基于 debian 的主机系统上),您可以使用debootstrap
或multistrap
工具。febootstrap
我认为基于 Fedora 的根文件系统也有一个等价物。
在 debootstrap 中,您将完全控制应安装哪些软件包,而不是基本必需的软件包,这些软件包是带有“优先级:必需”和“优先级:重要”标签的软件包。在初始额外包的情况下,您负责包依赖关系。
multistrap
是一个较新的工具,它使用 apt 并且可以利用多个存储库,因此可以解决依赖问题。
您还可以进行交叉引导,为另一个架构创建根 fs。这在创建嵌入式或虚拟化系统时很有用。
示例debootstrap
命令:
debootstrap wheezy rootfs/ http://ftp.us.debian.org/debian
然后你可以 chroot 进入它并做任何其他需要的事情。
这是迄今为止创建 chroot 最简单的方法。
像 ls/cd/gcc/g++ 这样的可执行文件,它们依赖于共享库(除非你没有将它们构建为静态的)。因此,您需要做的是将所有这些共享库依赖项复制到适当的位置到您的 chroot 监狱中,您还需要找到这些共享依赖项是什么。要找出您需要“ldd”的帮助。
要查看 gcc 有哪些共享依赖项,请执行以下操作:
ldd /usr/bin/gcc
在我的系统上,它显示以下输出:
linux-vdso.so.1 => (0x00007fffd9bff000)
libc.so.6 => /lib64/libc.so.6 (0x00000030c9c00000)
/lib64/ld-linux-x86-64.so.2 (0x00000030c9800000)
因此,gcc 具有标准 c 库 libc.so 的依赖关系,它还需要 ld(可执行加载器),将这些共享库与 gcc 一起放入您的 chroot 监狱中的适当位置(即 /lib64 下的 libc)。所以 gcc 可以在你调用 gcc 时加载必要的东西。