作为我真实问题的替代方案:有没有人知道一个简单的命令行工具来制作一个chroot监狱?我正在考虑运行命令并复制运行到给定目录所需的所有内容。我看到了一个工具的方向,但它有配置文件,似乎期待我从X启动它,这些都不适用于我的情况。
对于真正的问题:
我正在尝试建立一个chroot监狱,但它无法正常工作。这是我在命令时得到的结果:
bcs@builder:~/dmd$ sudo strace sudo chroot /home/bcs/dmd/ /usr/bin/make -C src linux.mak
...
chroot("/home/bcs/dmd/") = 0
chdir("/") = 0
execve("/usr/bin/make", ["/usr/bin/make", "-C", "src", "-f", "linux.mak"], [/* 13 vars */]) = -1 ENOENT (No such file or directory)
write(2, "chroot: ", 8chroot: ) = 8
write(2, "cannot run command `/usr/bin/mak"..., 34cannot run command `/usr/bin/make') = 34
write(2, ": No such file or directory", 27: No such file or directory) = 27
write(2, "\n", 1
) = 1
close(1) = 0
close(2) = 0
exit_group(127) = ?
bcs@builder:~/dmd$ ll /home/bcs/dmd/usr/bin/make
-rwxr-xr-x 1 bcs bcs 166112 Sep 17 00:41 /home/bcs/dmd/usr/bin/make*
似乎chroot
无法找到make
,即使它应该在那里。我缺少什么想法?
BTW:这是在最近的Ubuntu盒子上。
答案 0 :(得分:3)
您可能没有可用的加载程序和/或共享库。例如,在我的系统(64位Debian sid)上,make需要这个:
$ ldd /usr/bin/make
linux-vdso.so.1 => (0x00007fff95fff000)
librt.so.1 => /lib/librt.so.1 (0x00007fc97d557000)
libc.so.6 => /lib/libc.so.6 (0x00007fc97d1f6000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fc97cfd9000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc97d761000)
您需要在chroot中提供所有这些文件(或等效的文件)。
答案 1 :(得分:1)
可能有点晚了,但你要求的是a script like this。例如,您可以使用以下方法对其进行测试:
mkchroot subdir /bin/sh /bin/ls
sudo chroot subdir /bin/sh
您将拥有sh
和ls
的最小环境。当然,您可以添加更多可执行文件以获得更完整的rootfs
。
它主要起作用,但我用mksquashfs
进行测试,似乎对libgcc_s.so.1
视而不见。它没有被任何其他库动态链接,所以脚本没有看到它,我得到了这个错误。
libgcc_s.so.1 must be installed for pthread_cancel to work