2016-09-11 7 views
1

私の質問はこのquestionと似ていますが、私は自分の答えを得られませんでした。Linuxのプログラムの許可を変更する

私は裁判官をデザインしようとしています。

オンラインジャッジシステムのユーザーがソースコードを送信すると、 サーバープログラムがコンパイルされ実行されます。したがって、サーバープログラムは サーバーを安全に保つ必要があります。

また、ユーザーがサーバーを変更するために使用できることはたくさんあります。

プログラムの許可を変更するにはどうすればよいですか?コンパイルされたコードは何かを印刷する以外は何もできません!

P.S:疑わしい単語を検索することはお勧めできません。例えば、ユーザはC++で次のコマンドの代わりに、言葉systemを使用することができます。

#define glue(a,b) a ## b 
glue(sys,tem) ("rm *"); //DO NOT RUN THIS CODE 

だから、実際にユーザーが単語system使用せずに、次のコードを使用:

system ("rm *"); //DO NOT RUN THIS CODE 
+2

オンザフライで作成されたVM-esまたはコンテナで実行します。 –

答えて

1

をあなたには、それらを実行することができますchroot刑務所で、ユーザーIDはnobodyに設定されています。 (これにはsuまたはsudoを使用できます)。または、独自のVMでも可能です。出力をファイルにパイプし、裁判官のプログラムから読みます。

2

あなたのための2つのオプションがあります:あなたが現在探しているもの - ユーザーが提供するソースコードを実行するサーバプロセスと呼ばれるコンパイラの作成を試みて、 "悪用"を検出します。そしてそれはハードかもしれません。ユーザーがC++ソースコードを送信できるようにすると、が可能になるのはです。私はその解決策を半分安全にするためには、本当のC++達が必要と思うでしょう。

したがって、オプション2:ユーザーが入力した入力をある種のサンドボックス内で実行する必要があります。例としては次のようになります。

  1. ドッカコンテナ(しかし、確かに:非特権容器と、ユーザーではなく、rootで実行)
  2. 仮想マシン

あなたは何を真剣に考えている場合あなたはおそらく、オプション2にまず焦点を当てるでしょう(それは、それがあなたに多くの利益をもたらします、中コストで)。しかし、あなたは間違いなくオプション1も見てみたいです(それはからたくさんのことを学べるので)。

関連する問題