在我的服务器上运行任意不友好的Python代码

时间:2013-10-28 17:28:44

标签: python virtual-machine chroot ptrace jail

我正在制作一款游戏,用户可以编写Python程序来控制互相攻击的机器人。每转一圈(在一个转弯的游戏中)他们的脚本将在我的服务器上运行,以确定机器人的下一步行动。如何防止这些用户对我的服务器有误?

我想过/研究了以下内容:

  • eval他们的代码在有限的环境中(即禁用__builtins__
  • 使用特定于操作系统的监狱,例如chroot / ptrace
  • 在某种虚拟机中运行代码

我有一个Python程序,它运行用户的脚本一千次。如何强制执行一分钟的最长总持续时间,限制其内存资源,阻止它们访问任何文件或网络连接等等?什么是理想的解决方案或解决方案组合?

3 个答案:

答案 0 :(得分:5)

我在PythonAnywhere上工作,这是一个Python平台即服务,这意味着我们代表我们的用户运行了许多不受信任的代码 - 首页上的新交互式控制台Python.org是我们的,它的限制可能与你的不太相同。

我建议使用操作系统级虚拟化;语言层面的任何东西都可能不那么安全。出于历史原因,我们使用chroot和cgroup,但如果我们今天从头开始,我认为我们将使用Linux容器(LXC)或Docker。 LXC基本上是chroot和cgroups等一堆聪明的包装器,这使得它们更容易使用,因此你可以真正快速地启动一个短暂的虚拟机。而Docker是一个更易于使用的LXC包装器。两者都超级快 - 您可以在不到一秒的时间内启动并运行新的VM。

答案 1 :(得分:3)

答案 2 :(得分:0)

没有内置的方法在cpython中运行沙盒代码,但是在pypy中。

http://pypy.org/features.html#sandboxing

python wiki上描述了一些其他方法(比如使用jailkit),但它们似乎有各种缺点。

https://wiki.python.org/moin/SandboxedPython

我会去pypy路线。