O que determina as permissões no / dev?

11

Eu tenho um erro em que as permissões /dev/input/event*estão incorretas; portanto, quando eu uso o Mumble , o aplicativo não consegue detectar as teclas pressionadas. Se eu executar o seguinte comando, ele "corrige" o problema, mas eu gostaria de uma correção permanente.

sudo chmod a+r /dev/input/event/*

O que determina as permissões /dev/input/event*e como faço para defini-las permanentemente?

popey
fonte
5
Observe que, se você der permissão a "todos" para ler /dev/input/event/*, estará essencialmente dando a todos acesso para cheirar seu teclado, por exemplo, senhas digitadas. Em um sistema de usuário único, isso pode não importar muito, mas mesmo em um sistema de usuário único, geralmente usamos os usuários do sistema como uma camada extra de segurança, caso algum componente seja comprometido, e fornecendo, por exemplo, nobodyacesso do usuário ao teclado fluxo de entrada você está enfraquecendo essa proteção. Embora isso possa "consertar" o Mumble, não é uma solução geral apropriada para o seu problema. Deve haver uma maneira melhor.
precisa saber é o seguinte
2
@popey Você pode dizer mais sobre por que as permissões nos nós /dev/inputestão incorretas e qual é a propriedade e as permissões atualmente (talvez com a saída de ls -l)? O problema é que o inputgrupo não tem permissões de leitura (ou que não é o proprietário do grupo)? No meu sistema, os arquivos de eventos têm root:inputpropriedade e os usuários e os proprietários do grupo podem ler deles. Se você não tiver isso, talvez deva tentar configurá-lo dessa maneira, em vez de deixar que todos os leiam. Se você fazer tem isso, pode ser suficiente para Mumble para correr com os poderes do inputgrupo.
Elias Kagan
@EliahKagan, o que você acha da minha resposta? você pode revisá-lo?
Sergiy Kolodyazhnyy
Sim, isso é ruim. use ACL. Veja minha resposta abaixo
solsTiCe
Você pode me informar a versão Distribution ou a versão xorg-server? porque o xorg-server 2: 1.9.99.902-2ubuntu1 resolveu o problema.
Tohid Tamboli

Respostas:

4

Uma maneira mais flexível de gerenciar a permissão nos arquivos é usar a ACL .

sudo setfacl -m u:popey:rw /dev/input/eventx

Se você realmente precisar tornar isso permanente, poderá usar as regras do udev que o definem para o seu dispositivo de entrada de eventos

adicione um arquivo /etc/udev/rules.d/99-userdev-input.rules com:

KERNEL=="event*", SUBSYSTEM=="input", RUN+="/usr/bin/setfacl -m u:popey:rw $env{DEVNAME}"

você pode verificar a permissão das ACLs com

getfacl /dev/input/event*
solstício
fonte
2

Não sei o que inicialmente define as permissões dos dispositivos de caracteres / dev / input / event *

mas sei que você pode alterar essas permissões com um software que esteja no seu sistema por padrão como parte do coreutils. consulte o comando man mknod.

As permissões dos meus dispositivos de eventos são:

crw-rw ---- 1 entrada raiz 13, 64 abr 14 06:39 / dev / input / event0

Aqui estão alguns exemplos de uso:

~$ sudo mknod lolwat c 4 64 
~$ sudo mknod lolwatnow c 4 64  -m 777
~$ ls -l lolwat*
crw-r--r-- 1 root root 4, 64 Apr 14 08:07 lolwat
crwxrwxrwx 1 root root 4, 64 Apr 14 08:08 lolwatnow

se você precisar de mais informações para decidir sobre números maiores e menores, veja aqui

Agora, você diz que as permissões estão erradas. Então, algo deve estar definindo-os erradamente, e isso deve ser executado como raiz. O mknod pode ser usado para criar um dispositivo, mas o mkdev também. convém consultar as permissões de quaisquer ações padrão para mkdev e mknod.

Como nos meus exemplos: / dev / input / event0 tem permissões crw-rw, mas as permissões padrão de lolwat foram definidas como crw-r - r--

Tenho alguma incerteza, se o tipo de dispositivo determina as permissões originais. Você pode experimentar isso para descobrir.

Aqui está outro link para mais informações sobre mknod

j0h
fonte
mumble está executando como root?
J0h 14/04
1

Basicamente, você precisaria adicionar um arquivo /etc/udev/rules.d/(você poderia nomear algo como 75-input-events.conf)

E adicione linhas KERNEL=="eventX" , SUBSYSTEM=="input", MODE="0777"para cada evento nesse arquivo, onde x é o número. Por exemplo, eu tenho eventos de 0 a 9, então eu pessoalmente faria por cada um deles. A última resposta neste tópico sugere que você poderia ter adicionado KERNEL==event*(ou seja, com curinga) também.

Sergiy Kolodyazhnyy
fonte
0

Minha sugestão é que você instale o aplicativo input-utils

sudo -i
apt-get update
apt-get install input-utils

Esta é uma coleção de utilitários que são úteis ao trabalhar com a camada de entrada do kernel do Linux (versão 2.6 e posterior). Estão incluídos utilitários para listar os dispositivos de entrada conhecidos pelo kernel, mostrar os eventos de entrada recebidos por um dispositivo e consultar ou modificar mapas do teclado.

O comando de interesse é:

sudo -i 
lsinput

Despeja todos os dispositivos de entrada e os detalhes associados sobre o dispositivo.

Pode-se observar eventos de entrada usando o comando, especificando o enésimo número do dispositivo:

sudo -i
input-events <device number>

É possível despejar o mapeamento do teclado de um dispositivo de evento específico usando o comando, especificando o número de dispositivo Nésimo:

sudo -i
input-kyb <device number>

Com essas ferramentas, pode-se depurar um sistema para ver se as entradas geram os códigos de eventos esperados e, portanto, ajudar a resolver problemas, como por que as chaves não funcionam ou são mapeadas incorretamente.

O Udev é o gerenciador de dispositivos do kernel do Linux. Ele gerencia nós de dispositivo em / dev e lida com todas as ações de espaço do usuário ao adicionar ou remover dispositivos.

O Evdev é uma interface genérica de eventos de entrada no kernel do Linux, que generaliza os eventos de entrada brutos dos drivers de dispositivo e os disponibiliza através de dispositivos de caracteres no /dev/input/diretório.

Toda vez que ocorre uma alteração na estrutura do dispositivo, o kernel emite um evento que é captado pelo udev. O udev segue as regras declaradas nos diretórios /etc/udev/rules.d, /run/udev/rules.d e /lib/udev/rules.d.

Com base nas informações contidas no evento, ele encontra a regra ou regras necessárias para acionar e executa as ações necessárias.

Essas ações podem criar ou excluir arquivos de dispositivo, mas também podem acionar o carregamento de arquivos de firmware específicos na memória do kernel.

kyodake
fonte
0

Em uma execução de terminal:

sudo nano -b /etc/rc.local

Desça até a linha que diz "exit 0" e, na linha acima, digite:

sudo chmod a + r / dev / entrada / evento

Pressione Ctrl + x para sair disso. Ele perguntará se você deseja salvar. Aperte y. Ele perguntará o que salvar como. Basta pressionar Enter.

Agora, esse comando deve iniciar a cada inicialização e, assim, conceder permissões para essa pasta. O arquivo /etc/rc.local possui privilégios de root automaticamente, portanto você não precisará digitar uma senha para fazer isso.

Coronel Trogdor
fonte