LXC 是眾所周知且經過嚴格測試的低階 Linux 容器運作時。它自 2008 年以來一直在積極開發中,並已在全球關鍵生產環境中證明了自己。它的一些核心貢獻者正是幫助在 Linux 核心中實現各種眾所周知的容器化功能的人。
類型 | 服務 | 地位 |
---|---|---|
持續整合(Linux) | GitHub | |
持續整合(Linux) | 詹金斯 | |
項目狀況 | CII 最佳實踐 | |
模糊測試 | OSS-模糊 | |
模糊測試 | CIFuzz |
LXC 的主要關注點是系統容器。也就是說,容器提供的環境盡可能接近您從虛擬機器獲得的環境,但沒有運行單獨的核心和模擬所有硬體帶來的開銷。
這是透過結合命名空間、強制存取控制和控制群組等核心安全功能來實現的。
非特權容器是在沒有任何特權的情況下運作的容器。這需要容器運行所在的核心中支援使用者命名空間。在使用者命名空間合併到主線核心後,LXC 是第一個支援非特權容器的運行時。
本質上,使用者命名空間隔離給定的 UID 和 GID 集。這是透過在主機上的一系列 UID 和 GID 與容器中不同(非特權)範圍的 UID 和 GID 之間建立映射來實現的。核心將以這樣的方式轉換此映射:在容器內,所有 UID 和 GID 都會按照您對主機的預期顯示,而在主機上,這些 UID 和 GID 實際上是無特權的。例如,在容器內以 UID 和 GID 0 運行的進程可能會在主機上顯示為 UID 和 GID 100000。可以從相應的使用者命名空間手冊頁中收集實作和工作細節。
由於非特權容器是一種安全性增強功能,因此它們自然會受到核心強制執行的一些限制。為了提供功能齊全的非特權容器,LXC 與 3 段 setuid 程式碼互動:
其他一切都以您自己的使用者或您的使用者擁有的 uid 身分運作。
總的來說,LXC 的目標是利用核心中可用的所有安全功能。這意味著 LXC 的配置管理將允許經驗豐富的使用者根據自己的需求進行複雜的調整 LXC。
關於LXC安全性的更詳細介紹可以在以下連結找到
原則上,只要套用正確的配置,LXC 就可以在沒有任何這些工具的情況下運作。然而,這種容器的用途通常相當有限。只是強調兩個最常見的問題:
網路:如果不依賴 setuid 幫助程式為非特權使用者設定適當的網路裝置(請參閱 LXC 的lxc-user-nic
二進位檔案),唯一的選擇是與主機共用網路名稱空間。儘管原則上這應該是安全的,但共享主機的網路命名空間仍然是減少隔離的一步,並且增加了攻擊向量。此外,當主機和容器共享相同的網路命名空間時,核心將拒絕任何 sysfs 掛載。這通常意味著容器內的 init 二進位檔案將無法正確啟動。
使用者命名空間:如上所述,使用者命名空間是一個很大的安全增強功能。但是,如果不依賴特權助手,則主機上無特權的使用者只能將自己的 UID 對應到容器中。然而,標準 POSIX 系統需要 65536 個 UID 和 GID 才能保證完整功能。
LXC 透過一組簡單的按鍵進行配置。例如,
lxc.rootfs.path
lxc.mount.entry
LXC 使用單點命名空間配置鍵。這意味著複雜的配置鍵(例如lxc.net.0
公開了各種子鍵,例如lxc.net.0.type
、 lxc.net.0.link
、 lxc.net.0.ipv6.address
以及其他更精細的子鍵粒度配置。
LXC 用作 Incus 的預設運行時,Incus 是一個容器管理程序,在其之上公開了精心設計且穩定的 REST-api。
LXC 可在 2.6.32 及之後的任何核心上運作。它所需要的只是一個函數式 C 編譯器。 LXC 適用於所有提供必要核心功能的架構。這包括(但不限於):
LXC 也至少支援以下 C 標準函式庫:
LXC始終專注於強大的向後相容性。事實上,從1.0.0
版本開始,API 就沒有被破壞過。主要 LXC 目前版本為4.*.*
。
LXC專案在快速且有效率地處理安全問題方面享有盛譽。如果您認為發現了潛在的安全問題,請透過電子郵件向 security (at) linuxcontainers (dot) org 報告。
欲了解更多詳情,請查看
我們始終歡迎新的貢獻者,並樂意在必要時提供指導。 LXC 遵循內核編碼約定。這意味著我們只要求每次提交都包含一個Signed-off-by
行。我們使用的編碼風格與 Linux 核心使用的編碼風格相同。您可以在以下位置找到詳細介紹:
並且還應該查看此存儲庫中的貢獻文件。
如果您想變得更加活躍,出現在 irc.libera.chat 上的 LXC IRC 頻道 #lxc-dev 通常也是一個好主意。我們嘗試以開放的方式進行所有開發,並在適當的 GitHub 問題或 IRC 上討論新功能或錯誤。
當考慮做出安全關鍵貢獻或重大變更時,通常最好先聯絡開發人員並詢問 PR 是否會被接受。
LXC 及其相關項目嚴格遵守語意版本控制方案。
最新發布版本的源代碼始終可以從以下位置下載
您可以在線瀏覽最新的源代碼並更改歷史記錄
不考慮分發的具體細節,一個簡單的
meson setup -Dprefix=/usr build
meson compile -C build
通常就足夠了。
當您發現需要協助時,LXC 專案為您提供多種選擇。
我們在以下位置設有一個討論論壇:
您可以在哪裡獲得支援。
您可以在 irc.libera.chat 上的 #lxc 中找到我們。
如果您有興趣,可以查看兩個 LXC 郵件清單檔案之一併註冊: