裝置白名單控制器¶
1. 描述¶
實現一個 cgroup 來跟蹤和強制執行裝置檔案的開啟和 mknod 限制。裝置 cgroup 將裝置訪問白名單與每個 cgroup 相關聯。白名單條目有 4 個欄位。“type”是 a(所有)、c(字元)或 b(塊)。“all”表示它適用於所有型別以及所有主次裝置號。主裝置號和次裝置號可以是整數或 * 表示所有。訪問許可權是 r(讀)、w(寫)和 m(mknod)的組合。
根裝置 cgroup 以對“all”的 rwm 許可權開始。子裝置 cgroup 獲得父級的副本。管理員隨後可以從白名單中刪除裝置或新增新條目。子 cgroup 永遠不能獲得其父級拒絕的裝置訪問許可權。
2. 使用者介面¶
透過 devices.allow 新增條目,透過 devices.deny 刪除條目。例如:
echo 'c 1:3 mr' > /sys/fs/cgroup/1/devices.allow
允許 cgroup 1 讀取並 mknod 通常稱為 /dev/null 的裝置。執行:
echo a > /sys/fs/cgroup/1/devices.deny
將刪除預設的“a *:* rwm”條目。執行:
echo a > /sys/fs/cgroup/1/devices.allow
將“a *:* rwm”條目新增到白名單。
3. 安全性¶
任何任務都可以在 cgroup 之間移動。這顯然不夠,但我們可以決定在人們獲得一些經驗後,如何充分限制移動的最佳方式。我們可能只想要求 CAP_SYS_ADMIN,這至少與 CAP_MKNOD 是一個獨立的位。我們可能只想拒絕移動到不是當前 cgroup 後代的 cgroup。或者我們可能想使用 CAP_MAC_ADMIN,因為我們確實試圖鎖定 root 使用者。
修改白名單或將另一個任務移動到新 cgroup 需要 CAP_SYS_ADMIN。(同樣,我們可能希望更改這一點)。
cgroup 不能被授予比其父 cgroup 更多的許可權。
4. 層次結構¶
裝置 cgroup 透過確保 cgroup 永遠不會擁有比其父級更多的訪問許可權來維護層次結構。每次將條目寫入 cgroup 的 devices.deny 檔案時,其所有子級都將從其白名單中刪除該條目,並且所有本地設定的白名單條目都將重新評估。如果本地設定的白名單條目之一提供的訪問許可權超出了 cgroup 父級的許可權,它將被從白名單中刪除。
示例
A
/ \
B
group behavior exceptions
A allow "b 8:* rwm", "c 116:1 rw"
B deny "c 1:3 rwm", "c 116:2 rwm", "b 3:* rwm"
如果在組 A 中拒絕某個裝置
# echo "c 116:* r" > A/devices.deny
它將向下傳播,並且在重新驗證 B 的條目後,白名單條目“c 116:2 rwm”將被刪除
group whitelist entries denied devices
A all "b 8:* rwm", "c 116:* rw"
B "c 1:3 rwm", "b 3:* rwm" all the rest
如果父級的例外情況發生變化,並且不再允許本地例外,它們將被刪除。
請注意,新的白名單條目將不會傳播
A
/ \
B
group whitelist entries denied devices
A "c 1:3 rwm", "c 1:5 r" all the rest
B "c 1:3 rwm", "c 1:5 r" all the rest
新增 c *:3 rwm 時
# echo "c *:3 rwm" >A/devices.allow
結果
group whitelist entries denied devices
A "c *:3 rwm", "c 1:5 r" all the rest
B "c 1:3 rwm", "c 1:5 r" all the rest
但現在可以向 B 新增新條目
# echo "c 2:3 rwm" >B/devices.allow
# echo "c 50:3 r" >B/devices.allow
甚至
# echo "c *:3 rwm" >B/devices.allow
一旦裝置 cgroup 擁有子級,透過向 devices.allow 或 devices.deny 寫入“a”來允許或拒絕所有操作將不可能。
4.1 層次結構(內部實現)¶
裝置 cgroup 在內部使用行為(允許、拒絕)和異常列表實現。內部狀態使用相同的使用者介面進行控制,以保持與以前的僅白名單實現的相容性。減少裝置訪問許可權的異常的刪除或新增將向下傳播到層次結構中。對於每個傳播的異常,將根據當前父級的訪問規則重新評估有效的規則。