No post de hoje ensinarei alguns passos para habilitar permissões definitivas nas portas seriais com UDEV no Linux CentOS 6.8 SAGE versão 27-17 modificado pelo CEPEL.
*** ATUALIZAÇÃO: Rotina compatível com SAGE versão 28 (CentOS 7.4)
No Linux CentOS SAGE, as permissões dos dispositivos seriais COM1, COM2… por padrão são:
sage@srv1:~/sage > ls -l /dev/ttyS*
crw-rw---- 1 root dialout 4, 64 Ago 16 13:33 /dev/ttyS0
crw-rw---- 1 root dialout 4, 65 Ago 16 13:33 /dev/ttyS1
crw-rw---- 1 root dialout 4, 66 Ago 16 13:33 /dev/ttyS2
crw-rw---- 1 root dialout 4, 67 Ago 16 13:33 /dev/ttyS3
Para que o usuário sage possa se comunicar com os outros dispositivos via porta serial (ex.: ABB MicroScada) é necessário mudar as permissões, mas antes de prosseguir com a mudança vamos primeiro entender como o Linux trata as permissões.
Olhando a lista acima, nossa COM1 é o ttyS0, COM2 é o ttyS1 e assim por diante. O dono do dispositivo é o usuárioroote o grupo é odialout. Ainda sobre a lista, vemos que o primeiro caracter"c"
define como um arquivo especial, pois trata-se de um dispositivo serial.
Os tipos disponíveis são:
- – (nenhum) – arquivos regulares;
- d – diretório;
- c – dispositivo de caractere (portas seriais); l – link simbólico;
- p – pipe nomeado; s – soquete;
- b – dispositivo de bloco e
- D – porta, não é comum em sistemas Linux, mas foi portada.
Na sequência temos:rw-rw----
- Os primeiros três (
rw-
) são as permissões do dono (root) – ler (r), gravar (w), mas não executar (x); - Os três do meio (
rw-
) são as permissões do grupo (dialout) – ler (r), gravar (w), mas não executar (x); - Os três últimos (
---
) são as permissões dos demais usuários do linux – não ler(r), não gravar (w), e não executar (x).
Substituindo e somando cada agrupamento: 4 (r): Leitura – 2 (w): Gravação – 1 (x): Execução / listagem,
temos:420 420 000 = 660
.
- 0 : Sem permissão alguma. Acesso negado.
- 1 : Permissão apenas para executar (não é possível ler o arquivo ou alterá-lo, apenasexecutar um programa) ou, no caso de diretórios, permissão apenas para ver a lista dosarquivos dentro da pasta, sem poder abrí-los.
- 4 : Apenas leitura. Se usado em uma pasta, o usuário não conseguirá listar o conteúdo,ou seja, conseguirá abrir os arquivos apenas caso indique o caminho completo.
- 5 (4+1): Ler e executar (no caso de um arquivo) ou ver os arquivos e abri-los, no caso dediretórios.
- 6 (4+2): Leitura e gravação. Assim como no caso do “4”, se usado em diretórios faz comque o usuário não consiga listar o conteúdo, apenas acessar os arquivos diretamente.
- 7 (4+2+1): Controle total.
Para saber quais grupos o usuário participa faça:id -Gn sage
Se ele não fizer parte do grupo dialout suas permissões são totalmente negadas ao uso dos dispositivos ttyS0 ao ttyS3 da lista. O usuário sage faz parte de outros.
Para mudar a permissão dos dispositivos de forma permanente, vamos editar, com usuário root, o arquivo/etc/udev/rules.d/50-udev.rules
usando o seu editor de texto favorito.
# vi /etc/udev/rules.d/50-udev.rules
Agora vamos inserir o seguinte conteúdo no mesmo.
KERNEL=="ttyS*", MODE="0666"
Salvamos o arquivos e reiniciamos o computador.
Após reiniciar e logar vamos listar os dispositivos novamente. O resultado deve ser igual ao abaixo. Isso fará com que outros possam ler e gravar (rw
) nos dispositivos ttyS*.
sage@srv1:~/sage > ls -l /dev/ttyS*
crw-rw-rw- 1 root dialout 4, 64 Ago 16 13:38 /dev/ttyS0
crw-rw-rw- 1 root dialout 4, 65 Ago 16 13:38 /dev/ttyS1
crw-rw-rw- 1 root dialout 4, 66 Ago 16 13:38 /dev/ttyS2
crw-rw-rw- 1 root dialout 4, 67 Ago 16 13:38 /dev/ttyS3