30. 制限付き実行—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/restricted
移動先:案内検索

30。 制限付き実行

警告

Python 2.3では、これらのモジュールは、さまざまな既知の簡単に修正できないセキュリティホールのために無効になっています。 モジュールは、 rexec および Bastion モジュールを使用する古いコードを読むのに役立つようにここに文書化されています。


制限付き実行は、信頼できるコードと信頼できないコードの分離を可能にするPythonの基本的なフレームワークです。 このフレームワークは、信頼できるPythonコード(スーパーバイザー)が制限付きのアクセス許可で「パッド付きセル」(または環境)を作成し、このセル内で信頼できないコードを実行できるという概念に基づいています。 信頼されていないコードはそのセルから抜け出すことができず、信頼されたコードによって定義および管理されているインターフェイスを介してのみ機密性の高いシステムリソースと対話できます。 真の安全性を定義するのは困難であり、制限された環境が作成される方法によって決定されるため、「制限された実行」という用語は「safe-Python」よりも好まれます。 制限された環境はネストでき、内部セルはより低い特権のサブセルを作成することに注意してください。

Pythonの制限付き実行モデルの興味深い側面は、信頼できないコードに提示されるインターフェースは通常、信頼できるコードに提示されるものと同じ名前を持っていることです。 したがって、制限された環境で実行するように設計されたコードを作成するために、特別なインターフェースを学習する必要はありません。 また、パディングされたセルの正確な性質はスーパーバイザーによって決定されるため、アプリケーションに応じてさまざまな制限を課すことができます。 たとえば、信頼できないコードが指定されたディレクトリ内のファイルを読み取ることは「安全」であると見なされる場合がありますが、ファイルを書き込むことは決してありません。 この場合、スーパーバイザーは組み込みの open()関数を再定義して、 mode パラメーターが'w'の場合は常に例外を発生させることができます。 また、 filename パラメーターに対してchroot()のような操作を実行し、ルートが常にファイルシステムの安全な「サンドボックス」領域を基準にする場合もあります。 この場合、信頼されていないコードは、同じ呼び出しインターフェイスを使用して、その環境に組み込みの open()関数を引き続き表示します。 セマンティクスも同じであり、スーパーバイザーが許可されていないパラメーターが使用されていると判断したときにIOErrorが発生します。

Pythonランタイムは、グローバル変数内の__builtins__オブジェクトのIDに基づいて、特定のコードブロックが制限付き実行モードで実行されているかどうかを判断します。これが標準の __ builtin __ [ X235X]モジュールの場合、コードは制限されていないと見なされます。それ以外の場合、コードは制限されていると見なされます。

制限付きモードで実行されるPythonコードは、埋め込みセルからの脱出を防ぐように設計されたいくつかの制限に直面しています。 たとえば、関数オブジェクト属性func_globalsとクラスおよびインスタンスオブジェクト属性 __ dict __ は使用できません。

2つのモジュールは、制限された実行環境をセットアップするためのフレームワークを提供します。

も参照してください

グレイルホームページ
Pythonで記述されたインターネットブラウザであるGrailは、これらのモジュールを使用してPythonアプレットをサポートします。 GrailでのPythonの制限付き実行モードの使用に関する詳細は、Webサイトで入手できます。