LXC 容器作为沙箱环境

LXC 容器作为沙箱环境

我目前正在启动一个项目,在安全的沙箱环境中评估不受信任的程序(学生作业)。主要想法是为 GlassFish 和围绕 lxc-utils 的 Java 包装器创建一个 Web 应用程序来管理 LXC 容器。它将有一个等待程序的队列,并且 Java 包装器将维护固定数量(池)的 LXC 容器,为每个程序分配一个(未使用的)容器。

每个容器都应使用 SELinux 进行保护,以保护主机系统。

我的问题是:为沙盒环境创建这样的机制是个好主意,还是有更好的解决方案来解决这个问题?它应该轻便且安全,不影响学生的创造力。

答案1

您没有写为什么选择 LXC,因为它不是最安全的虚拟化解决方案。我是 KVM/XEN 和 LXC 的重度用户,我可以说一件事,当涉及到安全性时,我从不使用 Linux 容器(无论 LXC / OpenVZ / VServer)。使用 KVM/XEN 更容易(也更可靠)。

如果是关于性能或硬件要求,那么可以 - 您可以尝试使用 LXC,但您应该遵循一些规则:

  • libvirt 确保在使用 SELinux 时严格限制容器(感谢 LXC_driver) - 不确定是否只是 RHEL/Centos/Fedora 情况(我不太使用 Ubuntu/Debian)https://www.redhat.com/archives/libvir-list/2012-January/msg01006.html- 所以使用 SELinux 是一个好主意(在我看来,在这种情况下它是“必须的”)
  • 设置严格的 cgroup 规则,以便您的来宾不会使您的主机冻结或影响其他容器
  • 我宁愿使用基于 LVM 的容器 - 它总是多一层“安全”
  • 考虑网络解决方案和架构。这些容器必须相互通信吗?

从阅读开始- 它很古老,但仍然 - 那里有很多知识。还有——见面用户命名空间

毕竟,再想一想 - 你真的有那么多时间来玩 LXC 安全吗? KVM 就简单多了...

答案2

对于运行不受信任的程序,Linux 命名空间仍然是最佳解决方案。它比 KVM 更容易设置,并且需要更少的资源。您可以尝试 LXC,但是 LXC 是作为一个更通用的沙箱构建的,用于运行完整的 Linux 发行版映像。我想到了另外两个 Linux 命名空间沙箱:

  • 谷歌浏览器沙盒,目前随 Google Chrome/Chromium 一起分发
  • 火狱,一个为运行 Mozilla Firerfox 和任何其他 GUI 程序而构建的安全沙箱。

相关内容