安全なPythonインタープリターはありますか?
マシン上で実行できるPythonVMを想像してみてください。これにより、操作が制限されます。ファイルを開くことも、システムコールをかけることもできません。テキスト処理と数学などを使用して、stdinをstdoutに変換するだけです。
そのような安全なPythonVMは存在しますか?
安全なPythonインタープリターはありますか?
マシン上で実行できるPythonVMを想像してみてください。これにより、操作が制限されます。ファイルを開くことも、システムコールをかけることもできません。テキスト処理と数学などを使用して、stdinをstdoutに変換するだけです。
そのような安全なPythonVMは存在しますか?
私は、公然と配布されているそのような「安全なインタープリター」を知らないことを知っています (明らかに、Google は App Engine で使用するものを持っていますが、あなたが望むものとは多少異なる制限があります。たとえば、特定のファイルを読み取り専用で開くことができます)。 . ただし、ここなど、いくつかの主張がありますが、確認できません。 PypyのPython in a Sandboxは、 pypy の開発チームの高品質と評判を考えると、おそらく試してみる価値のあるトップ 1 です (根拠のない主張をする可能性は非常に低いです)。
ある意味で実行を制限するために変更された Python は必要ありません。コード (Python およびその他の言語) を貼り付けて実行し、出力を表示できるペーストビンであるcodepad.orgを見てください。コードは非常に制限された環境で実行されますが、それは単なる OS 構成です。(貼り付け例)
許可/禁止された操作を指定できる SecurityManager を使用して、JVM で Jython を実行できます。
特権が制限されている.NETアプリドメイン内でIronPythonを実行できます。
これは間違いなくWindowsで機能し、おそらく/おそらくMonoでも機能します(私は実際には言えませんでした)。
IronPythonインタープリターを埋め込み、スクリプトを渡す小さなプログラムを作成する必要があります。
『 Iron Python in Action』の埋め込みに関する章の最初の例は、そのようなランチャーを作成することを示しています。
それがappdomainsをカバーしているかどうかは思い出せませんが、その情報はWebのどこかにあるはずです。
私は学部生で、最初の年に Python を教えられました。定期的に提出しなければならない「CodeLabs」と呼ばれるものがありました。質問をして、学生に答えをテキスト ボックスに入力してもらい、そのコードをいくつかのテスト ケースで実行して戻り値を確認することで機能します。
ある日、コードラボのウェブサイト (turingscraft.com) にアクセスできなくなりました。これは、誰かが無限 while ループを実行し、その中で os.fork() を呼び出すことにしたためです。
これは明らかに、turingscraft.com の管理者にとって問題でした。しかし、その後、学生に対してそのようなコマンドへのアクセスを制限する方法を見つけました。
もし私があなたなら、彼らのサイトに関する情報を調べるでしょう。たぶん、彼らはこれに関する情報とそれを修正する方法を投稿しました
いつでもソースコードにアクセスして、独自のPythonフレーバーを作成できます。十分な数の人々がそれを必要とするならば、それが稼働する前にそれは時間ではありません。
セキュリティはオペレーティングシステムの仕事ではありませんか?
つまり、ファイルなどへのアクセスが制限されたユーザーを作成します。次に、これらの権限でのみvmを実行します。
または多分私はナンセンスを話している。私はシステム管理者でもセキュリティの専門家でもありませんが、そのために作られたツールを使って何かをする傾向があります。
私は最近これをいじっています。私の要件には Python 3.x が含まれており、Jython や IronPython などのソリューションはすぐに検討対象外になります。私はユーザーモード言語の VM を信頼したことがないので、とにかくその方法を取るのをためらっています。
その場合、私の目的では、これまでの最善の解決策は、インタープリターの手を完全に解放し、強力にロックダウンされたコンテナー (OpenVZ など) で実行することです。ただし、これは問題に大きな打撃を与えており (完全な仮想化の大ハンマーではありませんが)、本当に膨大な数の分離されたインタープリターを実行する必要がある場合は実行できない可能性があります。
ただし、1つの利点は、特定のインタープリターのセキュリティに依存しないため、環境で必要な任意の言語を使用できることです.Pythonや言語のセットに縛られる必要はありません/ JVM または .NET/Mono で利用可能な実装。