sas*_*hab 8 python virtualization pysandbox
我有一堆python项目,里面有不受信任的WSGI-apps.我需要模拟和安全地运行它们.所以我需要限制目录访问,python模块使用以及CPU和内存的限制.
我考虑两种方法:
从定义的文件中通过imp-module WSGI-object导入,并使用pysandbox运行它.现在我SandboxError: Read only object做的时候:
self.config = SandboxConfig('stdout')
self.sandbox = Sandbox(self.config)
self.s = imp.get_suffixes()
wsgi_obj = imp.load_module("run", open(path+"/run.py", "r"), path, self.s[2]).app
…
return self.sandbox.call(wsgi_obj, environ, start_response)
Run Code Online (Sandbox Code Playgroud)修改Python解释器,排除具有潜在风险的模块,在并行进程中运行,通过ZMQ/Unix套接字进行通信.我甚至不知道从哪里开始.
你能推荐什么?
我将使用 Gunicorn 运行您的应用程序,每个应用程序都有单独的进程和配置,并具有用户级权限(每个不受信任的应用程序位于不同的用户上)。每个 Gunicorn 实例都将在本地主机上的用户范围端口上提供服务,并且 nginx 或另一个 Web 服务器可以连接到它们以将它们路由并提供给 Web。
Heroku 更进一步,将虚拟机中的每个 Gunicorn 实例(或 unicorn、apache 或任意其他服务器)沙箱化。这可能是最安全的方法,并且绝对是可靠地限制 CPU 和内存使用的最佳选择,但根据您的要求,您可能不需要走那么远。
这种方法的优点之一是,如果合适的话,每个应用程序都可以在不同版本的 Python 上运行;通过虚拟机沙箱,它们甚至可以完全在不同的操作系统上运行。
编辑:要在不使用虚拟机沙箱方法的情况下限制内存使用,请参阅此问题。要限制 CPU 使用率,请调整 Gunicorn 设置——为允许应用程序使用的每个核心启动一个 gevent 式工作线程。
再次编辑:一种完全不同的方法是使用PyPy 的沙箱机制,它应该比 CPython 加沙箱模块安全得多。不过,我更喜欢 guincorn 或 Gunicorn + 虚拟机方法。