SELinuxサンドボックスで学生の課題で作成されたプログラムを実行したいと思います(一部の学生が最初に「興味深い」作業を試みたかどうかを非常に注意深く確認することなく、課題のスコアの最初の部分として出力して動作を確認します)。 。
ほとんどのタスクは入力を読み取って出力を生成する必要があります。一部はシステムのファイルを読み取ることもできます。その後、システムが誰でも読めるファイルを読むことができるようにしたいと思います。
sandbox assignment.py
CentOS 7のSElinuxサンドボックスのpolicycoreutils-pythonでサンドボックスが提供されている一部の領域でうまく機能します。これにより、copy.pyはファイルに書き込めず、ネットワークにアクセスできず、他の多くの悪い問題が発生します。しかし、まだ私のファイルを読むことができます。
実際にローカルファイルを読み取ることはできますが、NFS マウントファイルは読み取れません。また、NFSマウントファイルにアクセスできsandbox -t sandbox_min_t
ますが(これは私が望むものです)、テスト中のプログラムがすべてのファイルにアクセスできるという問題が残ります。世界中で読み取り可能なファイルにのみアクセスするか、指定されたユーザーが読み取り可能なファイルにのみアクセスするようにどのように通知できますか?
(他のサンドボックスでより簡単に達成できる場合は、CentOSの他のサンドボックスを使用できます。)
(単にプログラムをテストするために新しいユーザーアカウントを作成したくありません。部分的には、複数の教師/助手がこれを行う必要があるため、したくありません。アカウントが個人用であり、個人アカウントではないことを願っています。スペースが複雑すぎます。)
ベストアンサー1
すでに開いているファイル記述子を読み書きできる比較的単純なサンドボックスは、次のように実装できます。seccomp
。 Pythonプログラムはサンドボックスを初期化し、信頼できないスクリプトを実行します。libseccomp 2.2.0(LWN)のPythonバインディングが追加されました。Pythonでlibseccomp2 APIを使用する方法の一般的な例があります。
SELinuxサンドボックスは、信頼できないアプリケーションを実行できるより一般的なサンドボックスを提供できます。sandbox
このコマンドには、ファイルへのアクセスをブロックするのに十分ないくつかの便利なオプションがあります。このオプションを使用すると、-M
ホームディレクトリと一時ディレクトリがtmpfsマウントに隠され、サンドボックスがデフォルトファイルにアクセスできなくなります。-i
オプションとともに必要なファイルを一時ディレクトリにコピーできます。ファイルが大きくない場合は、最も簡単な方法はファイルをサンドボックスにコピーすることです。理想的には、ユースケースに合わせてカスタムサンドボックスドメインを作成することをお勧めします。
LXCコンテナは別のオプションを提供します。しかし、すべてを設定することは少し多くの作業ですが、結果のコンテナは多くの柔軟性を提供します。コンテナは読み取り専用ファイルシステムを持つことができ、書き込み可能なアプリケーションディレクトリのバインドマウントを使用できます。構成オプションアプリケーションが新しい権限を取得できないようにするために使用できます。