O systemd-nspawn lida com permissões para dispositivos através de cgroups . Por padrão, qualquer contêiner é concedido com permissões apenas para dispositivos comuns como /dev/null
, /dev/zero
, etc e, além disso, para qualquer dispositivo transmitido diretamente para o argumento --bind
, como --bind=/dev/vcs
. Isso não funcionará com USB porque /dev/bus/usb
é um diretório.
Para conceder permissão para o contêiner atualmente em execução chamado my_container
(supostamente você começou com systemd-nspawn
diretamente da linha de comando) execute como root:
$ echo 'c 189:* rwm' > \
/sys/fs/cgroup/devices/machine.slice/machine-my_container/devices.allow
c 189:* rwm
significa r ead w rite m odifica as permissões para qualquer dispositivo de caractere com tipo (identificador) 189 e qualquer subtipo. Você pode encontrar o tipo e o subtipo de dispositivo com file
:
$ file /dev/bus/usb/002/002
Esta permissão durará apenas enquanto o contêiner estiver sendo executado.
Se você estiver usando [email protected]
ou quiser manter permissões com ele, crie
/etc/systemd/system/[email protected]/override.conf
ou
/etc/systemd/system/systemd-nspawn@my_container.service.d/override.conf
(dependendo se você deseja acessar o USB de qualquer contêiner systemd-nspawn
ou somente de my_container
correspondentemente) com o seguinte conteúdo:
[Service]
DeviceAllow=char-usb_device rwm
usb_device
é um alias. Você pode encontrar outras em /proc/devices
.