30. Restricted Execution

Warning

在 Python 2.3 中,由于各种已知且不易修复的安全漏洞,这些模块已被禁用。这些模块仍在此处记录,以帮助阅读使用rexecBastion模块的旧代码。

“受限执行”是 Python 中的基本框架,可用于隔离受信任和不受信任的代码。该框架基于这样的概念,即受信任的 Python 代码( supervisor *)可以创建具有受限权限的“填充单元”(或环境),并在此单元中运行不受信任的代码。不受信任的代码无法脱离其单元,并且只能pass受信任的代码定义和 Management 的接口与敏感的系统资源进行交互。术语“受限执行”比“ safe-Python”更受青睐,因为 true 的安全性很难定义,并且取决于受限环境的方式请注意,受限制的环境可以嵌套,内部单元创建的子单元的特权较小,但从不更高。

Python 的受限执行模型的一个有趣方面是,提供给不受信任代码的接口通常与提供给受信任代码的接口具有相同的名称。因此,无需学习特殊的接口即可编写旨在在受限环境中运行的代码。并且由于填充单元的确切性质由主管确定,因此可以根据应用施加不同的限制。例如,对于不受信任的代码,可以读取指定目录中的任何文件,而从不写入文件,这是“安全的”。在这种情况下,主管可以重新定义内置的open()函数,以便在* mode 参数为'w'时引发异常。它还可能对 filename *参数执行类似chroot()的操作,以使 root 始终相对于文件系统的某些安全“沙盒”区域。在这种情况下,不受信任的代码仍将在其环境中使用相同的调用接口看到内置的open()函数。语义也将相同,当主管确定正在使用不允许的参数时,将引发IOError

Python 运行时基于其全局变量中__builtins__对象的身份来确定特定代码块是否以受限执行模式执行:如果这是标准builtin模块(的词典),则该代码被视为不受限制,否则将被视为受限制的。

在受限模式下执行的 Python 代码面临许多限制,旨在防止其从填充单元中逃脱。例如,Function对象属性func_globals以及类和实例对象属性dict不可用。

以下两个模块提供了用于设置受限执行环境的框架:

See also

  • 圣杯首页

  • Grail 是用 Python 编写的 Internet 浏览器,它使用这些模块来支持 PythonServlets。网站上提供了有关在 Grail 中使用 Python 的受限执行模式的更多信息。