使用 unshare 模拟 chroot

使用 unshare 模拟 chroot

我正在尝试为一个最小的、源代码的 Linux 发行版编写一个引导程序。

我想在类似 chroot 的环境中构建。这应该可以简化包装。我现在不关心安全性。引导程序不应需要任何非标准的第三方命令。如果不需要 root 的话那就太好了。

这就是为什么 fakechroot(1) fakeroot(1) chroot(1) 不正是我正在寻找的。

是否可以使用 unshare(1) 和 /bin/sh 来伪造/?

答案1

是的。如果你的内核支持 user_namespaces (并且它们已启用),可以先“模拟root”用户,然后获得调用权chroot(作为真正的root用户)。 (以前只需要限制为 root 用户,因为普通用户可能进行权限升级(例如,通过 chroot 目录中的 set-UID-root 二进制文件和自定义库)。)

您可以在 shell 中尝试以下操作:

unshare --user --map-root-user --mount-proc --pid --fork
/sbin/chroot ......
su - user1

答案2

我最近研究了如何在各种 Linux 发行版中做到这一点。找到的最简单的方法是:

unshare -r chroot <target_folder> <command_w_path>

为了chroot工作,正确的库及其路径需要位于目标文件夹中。这些可以通过使用ldd <command_w_path>然后将它们及其路径复制到目标文件夹中来确定。发行版之间存在细微差别,例如 Arch Linux 需要从usr/lib到 的符号链接lib才能工作。

答案3

只需捆绑或安装 fakeroot/fakechroot,因为它们已经非常适合于此。查看 cdebootstrap 来获取灵感。

相关内容