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

7 python ptrace chroot virtual-machine jail

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

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

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

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

Gil*_*mas 5

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

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


mgb*_*sle 0

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

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

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

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

我会走pypy路线。