Linux中的沙盒技术

2024-05-14 21:31:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个Web应用程序,允许用户上传一些C代码,并查看其执行结果(代码将在服务器上编译)。用户是不可信的,这显然会带来一些巨大的安全隐患。

所以我需要为应用程序创建某种沙盒。在最基本的级别上,我希望将对文件系统的访问限制在一些指定的目录中。我不能直接使用chroot jails,因为web应用程序不是作为特权用户运行的。我想建立监狱的suid可执行文件是一个选择。

上传的程序很小,所以应该执行得很快(最多几秒钟)。因此,我可以在预设超时后终止进程,但如何确保它不会生成新进程?或者如果我不能,杀死整个pgid是一个可靠的方法吗?

除了“一点都不做”之外,什么是最好的解决办法?:)我还漏掉了哪些突出的安全问题?

FWIW,这个web应用程序将用Python编写。


Tags: 代码用户服务器目录沙盒web应用程序进程
3条回答

与其他建议一起,你可能会发现这很有用。

http://www.eelis.net/geordi/

这是来自http://codepad.org/aboutcodepad.org的关于页面。

您提供的少数细节意味着您可以对服务器本身进行管理控制,因此我的建议是这样假设的。

我把它当作批处理系统来处理。web服务器接受源文件的上载,进程轮询提交目录,处理该文件,然后将结果提交到web应用程序轮询的另一个目录,直到找到并显示结果为止。

有趣的部分是如何安全地处理执行。

我选择的操作系统是FreeBSD,所以我设置了一个预配置的jail(不要与普通的chroot jail混淆),它可以编译、运行和保存输出。然后,对于每个提交的源文件,为每次执行启动一个原始的监狱副本,其中包含一个源文件副本。

如果监狱的/dev被削减到几乎什么都没有,系统资源限制被安全设置,并且流量无法路由出监狱(绑定到无法破解的地址或只是防火墙),我个人会很乐意在我负责的服务器上运行这个。

既然您使用Linux,我将研究用户模式Linux或Linux VServer,它们在概念上与FreeBSD监狱非常相似(我自己从未使用过它们,但已经阅读过它们)。还有其他一些这样的系统列出了here

这种方法比普通的chroot监狱安全得多,而且比使用完全虚拟化(如qemu/kvm或VMware)轻得多。

我不是程序员,所以我不知道你可以用什么样的AJAX-y来调查结果,但我相信这是可以做到的。作为一名管理人员,我会发现这是一个有趣的项目参与。玩得高兴。:)

我认为这在很多方面都是非常危险的。你实际上是在向你的系统上发现的任何漏洞敞开大门(而你通常只限于那些人们可以远程利用的漏洞)。如果你能避免的话,我会说不要这样做。

如果您确实想这样做,您可能需要使用某种虚拟机来运行用户代码。使用类似KVM的方法,可以使用相同的基本映像设置多个虚拟机(您甚至可以将快照存储在已启动的状态,但我不确定它将如何处理克隆)。然后可以按需创建VM,运行用户代码,返回结果,然后终止VM。如果您将vm彼此和网络隔离开来,那么用户可以对它们造成任何他们想要的破坏,并且不会损害物理服务器。在这种情况下,你暴露在自己面前的唯一危险是某种可以让他们逃离虚拟机的漏洞。。。这是非常罕见的,而且随着硬件虚拟化的改进,这种情况将更加罕见。

相关问题 更多 >

    热门问题