使用Docker在Django App中编译和运行不受信任的代码

我正在构build一个Django Web应用程序来编译和运行用户提交的不同语言的不受信任的代码。 编译后面的步骤是:

  1. 从运行操作提供的编辑器获取代码
  2. 以文件名存储在数据库中
  3. 运行它使用bash脚本。

由于安全问题,在terminal直接运行代码问题,我曾经想过使用Docker作为解决scheme。 我已经创build了一个docker文件,如下所示:

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 

我希望为用户运行的每个代码构build容器,并在使用后销毁它们。 但是,如何为每个用户创build容器,并在使用后放置容器?

根据Docker论坛中的这个post,在Docker中运行不可信代码的stackoverflow可以添加一些安全性,但是因为它使用了操作系统的内核,所以不安全。 正如这篇文章中的stackexchangebuild议,如果你想安全考虑虚拟机。

现在回答你的问题:

你可以用一个像“COPY source / source”这样的行来生成一个dockerfile,将这些文件复制到你的容器中(而不是像在论坛post中说的那样安装一个不那么安全的卷),拷贝一个bash脚本来编译和运行代码,然后在“CMD [”sh,script“]”内执行该脚本。

既然你不知道什么types的代码正在运行,你还应该使用诸如–memory-reservation这样的标志来限制容器获得的资源,以确保它不会占用你系统的所有资源。 你可以在这里find如何设置资源和内核资源约束条件以及其他可能有用的标志(比如-rm在最后删除数据)。

Interesting Posts