
我在 Kubernetes 容器中設定了 Home Assistant。它需要對主機(即運行容器的電腦)上的 /dev/ttyACM0 設備進行寫入存取。如果我在 Docker 語言中使容器具有“特權”,它就會起作用。 Kubernetes 不提供對 Docker 引擎的直接訪問,但 Kubernetes 也可以實現「特權」。
問題在於,使容器具有特權是最後的手段。 Kubernetes 也允許設定 Linux 功能。現在我想知道是否可以僅使用(一組)Linux 功能來授予對 /dev/ttyACM0 的寫入存取權限?
就其價值而言,SYS_RAWIO
+SYS_ADMIN
還不夠。
答案1
FOWNER
應該這樣做。除非您的軟體在發出 ioctl 來配置連結時出現問題(在這種情況下您可能需要SYS_ADMIN
或TTY_CONFIG
),否則問題只是檔案權限之一。
也就是說,FOWNER
是一個非常發出危險的能力。任何具有該功能的東西都可以繞過全部檔案系統權限檢查。
作為替代方案,如果您可以讓該容器在其自己的用戶下運行,請考慮以下操作之一:
- 將該使用者新增至擁有的任何群組
/dev/ttyACM0
。通常這個組會被稱為tty
,serial
, 或console
,儘管它可能會被稱為usb
或hotplug
。這是最簡單的選項,但它只比使用功能安全一點,因為該群組通常擁有所有串行設備的設備節點的所有權,並且還可能擁有所有虛擬終端設備節點。 - 編寫一個 udev 規則來匹配有問題的設備,並向其添加 ACL 以允許容器正在運行的使用者存取它。這是最安全的方法,因為這意味著容器只能存取該特定的設備節點。如果您有多個 USB ACM 設備,請確保匹配各種硬體 ID 的組合,因為 USB 設備枚舉順序不穩定,並且通常每次啟動時都會有所不同。
答案2
甚至添加全部可用的能力沒有幫助。仍然需要特權容器。看https://github.com/kubernetes/kubernetes/issues/60748追蹤此缺陷的 Kubernetes 問題。