Access-Control-List
如何在 /dev/video* 設備的啟動時強制執行持久 ACL?
我有一個 USB 網路攝像頭
/dev/video0
,我試圖在使用者登錄之前訪問它(準確地說,我有一個 Azure IoT Edge 容器在需要以無頭模式執行的 Ubuntu 18.04 實例上執行,並且該框需要是無需人每次都親自登錄即可重新啟動)。如果我首先物理登錄該框,則 ACL 已正確設置
/dev/video0
,並且我的容器(在 下執行myuser
)可以愉快地訪問/dev/video0
:myuser@myuser-UBUNTU:~$ sudo getfacl /dev/video0 getfacl: Removing leading '/' from absolute path names # file: dev/video0 # owner: root # group: video user::rw- user:myuser:rw- group::rw- mask::rw- other::---
但是,如果我沒有在機器上實際登錄(例如,在重新啟動後立即登錄),我的使用者帳戶 (
myuser
) 永遠不會獲得 ACL 訪問權限/dev/video0
(相反,gdm
使用者會獲得它)。myuser@myuser-UBUNTU:~$ sudo getfacl /dev/video0 getfacl: Removing leading '/' from absolute path names # file: dev/video0 # owner: root # group: video user::rw- user:gdm:rw- group::rw- mask::rw- other::---
我 99% 確定這是 ACL 問題,因為當我 ssh 進入盒子(在物理登錄之前)並手動添加
myuser
到 ACL 列表中時/dev/video0
,我的容器可以再次愉快地訪問/dev/video0
.**我的問題:**如何確保在啟動時
/dev/video0
,安裝時自動發生這種情況:sudo setfacl -m u:myuser:rw /dev/video0
將myuser添加到影片組不起作用(在這方面,Ubuntu 上的 ACL 似乎已損壞):
sudo usermod -a -G video myuser
我已經嘗試了所有我能想到的 RE:組,但沒有任何影響。似乎我真的需要在 Ubuntu 啟動時自動添加
myuser
到 ACL/dev/video0
,但我不確定如何做到這一點。有任何想法嗎?
準確地說,您需要在 Docker 啟動您的容器之前啟動它。
因此,您可以為 Docker systemd 單元添加一個外掛,以便在 Docker 啟動之前執行您希望的任何內容。
例如,我會像這樣創建一個 systemd 外掛:
sudo mkdir -p /etc/systemd/system/docker.service.d sudo tee /etc/systemd/system/docker.service.d/video-permissions.conf <<EOF [Service] ExecStartPre=/usr/bin/setfacl -m u:myuser:rw /dev/video0 EOF
此時,每當 Docker 啟動時,都會預先執行指示的命令。