chroot替代品

时间:2013-03-27 22:03:12

标签: linux ubuntu filesystems chroot

我正在开发一个webapp(在Ubuntu服务器上运行),允许用户运行Octave代码(基本上是Matlab)。但是,我只希望它们能够读取或修改指定主文件夹中的文件夹。

我知道chroot是这样做的一种方式,但它是不安全的,你需要root权限chroot(理想情况下应用程序不需要)。

此外,我可以在运行之前读取用户的代码,如果他们尝试写入文件则抛出错误,但为此我需要考虑用户可能会破坏我的规则以防止它。

我查看了Linux-VServer,但这需要为每个用户提供一个单独的虚拟服务器(除非我弄错了)。

编辑:我可以建立一个SSH连接并监禁连接,但这似乎是不必要的资源贪婪。

有没有办法在不使用chroot的情况下将用户或流程监禁到特定文件夹?

3 个答案:

答案 0 :(得分:0)

查看lxc。

http://lxc.sourceforge.net/

LXC是......“LXC是Linux容器的用户空间控制包。”这有点像cgroups虚拟化。

答案 1 :(得分:0)

你可以使用Coffer,这是一个非常漂亮的chroot包装器。它为你做了很多繁重的工作。

https://github.com/Max00355/Coffer

答案 2 :(得分:0)

unshare() 系统调用已在内核 2.6.16+ 中添加到 Linux。

要 chroot 到 rootfs 目录 ./target/ 并以 非 root 用户 运行 /bin/bash,您可以执行以下操作:

unshare -r sh -c 'chroot ./target/ /bin/bash'

它通常比:

fakechroot fakeroot chroot ./target/ /bin/bash

甚至更简单,比:

LD_LIBRARY_PATH=./target/lib:./target/usr/lib:./target/lib64:./target/lib/x86_64-linux-gnu:./target/usr/lib/x86_64-linux-gnu ./target/bin/bash #or ld-linux.so.2 --library-path ... ./target/bin/bash

P.S.:但是如果你想和父 rootfs 通信,你必须在 chroot 之前在 ./target 中挂载一些东西。