使用unshare模拟chroot


13

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

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

这就是为什么fakechroot(1)fakeroot(1)chroot(1)并非我要找的东西的原因。

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


AFAICS unshare(1)是围绕仅根用户的系统调用集合的一个相当薄的包装,并且(至少在Fedora 18上)它不是SUID,所以我非常怀疑这是否适用于非root用户。
vonbrand

哦,太可惜了。我的印象是unshare是setuid。我想我根深蒂固。
Rooties

4
随着新的Linux 3.8内核的发布,您可以将名称空间功能用作非root用户。但这是新事物:您首先需要一个uid命名空间,并且unshare还不支持该命名空间。而且您的动作仍然会受到限制。
BatchyX

Answers:


5

是。如果您的内核支持user_namespaces(并且已启用它们),则可以首先“模拟root”用户,然后该chroot用户具有作为真实root用户的调用权限。(由于以前普通用户可能会升级特权(例如,通过set-UID-root二进制文件和chroot目录中的自定义库),因此以前只需要将其限制为root用户。)

您可以在shell中尝试:

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

无法识别的选项'--map-root-
user'– Zibri,

1
@Zibri它现在对我有用,unshare来自util-linux-2.30.2-alt1
imz-Ivan Zakharyaschev

1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.