1

オンライン審査プロジェクトのコードを実行したいと考えています。

libsandboxの Python ラッパーのドキュメントが見つかりませんでした 。sample2.py といくつかのテスト ケースを見つけましたが、説明はありませんでした。

サンドボックスを作成するときのデフォルトは何ですか? デフォルトで安全ですか?

信頼できないコードを実行したい - CPU を制限する - メモリを制限する - 実行時間を制限する - 特定のフォルダーへの読み取り/書き込みアクセスのみを許可し、このフォルダーのサイズを制限する。- ネットワーク IO をブロックします。- 他のプログラムの実行をブロックします。

このコードは、私が見つけた 2 つの例を組み合わせたものです。

cookbook = {
'args': args[1:],               # targeted program
'stdin': sys.stdin,             # input to targeted program
'stdout': sys.stdout,           # output from targeted program
'stderr': sys.stderr,           # error from targeted program
    'jail': './foo',
    'owner': 'nobody',
'quota': dict(wallclock = 30000,# 30 sec
              cpu = 2000,       #  2 sec
              memory = 8388608, #  8 MB
              disk = 1048576)}  #  1 MB
# create a sandbox instance and execute till end
s = Sandbox(**cookbook)
s.run()
s.result == S_RESULT_OK

クォータ内のディスクは何を制限しますか? この実行でスクリプトが書き込むことができる合計バイト数またはフォルダーのサイズを制限しますか? 所有者を nobody に設定するとどうなりますか? 私の例のコードは、任意のコードの実行をブロックし、ネットワーク IO をブロックし、jailed フォルダー外のファイルへのアクセスをブロックしますか?

ありがとう

4

1 に答える 1

4

サンドボックスを作成するときのデフォルトは何ですか? デフォルトで安全ですか?

  • インスタンスはデフォルトでSandbox許可されています。指定しない限り、無制限のクォータが付与されますquota。カスタム ポリシーでシステム コール イベントをフィルタリングしない限り、マルチプロセッシング (つまり、、、...) およびプロセス間通信 (つまり、、、...) につながるものを除くすべてのシステム コールが許可さfork()れます。vfork()clone()waitid()ptrace()
  • sample2.pyで配布されているサンプル コード ( )libsandboxは、制限付きのホワイト リスト サンドボックスの最小限の実例です。これをウォッチドッグ プログラムのフレームワークとして使用します。

クォータ内のディスクは何を制限しますか? この実行でスクリプトが書き込むことができる合計バイト数またはフォルダーのサイズを制限しますか?

  • diskquota は、ターゲットプログラムがすべての適格なファイルシステム (つまり、クォータ制限をサポートし、SIGXFSZシグナルを生成できるもの) に書き込むことができる合計バイト数を制限します。
  • プログラムが通常のファイルext3またはext4ファイル システムに書き込む場合、通常はそれが重要です。ただし、標準出力ストリームへの書き込みまたは/dev/nullクォータにはカウントされません。それでも、カスタム ポリシー内にフォルダ ベースのクォータを実装できます。

設定は何ownerをするのnobodyですか?

  • user に代わって対象プログラムを実行しますnobody。引数はowner、OS レベルのサービスをラップしますsetuid()setuid()toの後nobody、対象のプログラムには、OS が usernobodyに付与したすべてのアクセス許可が付与され、それ以上のアクセス許可は付与されません。
  • owner自分以外を指定できるようにするには、スーパー ユーザーである必要があることに注意してください。

私の例のコードは、任意のコードの実行をブロックし、ネットワーク IO をブロックし、jailed フォルダー外のファイルへのアクセスをブロックしますか?

  • ではない正確に。プログラムによって行われたすべてのシステム コールはサンドボックスに報告されますが、ネットワーク IO に関連するシステム コールを明示的にブロックするポリシー モジュールをプラグインする必要があります。または、サンプル コードで行ったように、ホワイト リストに対してすべてのシステム コールをフィルタリングできますsample2.py
  • jailまた、ルート ディレクトリ以外を指定できるようにするには、スーパー ユーザーである必要があることに注意してください/

免責事項: 私は の作成者ですlibsandbox

于 2013-02-28T18:37:32.553 に答える