在我的服务器上运行其他人代码(沙箱)的安全方式?

我想做一个web服务,在本地运行其他人的代码…当然,我想限制他们的代码访问某些“沙箱”目录,他们将无法连接到我的服务器的其他部分(数据库,主networking服务器等)

什么是最好的办法呢?

运行VMware / Virtualbox:

(+)我认为它是安全的,即使有人设法“黑客”..他们只是黑客客机

(+)会限制进程使用的CPU和内存

(+)易于设置..只需创build虚拟机

( – )很难将沙箱目录从主机“连接”到客户机

( – )浪费额外的内存和CPU来pipe理虚拟机

运行低于等级的用户:

(+)不会浪费额外的资源

(+)沙箱目录只是一个普通的目录

(?)不能限制CPU和内存?

(?)不知道它是否足够安全…

任何其他方式?

运行Fedora Core 8的服务器,用Java和C ++编写的“其他”代码

Solutions Collecting From Web of "在我的服务器上运行其他人代码(沙箱)的安全方式?"

  1. 在非特权用户下运行仍然允许本地攻击者利用漏洞提升权限 。
  2. 允许在VM中执行代码也是不安全的; 攻击者可以访问主机系统,就像最近的VMWare漏洞报告所显示的那样。

在我看来,从安全的角度来看,允许在系统上运行本机代码并不是一个好主意。 也许你应该重新考虑让他们运行本地代码,这肯定会降低风险。

要限制CPU和内存,需要为进程组设置限制(POSIX资源限制仅适用于单个进程)。 你可以使用cgroups来做到这一点。

例如,要通过挂载内存cgroups文件系统来限制内存启动:

# mount cgroup -t cgroup -o memory /cgroups/memory

然后,为每个组创建一个新的子目录,例如

 # mkdir /cgroups/memory/my-users 

把你想要约束的进程(PID为“1234”的进程)放到这个组中:

 # cd /cgroups/memory/my-users # echo 1234 >> tasks 

设置组的总内存限制:

# echo 1000000 > memory.limit_in_bytes

如果组中的进程fork子进程,它们也将在组中。

上面的组设置驻留内存限制(即受限进程将开始交换,而不是使用更多的内存)。 其他cgroups让你限制其他的东西,如CPU时间。

你可以把你的服务器进程放到组中(这样整个系统的所有用户都会受到限制)或者让服务器把每个新的会话放到一个新的组中。

阅读codepad.org/about页面可能会给你一些很酷的想法。

http://codepad.org/about

chroot , jail , container , Vserver / OpenVZ等,通常比非特权用户更安全,但比完整的操作系统虚拟化要轻。

此外,对于Java,您可能会信任JVM的内置沙箱,并且为了编译C ++, NaCl声称可以使用沙盒x86代码。

但是跳棋的回答表明,过去几乎所有的“沙箱”都可能造成恶意破坏,而且我预计未来会有更多的漏洞不断被发现(希望能够修复)。 你真的想运行不受信任的代码吗?

尝试使用lxc作为你的Apache服务器的容器

查看ulimit和朋友的方法来限制低级用户DOS机器的能力。

尝试学习一些关于设置SELinux的策略。 如果你正在运行一个红帽子邮箱,那么你可以把它打包到默认的发行版中去。

如果你知道代码不应该访问的东西,这将是有用的。 或者你可以做相反的事情,只允许访问某些东西。

但是,这些政策是复杂的,可能需要更多的时间投入,而不是您所希望提出的。

使用Ideone API – 最简单的方法。

不知道你想投入这个东西多少努力,但你可以运行像VPS网络主机那样的Xen吗?

http://www.xen.org/

这将允许在他们的服务器的小部分上进行完全的根访问而不损害其他用户或基本系统。