2017-03-26 17 views
1

Django Webアプリケーションを構築して、信頼できないコードをユーザーが提出したさまざまな言語でコンパイルして実行します。コンパイル背後 手順は次のとおりです。Django AppでDockerを使用して信頼できないコードをコンパイルして実行する

  1. は、bashスクリプトを使用して
  2. 実行ファイル名を指定して、データベース内に実行されたアクション
  3. 店に提供エディタからコードを取ります。

直接、端末内のコードを実行しているのセキュリティの問題がありますので、私は解決策としてドッカーを使用することを考えました。下図のように私は、ドッキングウィンドウのファイルを作成しました:

FROM chug/ubuntu14.04x64 

# Update the repository sources list 

RUN echo "deb http://archive.ubuntu.com/ubuntu trusty main universe" > /etc/apt/sources.list 
RUN apt-get update 
#RUN apt-get upgrade 
#Install all the languages/compilers we are supporting. 
RUN apt-get install -y gcc 
RUN apt-get install -y g++ 
RUN apt-get install -y python 

私は、ユーザーが実行する各コードのコンテナを構築し、使用後にそれらを破壊するために期待しています。しかし、どのように私はそれぞれのユーザーが実行するごとにコンテナを作成し、使用後にコンテナをドロップするのですか?

答えて

0

ドッカーフォーラムのthisポストと、stackoverflowのthis oneポストによると、信頼できないコードをdockerで実行するとセキュリティが強化されますが、オペレーティングシステムのカーネルが使用されるため安全ではありません。 stackexchangeのthisというポストは、セキュリティで仮想マシンを検討したいと考えていることを示唆しています。今

方法のあなたの質問に答えるために:あなたはあなたのコンテナにファイルをコピーするために「COPYソース/ソース」のような行でdockerfileを生成することができ

を(代わりのように安全性の低いボリュームをマウントフォーラムのポストで説明されている)は、コードをコンパイルして実行し、そのスクリプトを "CMD [" sh、script "]"の中で実行するbashスクリプトをコピーします。

実行中のコードの種類がわからないので、--memory-reservationのようなフラグでコンテナが取得するリソースを制限して、システムのすべてのリソースを消費しないようにする必要があります。リソースとカーネル制約に関するruntine contrainsの設定方法は、リソースhereと他の有用なフラグ(末尾のデータを削除する--rmなど)と一緒に設定する方法があります。

関連する問題