我想制作一个在本地运行其他人的代码的网络服务。当然,我想限制他们的代码对某个“沙箱”目录的访问,这样他们就无法连接到我服务器的其他部分(数据库、主网络服务器等)
最好的方法是什么?
运行VMware/Virtualbox:
低权限用户运行:
-
+ 不浪费额外资源
-
+ Sandbox目录只是一个普通目录
-
?不能限制CPU和内存吗?
-
?不知道是否足够安全
还有其他办法吗?
服务器运行 Fedora Core 8,“其他”代码用 Java 和 C++ 编写
要限制 CPU 和内存,您需要为进程组设置限制(POSIX 资源限制仅适用于单个进程)。您可以使用 cgroup 来完成此操作。
例如,要通过挂载内存 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
如果组中的进程派生子进程,它们也将在组中。
上面的组设置了驻留内存限制(即受限进程将开始交换而不是使用更多内存)。其他 cgroup 允许您限制其他内容,例如 CPU 时间。
您可以将服务器进程放入组中(以便整个系统及其所有用户都受到限制),或者让服务器将每个新会话放入新组中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)