Qu'est-ce qui détermine les autorisations dans / dev?

11

J'ai un bug où les autorisations /dev/input/event*sont incorrectes, donc lorsque j'utilise Mumble , l'application ne peut pas détecter les pressions sur les touches. Si j'exécute la commande suivante, cela «résout» le problème, mais j'aimerais un correctif permanent.

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

Qu'est-ce qui détermine les autorisations /dev/input/event*et comment les définir définitivement?

popey
la source
6
Notez que si vous donnez à tous la permission de lire, /dev/input/event/*vous autorisez essentiellement tout le monde à flairer votre clavier, par exemple les mots de passe que vous saisissez. Sur un système mono-utilisateur, cela peut ne pas être très important, mais même sur un système mono-utilisateur, nous utilisons généralement les utilisateurs du système comme une couche de sécurité supplémentaire au cas où un composant serait compromis, et en donnant par exemple à l' nobodyutilisateur l'accès à votre clavier. flux d'entrée vous affaiblissez cette protection. Bien que cela puisse "corriger" Mumble, ce n'est pas une solution générale appropriée à votre problème. Il devrait y avoir une meilleure façon.
Robie Basak
3
@popey Pouvez-vous en dire plus sur les raisons pour lesquelles les autorisations sur les nœuds /dev/inputsont incorrectes, et sur la propriété et les autorisations actuellement (peut-être avec la sortie de ls -l)? Le problème est-il que le inputgroupe n'a pas d'autorisations de lecture (ou qu'il n'est pas le propriétaire du groupe)? Sur mon système, les fichiers d'événements sont root:inputpropriétaires et les propriétaires d'utilisateurs et de groupes peuvent les lire. Si vous ne l'avez pas, vous devriez peut-être essayer de le configurer de cette façon plutôt que de laisser tout le monde les lire. Si vous n'avez cela, il peut être suffisant pour Mumble pour fonctionner avec les puissances du groupe. input
Eliah Kagan
@EliahKagan que pensez-vous de ma réponse? pouvez-vous l'examiner?
Sergiy Kolodyazhnyy
oui c'est mauvais. utilisez ACL. voir ma réponse ci
solsTiCe
Pouvez-vous me faire connaître la version de distribution ou la version du serveur xorg? car xorg-server 2: 1.9.99.902-2ubuntu1 a résolu le problème.
Tohid Tamboli

Réponses:

4

Une manière plus flexible de gérer les autorisations sur les fichiers consiste à utiliser ACL .

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

Si vous avez vraiment besoin de le rendre permanent, vous pouvez utiliser des règles udev qui le définissent pour votre périphérique d'entrée d'événement

ajoutez un fichier /etc/udev/rules.d/99-userdev-input.rules avec:

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

vous pouvez vérifier l'autorisation des ACL avec

getfacl /dev/input/event*
solstice
la source
2

Je ne sais pas ce qui définit initialement les autorisations des périphériques de caractères / dev / input / event *

mais, je sais que vous pouvez modifier ces autorisations avec un logiciel qui est sur votre système par défaut dans le cadre de coreutils. voir la commande man mknod.

Les autorisations de mes appareils d'événement sont:

crw-rw ---- 1 entrée racine 13, 64 14 avril 06:39 / dev / input / event0

voici quelques exemples d'utilisation:

~$ 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 vous avez besoin de plus d'informations pour décider des nombres majeurs et mineurs, regardez ici

Maintenant, vous dites que les autorisations sont incorrectes. Donc, quelque chose doit les mettre mal, et cette chose, doit fonctionner en tant que root. mknod pourrait être utilisé pour créer un périphérique, mais mkdev pourrait également. vous voudrez peut-être examiner les autorisations de toutes les actions par défaut pour mkdev et mknod.

Comme dans mes exemples: / dev / input / event0 a les autorisations crw-rw, mais les autorisations par défaut de lolwat ont été définies sur crw-r - r--

J'ai une certaine incertitude, si le type d'appareil dicte les autorisations d'origine.Vous pouvez l'expérimenter pour le savoir.

Voici un autre lien pour plus d'informations sur mknod

j0h
la source
est-ce que mumble fonctionne en tant que root?
j0h
1

Fondamentalement, vous devez ajouter un fichier /etc/udev/rules.d/(vous pouvez le nommer quelque chose comme 75-input-events.conf)

Et ajoutez des lignes KERNEL=="eventX" , SUBSYSTEM=="input", MODE="0777"pour chaque événement dans ce fichier, où x est le nombre. Par exemple, j'ai des événements 0 à 9, donc je le ferais personnellement pour chacun d'eux. La dernière réponse sur ce fil suggère que vous auriez pu ajouter KERNEL==event*(c'est-à-dire avec un caractère générique) aussi.

Sergiy Kolodyazhnyy
la source
0

Ma suggestion est d'installer les utilitaires d'entrée d'application

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

Il s'agit d'une collection d'utilitaires qui sont utiles lorsque vous travaillez avec la couche d'entrée du noyau Linux (version 2.6 et ultérieure). Sont inclus des utilitaires pour répertorier les périphériques d'entrée connus du noyau, afficher les événements d'entrée reçus par un périphérique et interroger ou modifier les mappages de clavier.

La commande d'intérêt est:

sudo -i 
lsinput

Il vide tous les périphériques d'entrée et les détails associés sur le périphérique.

On peut observer les événements d'entrée en utilisant la commande, en spécifiant le Nième numéro de périphérique:

sudo -i
input-events <device number>

On peut ensuite vider le mappage du clavier d'un périphérique d'événement particulier à l'aide de la commande, en spécifiant le Nième numéro de périphérique:

sudo -i
input-kyb <device number>

Avec ces outils, on peut déboguer un système pour voir si les entrées génèrent les codes d'événement attendus et donc aider à trier les problèmes tels que pourquoi les clés ne fonctionnent pas ou sont mappées de manière incorrecte.

Udev est le gestionnaire de périphériques pour le noyau Linux. Il gère les nœuds de périphérique dans / dev et gère toutes les actions de l'espace utilisateur lors de l'ajout ou de la suppression de périphériques.

Evdev est une interface générique d'événement d'entrée dans le noyau Linux qui généralise les événements d'entrée bruts des pilotes de périphérique et les rend disponibles via des périphériques de caractères dans le /dev/input/répertoire.

Chaque fois qu'un changement se produit dans la structure du périphérique, le noyau émet un uevent qui est capté par udev. udev suit ensuite les règles déclarées dans les répertoires /etc/udev/rules.d, /run/udev/rules.d et /lib/udev/rules.d.

Sur la base des informations contenues dans uevent, il trouve la ou les règles dont il a besoin pour se déclencher et effectue les actions requises.

Ces actions peuvent être la création ou la suppression de fichiers de périphérique, mais peuvent également déclencher le chargement de fichiers de firmware particuliers dans la mémoire du noyau.

kyodake
la source
0

Dans une exécution de terminal:

sudo nano -b /etc/rc.local

Descendez jusqu'à la ligne qui dit "exit 0" et dans une ligne au-dessus, tapez:

sudo chmod a + r / dev / input / event

Appuyez sur Ctrl + x pour quitter cela. Il vous demandera si vous souhaitez enregistrer. Appuyez sur y. Il vous demandera quoi enregistrer sous. Appuyez simplement sur Entrée.

Maintenant, cette commande devrait démarrer à chaque démarrage et vous donner ainsi des autorisations sur ce dossier. Le fichier /etc/rc.local dispose automatiquement des privilèges root, vous n'aurez donc pas besoin d'entrer un mot de passe pour ce faire.

Colonel Trogdor
la source