2016-11-06 2 views
3

私はかなり一般的な状況にあると思います。私は初心者の先生で、生徒にCプログラミング言語の基礎を教える必要があります。彼らの宿題をチェックするのに多くの時間がかかり、私はこのプロセスをどのように自動化できるのだろうかと思っています。私はこの目的のために私の電子メールアドレスを使用することに決めました。基本的には、生徒からの新しいメッセージ、添付ファイルのダウンロード(各生徒はソースコードが保存されている独自のディレクトリがあります)、自分のメールアドレスをチェックしてコンパイルして実行するスクリプトを作成しますいくつかのテストを行い、結果を学生に返送します。問題は、誰かがシステム( "rm -rf ../ ..")のようなコマンドを含むプログラムを私に送ることができるということです。。これらのコマンドを実行しないようにしたいと思います。しかし、学生は自分のディレクトリ内のファイルを修正し、別のディレクトリのテストデータでファイルを読み込むことが許可されるべきです。これを達成するための簡単で安全な方法はありますか?可能であれば、いくつかの例を挙げることができますか?指定されたディレクトリ以外のファイルを読み取り/変更するための実行ファイルを禁止する方法はありますか?

私はこの質問を最初に聞いた人ではないことを知っていますが、私が見つけた答えはすべて私には不明で、数年前に投稿されました。人々は通常chroot jailを使用することをお勧めしますが、この方法はroot権限が必要です。私が理解する限り、刑務所から脱出するのは簡単なので安全ではありません。また、straceについても読んでいますが、すべてのシステムコールをstdinに出力します。 straceでいくつかのシステムコールを許可しないでプログラムを停止することはできますか?

ご理解いただきありがとうございます。

+1

教えていることは分かりませんが、devops/sysadminではないと思います。とにかく、あなたは制限されたユーザーとしてプログラムを実行できますか? – andlrc

+4

基本的なプログラミングだけを教えるのであれば、このことを悪い考えにする2つの問題があります。第一に、割り当てはあまりにも時間がかかり過ぎていると見なすほど大きくすべきではありません。第二に、学生がプログラマを始めているので、コードがテストスイートを通過することを確認するだけでなく、コードを調べるべきです。 – chepner

+0

@chepner、割り当てはそれほど大きくはありませんが、私はたくさんの生徒がいます。アルゴリズムが正しいかどうかを正式に判断し、テストをパスする必要があります。私はまだ彼らのプログラムを見ていきますが、テストシステムがそれほど注意深くなく、重要な部分とエラーだけに焦点を当てるのに役立つことを願っています。また、私は元の問題を解決する方法を見つけ出し、基本的なプログラミングだけでなく、教えることもできます。 – user7122617

答えて

-1

たぶん、あなたはそれがあなたにprorgramでエクスポートされ、システムがエクスポートまたはその他の不正な関数であれば、あなたがプログラムを実行せずにそれを見ることができますすべての機能が表示されます

nm 

を使用してエクスポートされたシンボルのために見ることができます。

+0

今はかなり良くてシンプルに見えますが、私が探すべきシステム以外の呼び出しはわかりません。私はそれについて考えなければならない。システムコールをキャッチする方法が他にない場合は、あなたのアプローチを使用します。ありがとうございました。 – user7122617

0

VM内で生徒のコードを実行する前に、テストVMをセットアップしてミラーリングします。

災害から復旧するには、ミラーを使用してください。

また、毎晩、毎週、自動的に(ミラーから)再初期化されるようにVMをスクリプトすることができます。

0

あなたが使用しているLinuxのフレーバーはよくわかりませんが、fakechrootを見てみましたか?特定のシステムコールを傍受し、ルート以外のユーザがchrootを使用できるようにするshimライブラリを作成することで動作します。それはあなたのために適しているかもしれないように見えます。何らかの理由でそれが適切でない場合は、LXCまたはdockerのようなコンテナシステムの使用を検討することができます。

関連する問題