2012-05-14 7 views
8

私はそれらの中に信頼できないWSGI-appsを持つpython-projectsをたくさん持っています。私はそれらをsimulatiously安全に実行する必要があります。ですから、ディレクトリアクセス、Pythonモジュールの使用法、CPUとメモリの制限には制限が必要です。Python code jailing

は、私は2つのアプローチを検討:定義されたファイルからIMP-モジュールWSGI-オブジェクトを経由して

  1. インポート、およびpysandboxでそれを実行しています。やったときに今、私はSandboxError: Read only objectを持っている:

    self.config = SandboxConfig('stdout') 
    self.sandbox = Sandbox(self.config) 
    self.s = imp.get_suffixes() 
    wsgi_obj = imp.load_module("run", open(path+"/run.py", "r"), path, self.s[2]).app 
    … 
    return self.sandbox.call(wsgi_obj, environ, start_response) 
    
  2. 変更Pythonインタプリタ、ZMQ/Unixソケットを介して通信し、並列プロセスで実行し、潜在的に危険なモジュールを、除外する。私はここでどこから始めるべきかも知らない。

お勧めできますか?

+0

プロセスの分離は間違いなく良いアイデアです。仮想化を使う方が良いでしょう。私はpysandboxについて知りませんが、Pythonコードをサンドボックス化する既存のソリューションはあまり良くありません。 –

+1

CPythonでのサンドボックス化はあまり良くありませんが、他のPythonインタプリタ、特にPyPyではより完全なサンドボックス化のサポートがあります。 –

+0

私はPyPyサンドボックスを試みました。それはあまりにも複雑です。 – sashab

答えて

3

アプリケーションごとに別々のプロセスと設定で、ユーザーレベルの権限(別のユーザーの信頼できないアプリケーション)を使用して、アプリケーションをgunicornで実行します。それぞれのgunicornインスタンスは、ユーザ範囲のポート上でlocalhost上で動作し、nginxや別のWebサーバがそれらをWebにルーティングして提供するためにそれらに接続できます。

Herokuはこれをさらに進化させ、仮想マシン内の各gunicornインスタンス(またはユニコーンまたはApacheまたは任意の他のサーバー)をサンドボックス化します。これはおそらく最も安全な可能な方法であり、確かにCPUとメモリの使用を確実に制限するための最良のオプションですが、要件に応じてそれを遠くにする必要はありません。

このようなアプローチの利点の1つは、必要に応じて各アプリケーションを異なるバージョンのPythonで実行できることです。仮想マシンサンドボックスでは、異なるオペレーティングシステムでも実行できます。

編集:VMサンドボックスアプローチを使用せずにメモリ使用を制限するには、this questionを参照してください。 CPU使用量を制限するには、gunicornの設定を調整します。アプリケーションが使用できるコアごとに1つのgevent-styleワーカーをスピンアップします。

もう一度編集:1つの全く異なるアプローチは、PyPy's sandboxing mechanismを使用することです。CPythonとサンドボックスモジュールをはるかに安全にする必要があります。しかし、私はguincornまたはgunicorn +仮想マシンの方が好きです。

+0

ルーティングのソリューションとして何をお勧めしますか?それは速く、非同期でなければならないし、いくつかの追加ロジックのためにnginxは解決策ではありません。竜巻? – sashab

+0

Hmmmm、私は確信していません、私は自分自身のためのフロントとしてnginxを使用してスタックのその部分で多くを実験していない。追加ロジックでカスタムコードを記述する必要がありますか?その場合は、おそらくトルネードが最適でしょう。 Gunicornは何らかの竜巻サポートを持っていますが、あなたが念頭に置いているものとは異なる目的のためだと思います。 –

+0

まあ、私は基本的にアプリケーションにサブドメインをルーティングし、それを動的に行う必要があります(アプリの数は変わる可能性があります)。 – sashab

関連する問題