Python 代码监禁

标签 python virtualization pysandbox

我有一堆 python 项目,其中包含不受信任的 WSGI 应用程序。我需要模拟和安全地运行它们。所以我需要限制目录访问、python 模块使用以及 CPU 和内存限制。

我考虑了两种方法:

  1. 通过 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)
    
  2. 修改 Python 解释器,排除有潜在风险的模块,在并行进程中运行,通过 ZMQ/Unix 套接字进行通信。我什至不知道从哪里开始。

你能推荐什么?

最佳答案

我会使用 gunicorn 运行您的应用程序,每个应用程序都有一个单独的进程和配置,并具有用户级权限(每个不受信任的应用程序对不同的用户)。每个 gunicorn 实例都将在本地主机上的用户范围端口上提供服务,nginx 或其他网络服务器可以连接到它们以路由并将它们提供给网络。

Heroku 更进一步,将每个 gunicorn 实例(或 unicorn、apache 或任意其他服务器)放入虚拟机中。这可能是最安全的处理方式,绝对是可靠地限制 CPU 和内存使用的最佳选择,但您可能不需要走那么远,具体取决于您的要求。

这种方法的优点之一是,如果合适,每个应用程序都可以在不同版本的 Python 上运行;借助虚拟机沙箱,它们甚至可以完全在不同的操作系统上运行。

编辑:要在不使用 VM 沙箱方法的情况下限制内存使用,请参阅 this question .要限制 CPU 使用率,请调整 gunicorn 设置——为允许应用程序使用的每个核心启动一个 gevent 风格的 worker。

再次编辑:一种完全不同的方法是使用 PyPy's sandboxing mechanism这应该比 CPython 加上沙盒模块更安全。但是,我更喜欢 guincorn 或 gunicorn + 虚拟机方法。

关于Python 代码监禁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10587941/

相关文章:

python - 如何使用stackoverflow api获取 'user'数据?

docker - headless Docker主机与 headless 容器

python - 导入错误 : No module named _sqlite3 on GAE

python - Tkinter - 从 spinbox 获取值

ios - iPhone可以虚拟化吗?

python - 使用 pysandbox 限制功能 (RF)

python - libsandbox 和 pysandbox 的限制功能

python - 如何安装 libsandbox?我在安装过程中遇到一些问题

python - 如何创建默认单选按钮网站

language-agnostic - 是否可以在托管操作系统之上运行 "native"代码?