我目前正在启动一个项目,在安全的沙箱环境中评估不受信任的程序(学生作业)。主要想法是为 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 就简单多了...