4

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

该服务器最终将是基于 linux 的服务器,但如果在 Windows 上也可以找到解决方案,那么很高兴知道如何做。

我想到的是创建一个对 FS 文件夹具有受限访问权限的用户 - 最终只有包含脚本和文件的文件夹 - 并使用该用户启动 python 解释器。

有人可以给我一个更好的选择吗?因为仅仅依靠它会让我感到不安全,所以我想要一个真正的沙盒或虚拟 FS 功能,我可以在其中安全地运行不受信任的代码。

4

3 回答 3

5

chroot jail或SELinux等高级安全机制都可用于限制对特定资源的访问。

于 2010-03-16T06:36:40.247 回答
3

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

这将允许您对其他资源(例如内存和网络以及磁盘)进行一些控制

我所知道的唯一内置此类功能的 python 是 Google App Engine 上的那个。这对您来说也可能是一个可行的选择。

于 2010-03-16T06:31:07.317 回答
0

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

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

第一层,也是最重要的一层是python 沙箱。用户提供的脚本将在 python 沙箱中执行。这将为您提供所需的细粒度限制。然后,整个 python 应用程序应该在它自己的专用 chroot 中运行。我强烈推荐使用 grsecurity 内核模块来提高任何 chroot 的强度。例如,一个 grsecuirty chroot 不能被破坏,除非攻击者可以在内核空间中挖出一个洞,而这在当今是很难做到的。确保您的内核是最新的。

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

于 2010-03-16T20:14:57.967 回答