2

有没有办法将 linux 进程沙箱到某个目录中,并赋予该进程对该目录的独占 rw 访问权限?例如,创建一个临时工作目录,并启动例如 python 或其他脚本工具,使其只能在该目录中写入,而不会限制其功能太多。而且只有这个进程可以访问这个目录的读取(当然超级用户除外)。

我需要这个来沙箱一个基本上允许用户运行任意代码的 Web 服务。我们目前在软件本身中进行授权,但最终所有进程都以同一个 linux 用户身份运行。我们需要一种用户不能对系统造成任何损害的方法,但确实有一个临时的私有工作目录来写入和读取受 web 服务的其他用户保护的文件。

4

4 回答 4

0

这样它就只能在这个目录中写入,而不会过多地限制它的功能。

哇,这听起来几乎很神奇。几乎不是编程问题。

于 2010-10-26T00:31:34.687 回答
0

文件权限基于所有者/组而不是进程,因此同一用户运行的多个程序将能够访问拥有的目录。但是,如果您在每个进程运行之前为每个进程创建一个临时目录,然后chroot(),那么任何进程都应该能够摆脱其 chroot 监狱以访问其他目录。

基本概念是,就进程而言,临时目录成为目录树的顶部。这个过程不知道,也不能改变它上面的任何东西。否则,它可以在其沙箱中读/写创建/删除任何内容。

例如:

/rundir
/rundir/temp1  <-- process 1 chroot jailed here, can't go above
/rundir/temp2  <-- process 2 chroot jailed here, can't go above

另见“man 8 chroot”。

于 2010-10-26T02:51:06.707 回答
0

您可以使用像Grsecurity这样的内核补丁(我认为还有其他可以完成这项工作的补丁,我认为,寻找 SELinux 和 AppArmor)来为某个进程强制执行 RBAC(基于角色的访问控制)。

鉴于您的使用场景,我认为使用安全增强内核是必须的。

于 2010-10-26T06:44:24.430 回答
0

听起来您想要类似于 Linux 的FreeBSD Jail等价物,或者至少是非常相似的东西。这篇文至少包含一个同名工具的描述。

于 2010-10-26T01:00:42.403 回答