17.1.2 制限された環境を定義する

RExec クラスには以下のクラス属性があります。それらは、 __init__() メソッドが使います。それらを既存の インスタンス上で変更しても何の効果もありません;そうする代わりに、 RExec のサブクラスを作成して、そのクラス定義でそれらに 新しい値を割り当てます。そうすると、新しいクラスのインスタンスは、 これらの新しい値を使用します。これらの属性のすべては、文字列のタプルです。

nok_builtin_names
制限された環境で実行するプログラムでは利用できないであろう、 組み込み関数の名前を格納しています。 RExecに対する値は、 ('open', 'reload', '__import__') です。 (これは例外です。というのは、組み込み関数のほとんど大多数は 無害だからです。この変数をオーバライドしたいサブクラスは、 基本クラスからの値から始めて、 追加した許されない関数を連結して いかなければなりません - 危険な関数が新しく Python に追加された時は、 それらも、このモジュールに追加します。)

ok_builtin_modules
安全にインポートできる組み込みモジュールの名前を格納しています。 RExecに対する値は、 ('audioop', 'array', 'binascii', 'cmath', 'errno', 'imageop', 'marshal', 'math', 'md5', 'operator', 'parser', 'regex', 'select', 'sha', '_sre', 'strop', 'struct', 'time') です。この変数をオーバーライドする場合も、 同様な注意が適用されます - 基本クラスからの値を使って始めます。

ok_path
importが制限された環境で実行される時に検索される ディレクトリーを格納しています。 RExecに対する値は、(モジュールがロードされた時は) 制限されないコードの sys.path と同一です。

ok_posix_names
制限された環境で実行するプログラムで利用できる、 os モジュール内の関数の名前を格納しています。 RExecに対する値は、 ('error', 'fstat', 'listdir', 'lstat', 'readlink', 'stat', 'times', 'uname', 'getpid', 'getppid', 'getcwd', 'getuid', 'getgid', 'geteuid', 'getegid') です。

ok_sys_names
制限された環境で実行するプログラムで利用できる、 sys モジュール内の関数名と変数名を格納しています。 RExecに対する値は、 ('ps1', 'ps2', 'copyright', 'version', 'platform', 'exit', 'maxint')です。

ok_file_types
モジュールがロードすることを許されているファイルタイプを格納しています。 各ファイルタイプは、impモジュールで定義された整数定数です。 意味のある値は、PY_SOURCEPY_COMPILED および C_EXTENSION です。RExecに対する値は、(C_EXTENSION, PY_SOURCE)です。サブクラスで PY_COMPILEDを追加することは推奨されません; 攻撃者が、バイトコンパイルしたでっちあげのファイル(.pyc)を、 例えば、あなたの公開 FTP サーバの /tmp に書いたり、 /incoming にアップロードしたりして、とにかくあなたのファイルシステム内に 置くことで、制限された実行モードから抜け出ることができるかもしれないからです。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。