USE*_*789 75 chroot executable
当我运行chroot命令时出现错误:
failed to run command ‘/bin/bash’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
pho*_*ops 44
此错误意味着chroot 中没有/bin/bash目录。确保将它指向(或其他 shell 的)可执行文件在目录中的位置。bashchroot
如果你有/mnt/somedir/usr/bin/bash然后执行chroot /mnt/somedir /usr/bin/bash.
除了以上的,你还需要添加libc目录的依赖,如在答复中提到这里。
Dal*_*lus 32
我有/bin/bashchrooted 目录,但里面没有 /lib 和 /lib64 。来自 chroot 的消息可能更具描述性。“没有这样的文件或目录”真的意味着“我不能运行这个......”。
/bin/bash当然取决于 libc、ld-linux、libdl 等,您可以使用ldd /bin/bash查看它需要哪些库。
1) 您可以将mount -o bind这些目录放在 chroot 下 2) 或者您可以将这些库复制到 chroot,如果您不相信 chroot 环境不会损坏它们,如下所示:
cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
Run Code Online (Sandbox Code Playgroud)
如果您正在进行交叉编译,则需要使用可以运行 /mnt/somedir/bin/bash 的 qemu 模拟器。以下是armhf交叉编译的步骤。其他架构的步骤应该类似。
sudo apt-get install qemu-user-static
sudo cp /usr/bin/qemu-arm-static /mnt/usr/bin/
将 qemu-arm-static 复制到 /mnt/usr/bin 后,您将能够执行 chroot。
查看更多详细信息:https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html
chroot尝试启动$SHELL默认情况下在您的环境变量中设置的 shell ,但它会在您的新根目录中查找它,该目录似乎不包含/bin/bash,因此无法启动。
您可以通过简单地将其添加为参数来告诉 chroot 在新根目录中启动另一个程序:
chroot /your/new/root /bin/foo --options...
Run Code Online (Sandbox Code Playgroud)
请注意,命令的路径在您的新根目录中进行了解释,因此在此示例中,被调用的程序实际上位于/your/new/root/bin/foo
小智 5
尝试通过 ssh 连接到远程服务器上的 chroot 帐户时,我遇到了同样的错误。就我而言,我在远程 lib64 目录中缺少以下文件。服务器是 Centos6.9
ld-linux-x86-64.so.2
Run Code Online (Sandbox Code Playgroud)
通过执行以下操作修复了它:
cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
Run Code Online (Sandbox Code Playgroud)