我只是尝试使用 chroot 命令仅用于测试目的,以便创建临时根监狱,但我没有成功。平台是CentOS 6.4。到目前为止,除了这次之外,我已经做过很多次了。我按照该顺序执行了程序:
- 创建
bin
、etc
、home
、lib
和var
目录。 ldd /bin/bash
- 复制上述
lib
目录中的所有库以及./bin/bash
bin
然后运行
chroot /path/to/the/jail
出现如下:chroot: failed to run command `/bin/bash': No such file or directory
我无法确定这个错误来自哪里,而且我从来没有遇到过这样的问题。相同的过程在 Ubuntu 服务器上运行得很好。该问题仅发生在该特定服务器上。
根据下面的评论,这是调试命令的一些输出:
[root@localhost chroot]# find -printf '%M %p\n' drwxr-xr-x 。 drwxr-xr-x ./bin -rwxr-xr-x ./bin/bash drwxr-xr-x ./var drwxr-xr-x ./var/var drwxr-xr-x ./home drwxr-xr-x ./lib -rwxr-xr-x ./lib/libdl.so.2 -rwxr-xr-x ./lib/libc.so.6 -rwxr-xr-x ./lib/libtinfo.so.5 -rwxr-xr-x ./lib/ld-linux-x86-64.so.2 drwxr-xr-x ./等
[root@localhost bin]# ldd /mnt/proba1/chroot/bin/bash linux-vdso.so.1 => (0x00007fff6fe00000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f12cdd40000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f12cdb38000) libc.so.6 => /lib64/libc.so.6 (0x00007f12cd7a0000) /lib64/ld-linux-x86-64.so.2 (0x00007f12cdf70000)
答案1
输出ldd
显示bash
期望在 中找到其库/lib64
,而不是/lib
.另外,这意味着您必须复制它们从 /lib64
进入监狱内的相应目录。中找到的相同文件/lib
将不起作用。
答案2
我所做的是为此使用“mount --bind”。您还可以将其设置为只读。例如:
mkdir test
cd test
mkdir bin sbin usr etc
mount --bind -o ro /bin bin
mount --bind -o ro /sbin sbin
mount --bind -o ro /usr usr
mount --bind -o ro /etc etc
chroot .
这并不完全,但你明白了。如果你也使用“aufs”,这会变得非常酷。它允许您在可读层之上放置一个可写层。这样,您最终就不必复制、将其绑定挂载为只读,但仍然使其可写,而所有写入都保存在某个占位符中。另一件可以尝试的事情是使用“cp -l”链接复制。然后是“cow”,意思是写时复制。它的作用是首先制作一个副本,但所有目录条目都指向磁盘上的相同节点。它看起来像一个副本,但它们都是链接的。不是符号链接,而是硬链接。 Cow 使得当您尝试写入文件时,该文件的实际内容首先被复制,然后被修改。