Mad*_*ner 4 usb container systemd-nspawn
我想从容器内部访问特殊的 USB 设备(不是简单的闪存驱动器)。我/dev/bus/usb在容器内绑定,lsusb毫不费力地列出 USB:
$ lsusb
...
Bus 002 Device 002: ID 0a89:0009
...
Run Code Online (Sandbox Code Playgroud)
但我的程序无法与此设备交互。
Mad*_*ner 12
systemd-nspawn通过cgroups处理设备的权限。默认情况下,任何容器被授予的权限只为常见设备喜欢/dev/null,/dev/zero等,并且另外任何设备直接传递到--bind像参数--bind=/dev/vcs。这不适用于 USB,因为它/dev/bus/usb是一个目录。
要授予当前正在运行的容器命名my_container(假设您systemd-nspawn直接从命令行启动它)的权限,请以 root 身份执行:
$ echo 'c 189:* rwm' > \
/sys/fs/cgroup/devices/machine.slice/machine-my_container/devices.allow
Run Code Online (Sandbox Code Playgroud)
c 189:* rwm装置- [R EAD瓦特仪式米odify权限与类型(识别器)的任何字符设备189和任何亚型。您可以使用以下命令查找设备的类型和子类型file:
$ file /dev/bus/usb/002/002
Run Code Online (Sandbox Code Playgroud)
此权限仅在容器运行时持续。
如果您正在使用systemd-nspawn@.service或希望使用它保留权限,请创建
/etc/systemd/system/systemd-nspawn@.service.d/override.conf
Run Code Online (Sandbox Code Playgroud)
或者
/etc/systemd/system/systemd-nspawn@my_container.service.d/override.conf
Run Code Online (Sandbox Code Playgroud)
(取决于您是要从任何systemd-nspawn容器访问 USB还是仅从my_container相应的容器访问 USB )具有以下内容:
[Service]
DeviceAllow=char-usb_device rwm
Run Code Online (Sandbox Code Playgroud)
usb_device是别名。您可以在/proc/devices.
| 归档时间: |
|
| 查看次数: |
4783 次 |
| 最近记录: |