伪造文件系统/虚拟文件系统

时间:2010-03-16 06:24:40

标签: python security filesystems sandbox

我有一个Web服务,用户可以上传在服务器上运行的python脚本。这些脚本处理服务器上的文件,我希望它们只能看到服务器文件系统的某个层次结构(最好:我复制我想要处理的文件和脚本的临时文件夹)。

服务器最终将是一个基于Linux的服务器,但如果在Windows上也可以使用解决方案,那将很高兴知道如何。

我的目的是创建一个限制访问FS文件夹的用户 - 最终只包含脚本和文件的文件夹 - 并使用该用户启动python解释器。

有人可以给我一个更好的选择吗?因为只依靠这个让我觉得不安全,我想要一个真正的沙盒或虚拟FS功能,我可以安全地运行不受信任的代码。

3 个答案:

答案 0 :(得分:5)

可以使用chroot jail或更高阶的安全机制(例如SELinux)来限制对特定资源的访问。

答案 1 :(得分:3)

您最好使用VirtualBox或VMware等虚拟机(甚至可能每个用户/会话创建一个)。

这将允许您控制其他资源,如内存和网络以及磁盘

我所知道的唯一具有内置功能的python就是Google App Engine上的那个。这对你来说也许是一个可行的选择。

答案 2 :(得分:0)

这本质上是不安全的软件。通过让用户上传脚本,您将引入远程执行代码漏洞。除了修改文件,还有什么需要担心的,还有什么能阻止python脚本访问网络或其他资源?

要解决此问题,您需要使用沙箱。为了更好地强化系统,您可以使用分层安全方法。

第一层,最重要的层是python sandbox。用户提供的脚本将在python沙箱中执行。这将为您提供所需的细粒度限制。然后,整个python应用程序应该在自己的专用chroot中运行。我强烈建议使用grsecurity内核模块来提高任何chroot的强度。例如,除非攻击者可以将一个洞撕成核心土地,这些日子里很难完成,否则不能破坏一个gurscuirty chroot。确保您的内核是最新的。

最终结果是您试图限制攻击者脚本所具有的资源。层是经过验证的安全方法,只要层足够不同,以便同一攻击不会破坏它们。您希望尽可能地将脚本与系统的其余部分隔离开来。共享的任何资源也是攻击者的路径。