¿Qué determina los permisos en / dev?

11

Tengo un error en el que los permisos /dev/input/event*son incorrectos, por lo que cuando uso Mumble , la aplicación no puede detectar las pulsaciones de teclas. Si ejecuto el siguiente comando, "soluciona" el problema, pero me gustaría una solución permanente.

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

¿Qué determina los permisos /dev/input/event*y cómo los configuro permanentemente?

papa
fuente
66
Tenga en cuenta que si le da permiso a "todos" para leer /dev/input/event/*, esencialmente le está dando a todos acceso para oler su teclado, por ejemplo, las contraseñas que escriba. En un sistema de un solo usuario, esto podría no importar tanto, pero incluso en un sistema de un solo usuario, generalmente usamos a los usuarios del sistema como una capa adicional de seguridad en caso de que algún componente se vea comprometido, y al dar, por ejemplo, el nobodyacceso del usuario a su teclado flujo de entrada está debilitando esta protección. Si bien esto podría "arreglar" Mumble, no es una solución general adecuada para su problema. Debería haber una mejor manera.
Robie Basak
3
@popey ¿Puede decir más acerca de por qué los permisos en los nodos /dev/inputestán mal y cuál es la propiedad y los permisos actualmente (quizás con la salida de ls -l)? ¿El problema es que el inputgrupo no tiene permisos de lectura (o que no es el propietario del grupo)? En mi sistema, los archivos de eventos tienen root:inputpropiedad y tanto los usuarios como los propietarios de los grupos pueden leerlos. Si no tiene esto, tal vez debería intentar configurarlo de esa manera en lugar de dejar que todos los lean. Si hacer tener esto, puede ser suficiente para Mumble para funcionar con las potencias del inputgrupo.
Eliah Kagan
@EliahKagan, ¿qué opinas de mi respuesta? ¿puedes por favor revisarlo?
Sergiy Kolodyazhnyy
si eso es malo usa ACL. mira mi respuesta a continuación
solSTiCe
¿Me puede decir la versión de distribución o la versión del servidor xorg? porque xorg-server 2: 1.9.99.902-2ubuntu1 había resuelto el problema.
Tohid Tamboli

Respuestas:

4

Una forma más flexible de administrar los permisos en los archivos es usar ACL .

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

Si realmente necesita hacer esto permanente, puede usar reglas udev que lo establezcan para su dispositivo de entrada de eventos

agregue un archivo /etc/udev/rules.d/99-userdev-input.rules con:

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

puede verificar el permiso de ACL con

getfacl /dev/input/event*
solsticio
fuente
2

No sé qué establece inicialmente los permisos de los dispositivos de caracteres / dev / input / event *

pero sé que puede cambiar esos permisos con un software que está en su sistema de forma predeterminada como parte de coreutils. consulte el comando man mknod.

Los permisos de mis dispositivos de eventos son:

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

Aquí hay algunos ejemplos 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

si necesita más información sobre cómo decidir sobre números mayores y menores, mire aquí

Ahora, usted dice que los permisos son incorrectos. Entonces, algo debe estar configurando mal, y esa cosa, debe ejecutarse como root. mknod podría usarse para crear un dispositivo, pero mkdev también podría. es posible que desee ver los permisos de cualesquiera que sean las acciones predeterminadas para mkdev y mknod.

Como en mis ejemplos: / dev / input / event0 tiene permisos crw-rw, pero los permisos predeterminados de lolwat se establecieron en crw-r - r--

Tengo cierta incertidumbre sobre si el tipo de dispositivo dicta los permisos originales. Puede experimentar con esto para averiguarlo.

Aquí hay otro enlace para más información sobre mknod

j0h
fuente
¿Mumble se está ejecutando como root?
j0h
1

Básicamente, necesitaría agregar un archivo /etc/udev/rules.d/(podría llamarlo así 75-input-events.conf)

Y agregue líneas KERNEL=="eventX" , SUBSYSTEM=="input", MODE="0777"para cada evento en ese archivo, donde x es el número. Por ejemplo, tengo eventos del 0 al 9, por lo que personalmente lo haría para cada uno de ellos. La última respuesta en este hilo sugiere que también podría haber agregado KERNEL==event*(es decir, con comodín).

Sergiy Kolodyazhnyy
fuente
0

Mi sugerencia es que instales la aplicación input-utils

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

Esta es una colección de utilidades que son útiles cuando se trabaja con la capa de entrada del kernel de Linux (versión 2.6 y posterior). Se incluyen utilidades para enumerar los dispositivos de entrada conocidos por el núcleo, mostrar los eventos de entrada que recibe un dispositivo y consultar o modificar los mapas del teclado.

El comando de interés es:

sudo -i 
lsinput

Descarta todos los dispositivos de entrada y los detalles asociados sobre el dispositivo.

Se pueden observar eventos de entrada usando el comando, especificando el enésimo número de dispositivo:

sudo -i
input-events <device number>

Luego se puede volcar el mapeo del teclado de un dispositivo de evento particular usando el comando, especificando el enésimo número de dispositivo:

sudo -i
input-kyb <device number>

Con estas herramientas, se puede depurar un sistema para ver si las entradas generan los códigos de eventos esperados y, por lo tanto, ayudan a resolver problemas como por qué las claves no funcionan o se asignan incorrectamente.

Udev es el administrador de dispositivos para el kernel de Linux. Administra nodos de dispositivos en / dev y maneja todas las acciones de espacio de usuario al agregar o eliminar dispositivos.

Evdev es una interfaz de eventos de entrada genérica en el kernel de Linux. Generaliza los eventos de entrada sin formato de los controladores de dispositivos y los hace disponibles a través de dispositivos de caracteres en el /dev/input/directorio

Cada vez que ocurre un cambio dentro de la estructura del dispositivo, el núcleo emite un evento que es recogido por udev. Luego, udev sigue las reglas declaradas en los directorios /etc/udev/rules.d, /run/udev/rules.d y /lib/udev/rules.d.

En función de la información contenida en el evento, encuentra la regla o reglas que necesita para desencadenar y realiza las acciones necesarias.

Estas acciones pueden ser crear o eliminar archivos del dispositivo, pero también pueden activar la carga de archivos de firmware particulares en la memoria del kernel.

kyodake
fuente
0

En una ejecución de terminal:

sudo nano -b /etc/rc.local

Vaya a la línea que dice "salir 0" y en una línea arriba escriba:

sudo chmod a + r / dev / input / event

Presiona Ctrl + x para salir de eso. Le preguntará si desea guardar. Dale a y. Te preguntará qué guardar como. Solo presiona Enter.

Ahora, ese comando debería iniciarse en cada arranque y, por lo tanto, otorgarle permisos a esa carpeta. El archivo /etc/rc.local tiene automáticamente privilegios de root, por lo que no necesitará ingresar una contraseña para hacerlo.

Coronel Trogdor
fuente