可以被非授权用户执行的有特权的Python程序(如setuid/setgid程序)应该不包含“用户”模块。用户模块会读入并执行pythonrc.py文件。由于这个文件会处于不可信用户的控制之下,包含用户模块就会允许攻击者强迫可信的程序执行任意代码。
Python通过其RExec类包括了对“受限制运行”的支持。这主要是用来执行applet和移动代码,但也可以用来限制程序的权限,即使代码不是由外界提供的。缺省情况下,一个受限制运行的环境允许读(而不是写)文件,而且不包括网络访问操作或GUI交互操作。这些缺省值可以改变,但要小心在受限制环境中造成漏洞。特别是允许用户不受限制地对某个类增加属性会允许各种彻底改变环境的方法,因为Python的工具调用了许多“隐含”的方法。注意,在缺省情况下,许多Python对象是通过引用传递的;如果把一个对可变值的引用插入受限制的程序环境中,受限制的程序就可以用一种受限制环境外可见的方式改变此对象!因此,如果要访问某个可变值,很多情况下应该复制这个可变值或使用Bastion模块(它支持对另一个对象的受限制访问)。更多的信息可参见Kuchling [2000]。 我不能确定对它进行的审计情况,所以用户需要注意。