systemd-nspawn обрабатывает разрешения для устройств через контрольные группы . По умолчанию любому контейнеру предоставляются разрешения только для обычных устройств, таких как / 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
c 189: * rwm
означает r ead w rite m odify разрешения для любого символьного устройства с типом (идентификатором) 189 и любым подтипом. Вы можете найти тип и подтип устройства в файле
:
$ file /dev/bus/usb/002/002
Это разрешение будет действовать только во время работы контейнера.
Если вы используете systemd-nspawn @ .service
или хотите сохранить для него разрешения, создайте
/etc/systemd/system/systemd-nspawn@.service.d/override.conf
или
/etc/systemd/system/systemd-nspawn@my_container.service.d/override.conf
(в зависимости от того, хотите ли вы получить доступ к USB с любого systemd- nspawn
контейнер или только из my_container
соответственно) со следующим содержимым:
[Service]
DeviceAllow=char-usb_device rwm
usb_device
- псевдоним. Вы можете найти другие в / proc / devices
.