Como a ACL é configurada em dispositivos USB?

1

Eu sou novo em acl's, então isso é blackmagic para mim. Mas o que eu tenho é uma câmera com a qual eu quero conversar.

Então, eu tenho uma máquina debian da netbooted:

ulf@term13:~(0)$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 6.0.10 (squeeze)
Release:    6.0.10
Codename:   squeeze

Para essa máquina, eu tenho uma câmera acoplada:

ulf@term13:~(0)$ lsusb | grep Nikon
Bus 001 Device 092: ID 04b0:0428 Nikon Corp. 
ulf@term13:~(0)$ ls -alF /dev/bus/usb/001/092 
crw-rw-r--+ 1 root root 189, 91 25 sep 10.05 /dev/bus/usb/001/092

Observe o + no final da porcentagem de permissões crw-rw-r--+ . Isso indica que há uma ACL no trabalho aqui:

ulf@term13:~(1)$ getfacl /dev/bus/usb/001/092 
getfacl: Removing leading '/' from absolute path names
# file: dev/bus/usb/001/092
# owner: root
# group: root
user::rw-
user:knut:rw-
group::rw-
mask::rw-
other::r--

Aparentemente, o knut do usuário tem permissões adicionais de rw aqui. Mas como ele conseguiu isso?

Eu posso definir as mesmas permissões para o meu usuário com setfacl . Mas qualquer conjunto assim não estará presente depois que a câmera for reconectada. Depois de ligar e desligar a câmera, ela é montada em outro dispositivo:

ulf@term13:~(0)$ lsusb | grep Nikon
Bus 001 Device 093: ID 04b0:0428 Nikon Corp. 

Mas as permissões para o novo dispositivo 093 são as mesmas do antigo 092 (sem nenhuma permissão extra que eu adicionei ao 092).

Existe um udev -rule-file que deve ser o responsável, mas está vazio ???

ulf@term13:~(0)$ ls -alF /etc/udev/rules.d/90-libgphoto2.rules 
-rw-r--r-- 1 root root 0 26 aug  2014 /etc/udev/rules.d/90-libgphoto2.rules

E nenhum dos outros arquivos udev tem alguma coisa relacionada a isso.

Existe algum arquivo onde isso está configurado? Isso é configurado por um sysadmin que não está mais presente aqui, então eu preciso consertar isso sozinho.

    
por UlfR 21.10.2015 / 11:01

1 resposta

2

Apparently the user knut has additional rw permissions here. But how did he get them?

O usuário "knut" está logado no console? Em muitos sistemas Linux recentes, o udev concede acesso ao dispositivo com base em quem está logado atualmente.

(Aqui "console" significa a tela principal + teclado anexado diretamente ao computador - se é modo de texto ou gráfico não tem relevância.)

Versões mais antigas (incluindo Debian 6) possuem regras com TAGS+="udev-acl" e obtêm o status da sessão do ConsoleKit, se presente, pam_console de outra forma. Verifique who , o conteúdo de /var/run/console e talvez ck-list-sessions . Esses mecanismos são relativamente simples - se o usuário estiver logado no "console", eles terão acesso, caso contrário, não.

Distribuições usando systemd recebem as mesmas informações de systemd-logind e usam a tag "uaccess" . Além do console, o logind suporta adicionalmente sistemas "multi-sede", onde vários usuários podem trabalhar em vários monitores de uma só vez, cada um tendo uma porta USB designada.

Se você quiser ignorar isso e conceder acesso a outros usuários, poderá usar as permissões tradicionais de "grupo" para isso - escreva uma regra do udev atribuindo seu dispositivo a GROUP="camera-users" e adicione pessoas a esse grupo.

After toggling the camera on and off ones it actually gets mounted on another device:

ulf@term13:~(0)$ lsusb | grep Nikon
Bus 001 Device 093: ID 04b0:0428 Nikon Corp. 

No Linux (e geralmente Unixes), 'mount' refere-se a anexar um sistema de arquivos a algum diretório ("/ dev / sda2 é montado em / boot" - o sistema de arquivos que / dev / sda2 contém foi tornado acessível em / boot) . Enquanto isso, os números de dispositivos USB são apenas números, atribuídos sequencialmente; isso não constitui 'montar' o dispositivo.

    
por 21.10.2015 / 13:17