我如何启动可执行文件,使其认为根目录位于自定义路径,而不是实际根目录。我以为可以使用 sandbox-exec 来实现,但到目前为止我还没有找到任何方法。
答案1
在类Unix操作系统上,运行具有专用根目录的进程的通用术语是chroot
(“更改根目录”的缩写)。
实现这个的规范方式是这样的:
$ mkdir /tmp/chroot-dir
$ cp /bin/sh /tmp/chroot-dir/
$ chroot /tmp/chroot-dir /sh
假设您已在 /tmp 上启用了执行,这将更改根目录,使成为该进程的/tmp/chroot-dir
新目录,然后在该上下文中执行。 可能需要您成为 root 用户;在这种情况下,请替换。当您退出生成的 shell 时,一切都将恢复正常。/
/sh
chroot
sudo chroot
chroot
由于 /bin/sh 可能需要一些库,因此特定示例可能会失败,但它会为您指明还需要什么的正确方向。在 Linux 上,运行ldd /bin/sh
将告诉您需要哪些额外的库;OS X 可能有类似的东西,即使不是相同的东西。非平凡软件也经常需要配置文件、设备节点以及文件系统视图中可用的其他零碎东西。
面向消费者的软件通常不易于进行 chroot,除非付出很大努力,但服务器软件通常可以以相对较少的努力被诱导进入 chroot,有些甚至附带说明具体需要什么的文档。