
学生が C コードをアップロードするためのサーバーをセットアップしたいと考えています。サーバーは C コードをコンパイルし、バイナリを実行して、出力を学生に表示します。
今、セキュリティ上の懸念があります。学生は任意のコードをアップロードできますが、指定された 2 つのファイル (1 つは読み取り用、もう 1 つは書き込み用fopen
) と stdout のみにアクセスできるようにしたいと考えています。インターネットやシステム上の他のファイルにはアクセスさせたくありません。
私が所有するサーバーはコンテナ化された Linux であり、ルート権限がありません。
私は以下の解決策について考えました:
chroot
またはfirejail
。(サーバーのルートがありません。コンテナ化されているため、euid の設定は許可されていません)いくつかの
gcc
オプション、.h
ファイル、または C ライブラリの制限を使用します。(コンパイルについてはあまり知識がありません。理論的には、ヘッダー ファイルやライブラリを使わずに C で何でもできます)strace
またはのようなものを使用してptrace
プロセスを監視し、望まない動作をしようとしている場合はプロセスを終了します。
それは可能ですか?