学生がCコードをアップロードできるサーバーを設定したいです。サーバーはCコードをコンパイルしてバイナリを実行した後、生徒に出力を表示します。
これでセキュリティ上の問題が発生しました。学生は任意のコードをアップロードできますが、指定された2つのファイル(1つの読み取り用、1つの書き込み用fopen
)とstdoutにのみアクセスできることを願っています。私は彼らがインターネットやシステム上の他のファイルにアクセスしたくありません。
私のサーバーはコンテナ化されたLinuxで、ルートはありません。
私は次の解決策を考えました。
chroot
またはfirejail
。 (サーバーのルートはありません。コンテナ化されており、euidの設定は許可されていません。)特定
gcc
のオプション、.h
ファイル、または C ライブラリの制限を使用します。 (私はコンパイルについてほとんど知りません。理論的には、ヘッダファイルやライブラリを使用せずにCで何でもできます。)strace
または、同じものを使用してptrace
プロセスを監視し、私が望ましくない操作を実行したい場合は、プロセスを終了します。
これは可能ですか?