##
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', 'rotor', '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_SOURCE`、`PY_COMPILED` および `C_EXTENSION` です。`RExec`に対する値は、`(C_EXTENSION, PY_SOURCE)`です。サブクラスで `PY_COMPILED`を追加することは推奨されません； 攻撃者が、バイトコンパイルしたでっちあげのファイル(.pyc)を、 例えば、あなたの公開 FTP サーバの /tmp に書いたり、 /incoming にアップロードしたりして、とにかくあなたのファイルシステム内に 置くことで、制限された実行モードから抜け出ることができるかもしれないからです。