Linux
Linux LXC 與 FreeBSD 監獄
LXC(Linux 容器)和FreeBSD 的監獄在安全性、穩定性和性能方面是否有顯著差異?
乍一看,這兩種方法看起來非常相似。
無論這裡使用的花哨名稱如何,兩者都是針對特定問題的解決方案:比經典 Unix chroot更好的隔離解決方案。作業系統級別的虛擬化、容器、區域,甚至是“帶有類固醇的 chroot”,這些名稱或商業名稱定義了相同的使用者空間分離概念,但具有不同的功能。
Chroot 於 1982 年 3 月 18 日推出,比4.2 BSD發布早幾個月,作為測試其安裝和建構系統的工具,但今天它仍然存在缺陷。由於 chroot 的第一個目標只是提供一個新的root路徑,因此需要隔離或控制的系統的其他方面(網路、程序視圖、I/O 吞吐量)就被暴露了。這是第一個容器(使用者級虛擬化)出現的地方。
兩種技術(FreeBSD Jails 和 LXC)都利用使用者空間隔離來提供另一層安全性。這種劃分將確保一個確定的程序只與同一主機上同一容器中的其他程序通信,如果使用任何網路資源實現“外部世界”通信,都將轉發到該容器分配的介面/通道擁有。
特徵
FreeBSD 監獄:
- 被認為是穩定的技術,因為它是 FreeBSD 4.0 以來的一個特性;
- 它充分利用了 ZFS 文件系統,您可以複製監獄並創建監獄模板以輕鬆部署更多監獄。更多的ZFS 瘋狂;
- 有據可查,並且不斷發展;
- 分層監獄允許您在監獄中創建監獄(我們需要更深入!)。結合
allow.mount.zfs
以實現更多功能,並且其他變數(例如children.max
確實定義了最大兒童監獄)。- rctl(8)將處理jails 的資源限制(記憶體、CPU、磁碟…);
- FreeBSD 監獄處理 Linux使用者空間;
- 網路隔離
vnet
,允許每個監獄擁有自己的網路堆棧、介面、定址和路由表;nullfs
幫助將文件夾連結到位於真實伺服器上的文件夾到監獄內;- ezjail實用程序,用於幫助大規模部署和管理監獄;
- 許多核心可調參數 (
sysctl
)。security.jail.allow.*
參數將限制該監獄的 root 使用者的操作。- 也許,FreeBSD 監獄將在不久的將來擴展一些 VPS 項目功能,例如實時遷移。
- 執行 ZFS 和 Docker集成需要付出一些努力。仍然是實驗性的。
- FreeBSD 12支持監獄內的 bhyve 和監獄內的 pf,從而進一步隔離這些工具
- 過去幾年開發了許多有趣的工具。其中一些已在此部落格文章中編入索引。
- 替代方案: FreeBSD VPS 項目
Linux 容器 (LXC):
- 新的“核心”技術,但得到大公司的認可(特別是 Canonical);
- 從 LXC 1.0 開始的非特權容器,在容器內部的安全性方面邁出了一大步;
- 容器內的 UID 和 GID 映射;
- 核心命名空間,用於分離 IPC、掛載、pid、網路和使用者。這些命名空間可以以分離的方式處理,其中使用不同網路命名空間的程序不一定會在儲存等其他方面被隔離;
- 控制組 (cgroups) 來管理資源並將它們分組。CGManager是實現這一目標的人。
- Apparmor/SELinux 配置文件和核心功能,用於更好地執行容器可訪問的核心功能。Seccomp 也可用於 lxc 容器以過濾系統呼叫。其他安全方面在這裡。
- ~~正在開發實時遷移功能。真的很難說它什麼時候可以投入生產使用,因為 docker/lxc 將不得不處理使用者空間程序暫停、快照、遷移和整合 - ref1、ref2。~~實時遷移正在使用基本容器(沒有設備通過,也沒有復雜的網路服務或特殊的儲存配置)。
- 支持在 python3 和 2、lua、Go、Ruby 和 Haskell 中進行開發的 API 綁定
- 集中的“最新消息”區域。當您需要檢查是否修復了某些錯誤或送出了新功能時,它非常有用。在這裡。
- 一個有趣的替代方案可能是lxd,它在引擎蓋下可以與 lxc 一起使用,但是它具有一些不錯的功能,例如 REST api、OpenStack 集成等。
- 另一個有趣的事情是 Ubuntu 似乎在16.04上將 zfs 作為容器的預設文件系統。為了保持項目一致,lxd 推出了 2.0 版本,其中一些功能與zfs 相關。
- 替代品:OpenVZ、Docker
- 碼頭工人。請注意,Docker 使用命名空間,cgroups 創建“每個應用程序”/“每個軟體”隔離。這裡的主要區別。LXC 創建具有多個程序的容器時,Docker 盡可能將容器簡化為單個程序,然後通過 Docker 對其進行管理。
- 努力將 Docker 與 SELinux 集成並減少容器內的功能以使其更安全 - Docker 和 SELinux,Dan Walsh
- Docker、LXD 和 LXC 有什麼區別
Docker 不再使用 lxc。他們現在有一個名為runc的特定庫,可以直接處理與低級核心命名空間和 cgroups 功能的集成。
這兩種技術都不是安全靈丹妙藥,但兩者都是隔離由於混合作業系統基礎架構而不需要完全虛擬化的環境的好方法。在閱讀大量文件並實施核心可調參數、MAC 和那些 OS 級 virt 提供給您的隔離之後,安全性就會出現。
也可以看看:
- 手工製作的容器
- BSD Now:關於監獄你需要知道的一切
- ezjail - 監獄管理框架
- 容器簡史:從 1970 年代到 2017 年
- Docker 被認為是有害的 - 關於容器技術的安全馬戲團的好文章。