linux - OSX 和 chroot 无法找到/bin/bash

标签 linux macos bash chroot

我正在尝试让 chroot 在我的 mac book 上工作。我将 jail 目录设置为包含/bin/sh 和/bin/bash(递归称为/usr/bin/otool)的所有要求

# ls /var/chroot/*/*
/var/chroot/bin/bash    /var/chroot/bin/sh

/var/chroot/usr/lib:
libDiagnosticMessagesClient.dylib       libauto.dylib
libc++abi.dylib                         libobjc.A.dylib
libSystem.B.dylib                       libc++.1.dylib
libncurses.5.4.dylib                    system

当我尝试在/var/chroot 上使用 chroot 时,它一直说找不到/bin/bash

# chroot /var/chroot/
chroot: /bin/sh: No such file or directory
$ sudo chroot /var/chroot/
chroot: /bin/bash: No such file or directory

知道是什么导致 chroot 无法在我的 Mac 上工作吗?

操作系统版本 10.8.4

编辑: 在 CentOS 上,当我运行 ldd/bin/bash 时,我得到了所有需要的库。如果我不全部复制它们,它会显示/bin/bash: No such file or directory。所以我认为这意味着在 Mac 上我缺少库;只是不确定是哪个。

最佳答案

您需要将 /usr/lib/dyld 复制到您的 chroot jail 以获得动态链接器。如果不存在,则尝试在 chroot jail 中执行任何操作都会失败,除了 Killed: 9 之外不会出现任何错误。一旦你复制了 /usr/lib/dyld ,那么如果你缺少任何进一步的库,你将得到一个错误,例如:

dyld: Library not loaded: /usr/lib/libncurses.5.4.dylib
  Referenced from: /bin/bash
  Reason: image not found

从你的文件列表中我看到你没有/usr/lib/dyld,所以我认为这很可能是你的问题。对于这个问题,我不确定为什么您得到的是 No such file or directory 而不是 Killed: 9;可能这是操作系统版本差异 - 我在 Mac OS X 10.10.5 上测试,你正在(或曾经)在 Mac OS X 10.8.4 上测试。

hwatkins 的回答当然有效,因为它复制了 /usr/lib/dyld 和运行 /bin/bash 所需的每个 dylib 到 jail 。但是,在设置 jail 时,我更喜欢只复制最低限度的文件以使其正常工作。一旦你复制了 dyld 和 bash,您可以按照错误消息获取所需的所有其他库的路径。 (有点费力,但这是保证的最低限度。)

递归调用otool -L的方法也适用于*.dylib文件,但它不会告诉你/usr/lib/dyld。这是因为 -L 打印使用的共享库,但 /usr/lib/dyld 不完全是共享库。如果您在可执行库上运行 otool -l,您将看到 -L 输出匹配加载命令 LC_LOAD_DYLIB(以及一些变体例如LC_REEXPORT_DYLIB),而对dyld的引用在LC_LOAD_DYLINKER中,它不是由-L输出的。

关于linux - OSX 和 chroot 无法找到/bin/bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19262649/

相关文章:

bash - 如何将多个文件通过管道传输到 ffmpeg?

bash - 无法将倒数第二个命令行参数设置为变量

linux - 写入 I2C I/O 设备

linux - sed命令错误

linux - 我如何通过 socialvpn 运行 diaspora pod?

eclipse - 服务器在端口8080上的其他实例

bash - 如何使用 ssh 连接创建具有多个变量的粒度 bash 脚本

linux - RTMP_ReadPacket,读取RTMP包头失败 rtmp ://a. rtmp.youtube.com/live2: Unknown error occurred

python - 将 Sublime Text 2 包定向到正确的 python 安装

C 代码适用于 Mac (Darwin 13.4),但不适用于 Linux (2.6.32)