我正在尝试为一个最小的、源代码的 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 来获取灵感。