限制 python 脚本访问 os 函数

Restrict python script access to os functions

我需要你的新想法,感谢任何帮助。

我正在实施一个系统,用户可以在其中上传自己的 Python 脚本并在其中一个服务器中执行它们。

我很注意安全问题。我想限制从此脚本对操作系统的任何访问。

首先,脚本使用 ast 解析器进行验证,以禁止访问许多最明显的关键字,如 execimportopen

不过,用户可以声明对某些库的使用。其中一个重要的是 pandas 库(我还必须提供 matplotlibnumpy 等)。我已经实现了 'proxy' 个对象,模仿模块,但只提供对有限属性集的访问。例如,我可以提供一个代理对象 json,但不允许访问函数 loadsdumps

通过名称 ossys 等从任何对象获取属性的最明显尝试也是不允许的。这样,当用户尝试使用 json.os 或类似方式访问 os 模块时,我试图关闭一个漏洞。

这可以工作,但它是一个简单的盾牌。我可以审查所有模块并禁止访问大多数危险功能,但即使错过一个也可能导致潜在的损害。此外,某些模块可能会以一种棘手的方式访问,例如 pandas.tools.util.pd 将引用原始的 pandas 模块。我会花一年的时间来结束一切..

我考虑过在文件系统级别限制访问,但是脚本 运行s 在主进程中具有 eval 函数(基于 celery)并且具有相同的权限(和同一用户)作为主进程。理论上它可以读取所有源并将它们传递给用户。

我的一个想法是 运行 脚本在一个单独的进程中使用最少的源和权限集,并通过管道传递数据 to/from。但这将需要重构大量代码并且无法保证稳定性 - 我仍然需要大量代码才能使其正常工作。

RestrictedPython就是你所需要的。