Access-Control-List

如何在 /dev/video* 設備的啟動時強制執行持久 ACL?

  • February 23, 2019

我有一個 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 啟動時,都會預先執行指示的命令。

引用自:https://serverfault.com/questions/955324