如何在启动时强制执行 /dev/video* 设备持久 ACL?

如何在启动时强制执行 /dev/video* 设备持久 ACL?

我有一个 USB 网络摄像头/dev/video0,正在尝试访问用户登录(准确地说,我有一个在 Ubuntu 18.04 实例上运行的 Azure IoT Edge 容器,它需要在无头模式下运行,并且该盒子需要能够进行电源循环,而无需每次都有人物理登录)。

如果我第一的物理登录到盒子上,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

添加我的用户视频团体不起作用(在这方面,Ubuntu 上的 ACL 似乎被破坏了):

sudo usermod -a -G video myuser

我尝试了所有我能想到的关于 RE: 组的变化,但没有任何影响。看来我真的需要myuser在 Ubuntu 启动时自动添加到 ACL /dev/video0,但我不确定如何做到这一点。有什么想法吗?

答案1

非常准确地说,您需要在 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 启动,都会预先运行指示的命令。

相关内容