Linux 在我的服务器上运行其他人代码(沙箱)的安全方法?

Linux 在我的服务器上运行其他人代码(沙箱)的安全方法?,linux,security,virtualization,sandbox,Linux,Security,Virtualization,Sandbox,我想创建一个在本地运行其他人代码的web服务。当然,我想限制他们的代码访问某个“沙盒”目录,这样他们就无法连接到我服务器的其他部分(DB、主Web服务器等) 最好的方法是什么 运行VMware/Virtualbox: +我想这是最安全的了。即使有人设法“入侵”,他们也只会入侵来宾计算机 +可以限制进程使用的CPU和内存 +易于设置-只需创建虚拟机 -很难将沙盒目录从主机“连接”到来宾 -浪费额外的内存和CPU来管理虚拟机 运行弱势用户: +不会浪费额外的资源 +沙盒目录只是一个

我想创建一个在本地运行其他人代码的web服务。当然,我想限制他们的代码访问某个“沙盒”目录,这样他们就无法连接到我服务器的其他部分(DB、主Web服务器等)

最好的方法是什么

运行VMware/Virtualbox:

  • +我想这是最安全的了。即使有人设法“入侵”,他们也只会入侵来宾计算机

  • +可以限制进程使用的CPU和内存

  • +易于设置-只需创建虚拟机

  • -很难将沙盒目录从主机“连接”到来宾

  • -浪费额外的内存和CPU来管理虚拟机

运行弱势用户:

  • +不会浪费额外的资源

  • +沙盒目录只是一个普通目录

  • ??不能限制CPU和内存

  • ??我不知道它是否足够安全

还有其他方法吗?


运行Fedora Core 8的服务器、用Java&C++编写的“其他”代码查看
ulimit
和朋友,了解限制弱势用户操作机器的方法

  • 在非特权用户下运行仍然允许本地攻击者
  • 允许在VM中执行代码也可能是不安全的;如最近所示,攻击者可以访问主机系统
  • 在我看来,从安全角度来看,首先允许在系统上运行本机代码不是一个好主意。也许你应该重新考虑允许他们运行本机代码,这肯定会降低风险。

    ,//等,通常比作为非特权用户运行更安全,但比完整的操作系统虚拟化更轻

    也可以,对于java,您可以信任JVM的内置沙箱,并且编译C++,要求能够沙盒x86代码。


    但正如Checkers的回答所述,过去几乎任何“沙箱”都有可能造成恶意破坏,我预计未来还会不断发现(并有望修复)更多漏洞。你真的想运行不受信任的代码吗?

    阅读codepad.org/about页面可能会给你一些很酷的想法


    要限制CPU和内存,您需要为进程组设置限制(POSIX资源限制仅适用于单个进程)。您可以使用cgroup来实现这一点

    例如,要限制内存,请从装载内存cgroups文件系统开始:

    #挂载cgroup-t cgroup-o内存/cgroup/memory

    然后,为每个组创建一个新的子目录,例如

    # mkdir /cgroups/memory/my-users
    
    将要约束的进程(此处为PID为“1234”的进程)放入此组:

    # cd /cgroups/memory/my-users
    # echo 1234 >> tasks
    
    设置组的总内存限制:

    #echo 1000000>内存。限制字节数

    如果组中的进程分叉子进程,则它们也将位于组中

    上述组设置驻留内存限制(即受约束的进程将开始交换,而不是使用更多内存)。其他cgroup允许您约束其他内容,例如CPU时间


    您可以将您的服务器进程放入组中(这样整个系统及其所有用户都会受到限制),或者让服务器将每个新会话放入一个新组中。

    不确定您希望在这方面投入多少精力,但您可以像VPS web主机那样运行Xen吗


    这将允许在不损害其他用户或基本系统的情况下,对其服务器的一小部分进行完全根访问。

    尝试学习一些有关设置SELinux策略的知识。如果您运行的是一个Red Hat box,那么您可以使用它,因为他们会将其打包到默认发行版中

    如果您知道代码不应该访问的内容,这将非常有用。或者你可以做相反的事情,只允许访问某些东西


    但是,这些策略很复杂,可能需要比您希望的投入更多的时间。

    使用-最简单的方法。

    尝试使用lxc作为apache服务器的容器。。当然,从安全的角度来看,这不是一个好主意,但我需要这样做,所以我必须妥协。我知道,如果我让别人运行代码(任何地方都不存在100%安全性),就不会有100%的安全性。这不是一个银行网站,人们有很大的动机去“黑客”……,我只是想尽可能多地获得“成本效益”。使用某种形式的沙箱,但是考虑不允许运行本地代码。这可能吗?我们可以将此论点扩展到“web服务器中存在漏洞,因此您不应该运行网站。”事实上,“web浏览器中存在漏洞,因此您不应该浏览互联网!”@BlueRaja,这并不是说您根本不能允许用户运行代码(例如,Google App Engine允许您运行Java字节码),但本机代码没有将本地根漏洞转化为远程根漏洞的不良记录。2014年,利用漏洞提升权限是否仍然相关?Ideone API将请求数量限制为每月1000个。这就是我想创建自己的在线法官的原因之一。@sinershank如果你需要在线法官服务,那么有很多现成的服务。例如,您可以在自己的服务器上安装。您还可以使用允许设置可自定义竞赛的引擎(并使用与ideone相同的引擎)。顺便说一句:Ideone允许在收费选项中提交更多内容。更多关于主题的信息,请访问:这是否回答了您的问题?