imz*_*hev 6 chroot jails not-root-user virtualization
目标是在主机 Linux 系统内的置换(重新定位)发行版(其 / 不得与全局 / 重合)中安装和运行程序。这些程序不适用于使用不同的 / 。
fakechroot 不是一个完整的解决方案,因为它使用库替换而不是在系统调用级别上进行操作(因此不适用于静态链接的二进制文件)。
imz*_*hev 10
解决方案可能必须基于 ptrace 或namespaces (unshare)。
基于 ptrace 的解决方案可能比基于命名空间/非共享的解决方案效率低(但后一种技术是尖端技术,可能没有很好地探索路径)。
至于基于 ptrced 的解决方案,感谢/sf/answers/71380431/上的评论,我发现了 UMView:
链接的文档描述了如何获得主机 fs 的“写时复制视图”——这与执行 chroot 并不完全一样。关于如何在 umview 中实现 /-substitution 的确切说明会很好地回答我的问题(如果你知道如何做到这一点,请写一篇!)。
UM视图必须是开源的,因为它包含在Ubuntu和Debian - http://packages.ubuntu.com/lucid/umview。
另一种实现中描述http://www.cs.vu.nl/~rutger/publications/jailer.pdf,http://www.cs.vu.nl/~guido/mansion/publications/ps/secrypt07.pdf .
他们有一个 change-root-ing 策略规则,CHRDIR,其效果类似于 chroot。(“监禁政策”部分)
但是,他们可能还没有发布他们的源代码(部分基于修改后的 strace http://www.liacs.nl/~wichert/strace/—— “实现”部分)......
Geordi ( http://www.eelis.net/geordi/ , https://github.com/Eelis/geordi ) 可能会被修改,以便在被监禁的程序中将文件参数重写为系统调用。
PRoot是一个随时可用的基于 ptrace 的工具。http://proot.me/ :
chroot 等价物
要在给定的 Linux 发行版中执行命令,只需为 proot 提供来宾 rootfs 的路径,后跟所需的命令。下面的例子执行程序 cat 来打印文件的内容:
Run Code Online (Sandbox Code Playgroud)proot -r /mnt/slackware-8.0/ cat /etc/motd Welcome to Slackware Linux 8.0当没有指定时,默认命令是 /bin/sh。因此,限制交互式 shell 及其所有子程序的最短方法是:
Run Code Online (Sandbox Code Playgroud)proot -r /mnt/slackware-8.0/ $ cat /etc/motd Welcome to Slackware Linux 8.0
自从提出这个问题以来,Linux 内核中的 user_namespaces 支持变得更加成熟。现在,您可以在使用 unshare 模拟 chroot 中chroot的unshare类似帮助下正常执行 a :
unshare --user --map-root-user --mount-proc --pid --fork
chroot ......
su - user1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5090 次 |
| 最近记录: |