私はかなり一般的な状況にあると思います。私は初心者の先生で、生徒にCプログラミング言語の基礎を教える必要があります。彼らの宿題をチェックするのに多くの時間がかかり、私はこのプロセスをどのように自動化できるのだろうかと思っています。私はこの目的のために私の電子メールアドレスを使用することに決めました。基本的には、生徒からの新しいメッセージ、添付ファイルのダウンロード(各生徒はソースコードが保存されている独自のディレクトリがあります)、自分のメールアドレスをチェックしてコンパイルして実行するスクリプトを作成しますいくつかのテストを行い、結果を学生に返送します。問題は、誰かがシステム( "rm -rf ../ ..")のようなコマンドを含むプログラムを私に送ることができるということです。。これらのコマンドを実行しないようにしたいと思います。しかし、学生は自分のディレクトリ内のファイルを修正し、別のディレクトリのテストデータでファイルを読み込むことが許可されるべきです。これを達成するための簡単で安全な方法はありますか?可能であれば、いくつかの例を挙げることができますか?指定されたディレクトリ以外のファイルを読み取り/変更するための実行ファイルを禁止する方法はありますか?
私はこの質問を最初に聞いた人ではないことを知っていますが、私が見つけた答えはすべて私には不明で、数年前に投稿されました。人々は通常chroot jailを使用することをお勧めしますが、この方法はroot権限が必要です。私が理解する限り、刑務所から脱出するのは簡単なので安全ではありません。また、straceについても読んでいますが、すべてのシステムコールをstdinに出力します。 straceでいくつかのシステムコールを許可しないでプログラムを停止することはできますか?
ご理解いただきありがとうございます。
教えていることは分かりませんが、devops/sysadminではないと思います。とにかく、あなたは制限されたユーザーとしてプログラムを実行できますか? – andlrc
基本的なプログラミングだけを教えるのであれば、このことを悪い考えにする2つの問題があります。第一に、割り当てはあまりにも時間がかかり過ぎていると見なすほど大きくすべきではありません。第二に、学生がプログラマを始めているので、コードがテストスイートを通過することを確認するだけでなく、コードを調べるべきです。 – chepner
@chepner、割り当てはそれほど大きくはありませんが、私はたくさんの生徒がいます。アルゴリズムが正しいかどうかを正式に判断し、テストをパスする必要があります。私はまだ彼らのプログラムを見ていきますが、テストシステムがそれほど注意深くなく、重要な部分とエラーだけに焦点を当てるのに役立つことを願っています。また、私は元の問題を解決する方法を見つけ出し、基本的なプログラミングだけでなく、教えることもできます。 – user7122617