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

4
我有一个网络服务,用户可以上传Python脚本并在服务器上运行。这些脚本处理位于服务器上的文件,我希望它们只能看到服务器文件系统的某个分层结构(最好是一个临时文件夹,在其中复制要处理的文件和脚本)。
该服务器最终将是基于Linux的,但如果在Windows上也有解决方案,那么知道如何做也是很好的。
我考虑创建一个具有对FS文件夹的受限访问权限的用户,并使用此用户启动Python解释器。
有没有更好的替代方法?仅依赖此方法使我感到不安全,我希望有真正的沙盒或虚拟FS功能,以便在其中安全地运行不受信任的代码。

1
在服务器上运行用户提供的脚本已经在其他几个问题中进行了深入讨论。https://dev59.com/OnNA5IYBdhLWcg3wS70m,https://dev59.com/VXRA5IYBdhLWcg3wzhVY,http://stackoverflow.com/questions/886895/safe-python-environment-in-linux等。 - S.Lott
我真不好意思!非常感谢您 :) 我会查一下的... - attwad
@S.Lott 是的,但他通过再次提问得到了一个更好的答案 ;) - rook
在Linux或Unix中,关于沙盒/监狱进程的更多类似问题:
  • http://unix.stackexchange.com/q/6433/4319
  • https://dev59.com/HW865IYBdhLWcg3wWtOz
  • https://dev59.com/tVLTa4cB1Zd3GeqPbpAO
  • https://dev59.com/o2855IYBdhLWcg3wm1m3
- imz -- Ivan Zakharyaschev
3个回答

5

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


chroot监狱很容易被破解 :( - attwad
SELinux,然而,非常难以破解。它很难使用。 - S.Lott
忽略attwad,Chroot是正确的方法。如果您使用grsecurity chroot,即使您可以在chroot中获得root权限,也无法从监狱中“更改根目录”。 - rook
@The Rook:attwad是原帖作者。如果他的信仰有误,那么你应该纠正他们,而不是驳回他们。 - Ignacio Vazquez-Abrams
@Ignacio 我在我的帖子中详细阐述了这一点。但是你不能仅仅说某个东西不安全,而不亲自利用它。 - rook
@The Rook,谢谢你告诉我关于grsecurity补丁的事情。当我在网上寻找有关chroot的信息时,有很多方法可以绕过它,所以它感觉非常不安全,但是一旦应用了grsecurity补丁,它似乎是一个可行的替代方案,谢谢。 - attwad

3

您最好使用虚拟机,如VirtualBox或VMware(也许每个用户/会话创建一个虚拟机)。这将使您对其他资源(如内存和网络以及磁盘)有一定的控制。

我所知道唯一具有此类功能的Python是Google App Engine上的Python。这也可能是您可以使用的可行替代方案。


还有一个名为pypy的工具提供了沙盒功能,但是它的库和Python版本不符合我的需求。很遗憾。 - attwad

0

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

为了解决这个问题,您需要使用沙箱(sandbox)。为了更好地加强系统安全性,您可以采用分层安全方法。

第一层,也是最重要的一层是Python沙箱。用户提供的脚本将在Python沙箱中执行。这将为您提供所需的细粒度限制。然后,整个Python应用程序应在自己专用的chroot下运行。我强烈推荐使用grsecurity内核模块来提高任何chroot的安全性。例如,grsecuirty chroot无法被破坏,除非攻击者可以撕开到内核空间的缺口,这在现今世界很难做到。确保您的内核是最新的。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接