Restricted Execution
限制执行
警告
在Python 2.3中,这些模块由于各种已知且不易解决的安全漏洞而被禁用。这些模块仍然记录在这里以帮助阅读使用rexec
和Bastion
模块的旧代码。
受限制的执行
是Python中的基本框架,它允许分离可信和不可信代码。该框架基于可信Python代码(管理程序
)可以创建具有有限权限的“填充单元”(或环境)并在该单元内运行不可信代码的概念。不受信任的代码不能脱离其单元,并且只能通过受信任代码定义和管理的接口与敏感的系统资源进行交互。术语“受限制的执行
”比“安全的Python”更受青睐,因为真正的安全性很难定义,并且取决于受限环境的创建方式。请注意,受限制的环境可以嵌套,内部单元创建子单元的权限较小但不会更大。
Python有限执行模型的一个有趣之处在于,呈现给不可信代码的接口通常与呈现给可信代码的接口具有相同的名称。因此,不需要学习专门的接口来编写旨在在受限环境中运行的代码。由于填充单元格的确切性质由管理员决定,因此可能会施加不同的限制,具体取决于应用程序。例如,对于不受信任的代码读取指定目录中的任何文件可能被认为是“安全的”,但从不写入文件。在这种情况下,管理员可能会重新定义内置open()
函数,以便在模式
参数存在时引发异常'w'
。它也可能chroot()
对文件名
执行类似操作参数,使得root始终相对于文件系统的某个安全“沙箱”区域。在这种情况下,不受信任的代码仍然会open()
在其环境中看到一个内置函数,并具有相同的调用接口。语义也是一样的,IOError
当主管确定使用了一个不允许的参数时会引发s。
Python运行时基于__builtins__
全局变量中对象的身份确定特定代码块是否在受限执行模式下执行:如果这是标准__builtin__
模块的(字典),则代码被视为不受限制,否则它被认为是受限制的。
在限制模式下执行的Python代码面临着许多限制,这些限制旨在防止它从填充的单元格中逃脱。例如,函数对象属性func_globals
和类和实例对象属性__dict__
不可用。
两个模块提供了设置受限执行环境的框架:
- 30.1.
rexec
- 受限制的执行框架
另请参阅
Grail主页用Python编写的互联网浏览器Grail使用这些模块来支持Python小程序。网站上提供了有关在Grail中使用Python的受限执行模式的更多信息。