运行(和编译)不受信任的用户代码

时间:2015-06-12 19:06:42

标签: linux security virtual-machine sandbox

我想创建一个包含允许用户提交代码的功能的应用程序,服务器将编译并运行它,类似于Ideone& SPOJ。如何以可扩展的方式安全地执行此操作?

部分解决方案我知道:

IDEA 1 - 第三方服务

Sphere Engine。然而,这需要很多钱!

我不知道我可以在我的服务器上运行任何开源应用程序来实现这一目标,或者更便宜的替代方案。如果我错了,请纠正我。

IDEA 2 - VM

这将是下一个最明智的选择。但是,我不确定如何实现它。例如,假设我创建了一个VM并开始运行用户代码。这将限制对我的系统的损害,但不会限制VM的损坏,其他用户将不得不使用。这是否意味着每次我想编译和运行用户代码时都必须创建一个新的VM(显然不可扩展 - 如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:0)

在没有设置的情况下,我认为像TravisCI这样的服务(编译代码并在您提供的测试用例下运行它)具有基本虚拟机映像,可以启动并处理您的代码。下一个用户会从同一个基本映像启动一个单独的VM,但不会存储您的更改。

因此在VM内部,用户代码可以做任何事情。除了写入控制台的内容之外,其所有效果都将在时间限制结束时删除。