Permitir que usuário não-root leia / grave / dev arquivos

5

Na minha pasta /dev , gostaria que os seguintes arquivos fossem legíveis e graváveis pelo usuário:

/dev/ttyUSB0
/dev/gpib0

Como faço isso sem usar chgrp ? Eu posso editar /etc/udev/rules.d , mas não sei a sintaxe.

    
por Kit 30.01.2014 / 04:35

2 respostas

9

Como as regras do udev são estruturadas

Para dispositivos que caem no subsistema tty, você pode definir o grupo deles da seguinte maneira:

SUBSYSTEM=="tty", GROUP="dialout"

Observe que, assim como na programação comum, == é um teste para igualdade, enquanto = é uma atribuição. Assim, a declaração acima se traduz em "se SUBSYSTEM=="tty" , em seguida, atribuir GROUP="dialout" . Uma instrução pode ter vários testes, que são juntos, e várias atribuições.

Se você quiser alterar as permissões de execução de leitura e gravação, atribua MODE em vez de GROUP, em que MODE segue a notação octal Unix usual, por exemplo, MODE="0660" concede ao proprietário e ao grupo permissões de leitura e gravação. man udev tem todos os detalhes.

Você pode encontrar muitos exemplos de tais regras em /lib/udev/rules.d/91-permissions.rules

Como adicionar uma regra do udev ao seu sistema

Depois de decidir o que você quer que sua regra seja, basta adicioná-la. Em um sistema derivado do debian, vá para o diretório /etc/udev/rules.d e crie um arquivo. Os arquivos são executados em ordem de classificação. Portanto, para tornar o arquivo de regras o último a ser lido, substituindo os anteriores, tente um nome como 99-instruments.rules . Em seguida, coloque suas regras nesse arquivo, uma por linha. (Se necessário, as linhas podem ser estendidas colocando uma barra invertida no final da linha, assim como no shell).

Portanto, se você quiser alterar o grupo e as permissões em dispositivos tty, seu arquivo /etc/udev/rules.d/99-instruments.rules poderá consistir na única linha:

SUBSYSTEM=="tty", GROUP="dialout", MODE="0660"

Para garantir que o seu novo arquivo tenha as permissões usuais:

sudo chown root:root /etc/udev/rules.d/99-instruments.rules
sudo chmod 0644 /etc/udev/rules.d/99-instruments.rules

Depois de criar seu arquivo, o udevd poderá lê-lo automaticamente. Se não, você pode forçá-lo a reler seus arquivos com:

udevadm control --reload-rules

Mais sobre como o udev classifica os dispositivos

Se você deseja obter um controle mais preciso sobre quais dispositivos respondem a quais regras, saiba mais sobre como o udev vê seus dispositivos analisando / sys /. Neste momento, eu não tenho acesso a uma máquina com um ttyUSB ou um HPIB, então vamos fazer um exemplo de sda de disco. Executar:

udevadm info --attribute-walk --path=/sys/block/sda

Isso fornece muitas informações que parecem:

. . . .
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
. . . .

Essas linhas estão todas no formato adequado para usar como cláusulas if nas regras. Por exemplo, para alterar a propriedade de todos os dispositivos de bloco marcados como não removíveis, usaríamos a regra:

SUBSYSTEM=="block", ATTR{removable}=="0", OWNER=john1024

Com informações de udevadm , é possível desenvolver regras que podem segmentar especificamente os dispositivos de interesse.

    
por 30.01.2014 / 04:52
3

Acho que sugiro tornar a regra um pouco mais restritiva que a de John. Por exemplo, crie um arquivo como /etc/udev/rules.d/99-tty-dialout.rules :

SUBSYSTEM=="tty", KERNEL=="ttyUSB0", GROUP="dialout", MODE="0660"

Você pode usar udevadm para determinar os valores SUBSYSTEM== e KERNEL== dos dispositivos. Por exemplo:

$ udevadm info -a -n /dev/tty0

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/virtual/tty/tty0':
    KERNEL=="tty0"
    SUBSYSTEM=="tty"
    DRIVER==""
    ATTR{active}=="tty1"
    
por 30.01.2014 / 05:14