歡迎光臨
每天分享高質量文章

什麼是 CGManager? | Linux 中國

CGManager 是一個核心的特權守護行程,透過一個簡單的 D-Bus API 管理你所有的 cgroup。它被設計用來處理巢狀的 LXC 容器以及接受無特權的請求,包括解析使用者名稱稱空間的 UID/GID。
— Canonical Ltd.


致謝
編譯自 | https://linuxcontainers.org/cgmanager/introduction/ 
 作者 | Canonical Ltd.
 譯者 | geekpi ? ? 共計翻譯:663 篇 貢獻時間:1592 天

CGManager 是一個核心的特權守護行程,透過一個簡單的 D-Bus API 管理你所有的 cgroup。它被設計用來處理巢狀的 LXC 容器以及接受無特權的請求,包括解析使用者名稱稱空間的 UID/GID。

元件

cgmanager

這個守護行程在宿主機上執行,將 cgroupfs 掛載到一個獨立的掛載名稱空間(所以它不能從宿主機上看到),系結 /sys/fs/cgroup/cgmanager/sock 用於傳入的 D-Bus 查詢,並通常處理宿主機上直接執行的所有客戶端。

cgmanager 既接受使用 D-Bus + SCM 憑證的身份驗證請求,用於在名稱空間之間轉換 uid、gid 和 pid,也可以使用簡單的 “unauthenticated”(只是初始的 ucred)D-Bus 來查詢來自宿主機級別的查詢。

cgproxy

你可能會在兩種情況下看到這個守護行程執行。在宿主機上,如果你的核心老於 3.8(沒有 pidns 連線支援)或處於容器中(只有 cgproxy 執行)。

cgproxy 本身並不做任何 cgroup 配置更改,而是如其名稱所示,代理請求給主 cgmanager 行程。

這是必要的,所以一個行程可以直接使用 D-Bus(例如使用 dbus-send)與 /sys/fs/cgroup/cgmanager/sock 進行通訊。

之後 cgproxy 將從該查詢中得到 ucred,並對真正的 cgmanager 套接字進行身份驗證的 SCM 查詢,並透過 ucred 結構體傳遞引數,使它們能夠正確地轉換為 cgmanager 可以理解的宿主機名稱空間 。

cgm

一個簡單的命令列工具,與 D-Bus 服務通訊,並允許你從命令列執行所有常見的 cgroup 操作。

通訊協議

如上所述,cgmanager 和 cgproxy 使用 D-Bus。建議外部客戶端(所以不要是 cgproxy)使用標準的 D-Bus API,不要試圖實現 SCM creds 協議,因為它是不必要的,並且容易出錯。

相反,只要簡單假設與 /sys/fs/cgroup/cgmanager/sock 的通訊總是正確的。

cgmanager API 僅在獨立的 D-Bus 套接字上可用,cgmanager 本身不連線到系統匯流排,所以 cgmanager/cgproxy 不要求有執行中的 dbus 守護行程。

你可以在這裡[1]閱讀更多關於 D-Bus API。

許可證

CGManager 是免費軟體,大部分程式碼是根據 GNU LGPLv2.1+ 許可條款釋出的,一些二進位制檔案是在 GNU GPLv2 許可下釋出的。

該專案的預設許可證是 GNU LGPLv2.1+

支援

CGManager 的穩定版本支援依賴於 Linux 發行版以及它們自己承諾推出穩定修複和安全更新。

你可以從 Canonical Ltd[2] 獲得對 Ubuntu LTS 版本的 CGManager 的商業支援。


via: https://linuxcontainers.org/cgmanager/introduction/

作者:Canonical Ltd.[2] 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂