chroot: 无法运行命令 '/bin/bash': 没有那个文件或目录

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目录的依赖,如在答复中提到这里

  • 我想到了。bin/bash 在那里,但我没有 /lib 和 /lib64 里面。/bin/bash 依赖于 (ofc) 的 libc、ld-linux、libdl 等......所以简单的 cp -a /usr rootfs/、cp -a /lib rootfs/、cp -a /lib64 rootfs/ 就足够了。(你可以挂载绑定那些 ofc,但我复制了它们,因为我想运行一些危险的东西,这可能会破坏 rootfs 中的那些文件。)来自 chroot 的消息可能更具描述性。“没有这样的文件或目录”真的意味着“我不能运行这个 sh...”。 (55认同)
  • rootfs 文件夹中有一个 /bin/bash 文件 (3认同)
  • 它可能是由你的 `chroot` 中的 `/root/.bashrc` 或 `/root/.bash_profile` 中的一些失败的命令行/行引起的。你能暂时重命名这些文件吗?你还能确保`bash`是可执行的(`chmod +x /chroot/bin/bash`)吗? (2认同)
  • 您可以运行 `ldd /bin/bash` 来查看 bash 依赖的确切文件,这些文件必须被复制。 (2认同)

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)

  • 如果您使用第一种方法(标记为 1)),则不会创建重复项。如果您 chroot 到不受信任的环境,第二个很有用。例如,你有一个分区有木马什么的。 (2认同)

Jai*_* MJ 6

如果您正在进行交叉编译,则需要使用可以运行 /mnt/somedir/bin/bash 的 qemu 模拟器。以下是armhf交叉编译的步骤其他架构的步骤应该类似。

  1. 首先安装qemu-user-static

sudo apt-get install qemu-user-static

  1. 然后将“qemu-arm-static”二进制文件复制到 chroot 目录中

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

  • 没有迹象表明这就是用户正在尝试做的事情。 (3认同)
  • 这两种情况的错误是相同的。如果做交叉编译的人遇到这个问题,他可以在这里找到答案。 (3认同)

cra*_*150 5

chroot尝试启动$SHELL默认情况下在您的环境变量中设置的 shell ,但它会在您的新根目录中查找它,该目录似乎不包含/bin/bash,因此无法启动。

您可以通过简单地将其添加为参数来告诉 chroot 在新根目录中启动另一个程序:

chroot /your/new/root /bin/foo --options...
Run Code Online (Sandbox Code Playgroud)

请注意,命令的路径您的新根目录中进行了解释,因此在此示例中,被调用的程序实际上位于/your/new/root/bin/foo

  • rootfs 文件中有一个 /bin/bash 文件,请问是什么问题 (3认同)
  • 对于投反对票的人:虽然这不是海报案例中的问题,但这是对问题中错误的有效且并非不可能的解释。如果您发现任何其他问题,请在否决某些内容时发表评论。 (3认同)

小智 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)