代码之家  ›  专栏  ›  技术社区  ›  attwad

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

  •  3
  • attwad  · 技术社区  · 15 年前

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

    服务器最终将是一个基于Linux的服务器,但是如果一个解决方案也可以在Windows上实现,那么最好知道如何实现。

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

    有人能给我一个更好的选择吗?由于只依赖于它会让我感到不安全,所以我想要一个真正的沙盒或者虚拟的FS特性,在这个特性中我可以安全地运行不受信任的代码。

    3 回复  |  直到 14 年前
        1
  •  5
  •   Ignacio Vazquez-Abrams    15 年前

    要么是 chroot jail 或更高级别的安全机制,如 SELinux 可用于限制对特定资源的访问。

        2
  •  3
  •   John La Rooy    15 年前

    您最好使用虚拟机,如virtualbox或vmware(甚至可能为每个用户/会话创建一个虚拟机)。

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

    我所知道的唯一一个内置了类似特性的python是google应用引擎上的一个。这对你来说也是一个可行的选择。

        3
  •  0
  •   rook    15 年前

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

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

    第一层,最重要的一层是 python sandbox . 用户提供的脚本将在python沙盒中执行。这将为您提供所需的细粒度限制。然后,整个python应用程序应该在自己的专用chroot中运行。我强烈建议使用grsecurity内核模块,它可以提高任何chroot的强度。例如,一个grsecurity chroot不能被破坏,除非攻击者能够在内核土地上钻一个洞,这在现在是非常困难的。确保您的内核是最新的。

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