我目前正在啟動一個項目,在安全的沙箱環境中評估不受信任的程序(學生作業)。主要想法是為 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 就簡單多了...