Was bestimmt die Berechtigungen in / dev?

11

Ich habe einen Fehler, bei dem die Berechtigungen /dev/input/event*falsch sind. Wenn ich also Mumble verwende , kann die Anwendung keine Tastendrücke erkennen. Wenn ich den folgenden Befehl ausführe, wird das Problem "behoben", aber ich möchte eine dauerhafte Lösung.

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

Was bestimmt die Berechtigungen /dev/input/event*und wie setze ich sie dauerhaft?

Papst
quelle
5
Beachten Sie, dass Sie, wenn Sie "allen" die Berechtigung zum Lesen erteilen, im /dev/input/event/*Wesentlichen jedem Zugriff zum Schnüffeln Ihrer Tastatur gewähren, z. B. von Ihnen eingegebene Kennwörter. Auf einem Einzelbenutzersystem ist dies möglicherweise nicht so wichtig, aber selbst auf einem Einzelbenutzersystem verwenden wir Systembenutzer im Allgemeinen als zusätzliche Sicherheitsebene für den Fall, dass eine Komponente kompromittiert wird, und indem wir beispielsweise dem nobodyBenutzer Zugriff auf Ihre Tastatur gewähren Eingabestream Sie schwächen diesen Schutz. Dies könnte Mumble zwar "beheben", ist jedoch keine geeignete allgemeine Lösung für Ihr Problem. Es sollte einen besseren Weg geben.
Robie Basak
2
@popey Können Sie mehr darüber sagen, warum Berechtigungen für Knoten in /dev/inputfalsch sind und wie die Eigentumsrechte und Berechtigungen derzeit sind (möglicherweise mit der Ausgabe von ls -l)? Ist das Problem, dass die inputGruppe keine Leseberechtigungen hat (oder dass sie nicht der Gruppeneigentümer ist)? Auf meinem System sind die Ereignisdateien root:inputEigentum und sowohl der Benutzer als auch die Gruppenbesitzer können daraus lesen. Wenn Sie dies nicht haben, sollten Sie vielleicht versuchen, es so einzurichten, anstatt es von allen lesen zu lassen. Wenn Sie dies haben, kann es für Mumble ausreichen, mit den Kräften der inputGruppe zu rennen .
Eliah Kagan
@EliahKagan was denkst du über meine Antwort? Kannst du es bitte überprüfen?
Sergiy Kolodyazhnyy
ja das ist schlecht Verwenden Sie ACL. siehe meine Antwort unten
solsTiCe
Können Sie mir die Distributionsversion oder die xorg-Server-Version mitteilen? weil xorg-server 2: 1.9.99.902-2ubuntu1 das Problem gelöst hatte.
Tohid Tamboli

Antworten:

4

Eine flexiblere Möglichkeit zum Verwalten von Berechtigungen für Dateien ist die Verwendung von ACL .

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

Wenn Sie dies wirklich dauerhaft machen müssen, können Sie udev-Regeln verwenden, die es für Ihr Ereigniseingabegerät festlegen

Fügen Sie eine Datei /etc/udev/rules.d/99-userdev-input.rules hinzu mit:

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

Sie können die ACLs-Berechtigung mit überprüfen

getfacl /dev/input/event*
Sonnenwende
quelle
2

Ich weiß nicht, was anfänglich die Berechtigungen der Zeichengeräte / dev / input / event * festlegt.

Ich weiß jedoch, dass Sie diese Berechtigungen mit einer Software ändern können, die sich standardmäßig als Teil von coreutils auf Ihrem System befindet. siehe den Befehl man mknod.

Die Berechtigungen meiner Ereignisgeräte sind:

crw-rw ---- 1 root input 13, 64 Apr 14 06:39 / dev / input / event0

Hier sind einige Anwendungsbeispiele:

~$ 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

Wenn Sie weitere Informationen zur Entscheidung für Dur- und Moll-Nummern benötigen, klicken Sie hier

Sie sagen jetzt, die Berechtigungen sind falsch. Also muss etwas sie falsch setzen, und das Ding muss als root laufen. Mit mknod kann ein Gerät erstellt werden, mit mkdev jedoch auch. Möglicherweise möchten Sie die Berechtigungen der Standardaktionen für mkdev und mknod überprüfen.

Wie in meinen Beispielen: / dev / input / event0 hat crw-rw-Berechtigungen, aber die Standardberechtigungen von lolwat wurden auf crw-r - r-- gesetzt

Ich habe einige Unsicherheiten, ob der Gerätetyp die ursprünglichen Berechtigungen vorschreibt. Sie können damit experimentieren, um dies herauszufinden.

Hier ist ein weiterer Link für weitere Informationen über mknod

j0h
quelle
läuft murmeln als root?
j0h
1

Grundsätzlich müssten Sie eine Datei hinzufügen /etc/udev/rules.d/(Sie könnten sie so nennen 75-input-events.conf)

Fügen Sie KERNEL=="eventX" , SUBSYSTEM=="input", MODE="0777"dieser Datei Zeilen für jedes Ereignis hinzu, wobei x die Zahl ist. Zum Beispiel habe ich Ereignisse 0 bis 9, also würde ich persönlich für jedes von ihnen tun. Die letzte Antwort auf diesen Thread legt nahe, dass Sie auch hinzugefügt haben könnten KERNEL==event*(dh mit Platzhalter).

Sergiy Kolodyazhnyy
quelle
0

Mein Vorschlag ist, dass Sie die Anwendungseingabe-Utils installieren

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

Dies ist eine Sammlung von Dienstprogrammen, die nützlich sind, wenn Sie mit der Eingabeebene des Linux-Kernels (Version 2.6 und höher) arbeiten. Enthalten sind Dienstprogramme zum Auflisten der dem Kernel bekannten Eingabegeräte, zum Anzeigen der von einem Gerät empfangenen Eingabeereignisse und zum Abfragen oder Ändern von Tastaturzuordnungen.

Der Befehl von Interesse ist:

sudo -i 
lsinput

Es gibt alle Eingabegeräte und die zugehörigen Details zum Gerät aus.

Mit dem Befehl können Eingabeereignisse beobachtet werden, indem die N-te Gerätenummer angegeben wird:

sudo -i
input-events <device number>

Mit dem Befehl kann dann die Tastaturzuordnung eines bestimmten Ereignisgeräts ausgegeben werden, indem die N-te Gerätenummer angegeben wird:

sudo -i
input-kyb <device number>

Mit diesen Tools kann ein System debuggt werden, um festzustellen, ob Eingaben die erwarteten Ereigniscodes generieren, und um Probleme zu lösen, z. B. warum Schlüssel nicht funktionieren oder falsch zugeordnet sind.

Udev ist der Geräte-Manager für den Linux-Kernel. Es verwaltet Geräteknoten in / dev und verarbeitet alle Benutzerbereichsaktionen beim Hinzufügen oder Entfernen von Geräten.

Evdev ist eine generische Eingabeereignisschnittstelle im Linux-Kernel. Sie verallgemeinert rohe Eingabeereignisse von Gerätetreibern und stellt sie über Zeichengeräte im /dev/input/Verzeichnis zur Verfügung.

Jedes Mal, wenn eine Änderung innerhalb der Gerätestruktur auftritt, gibt der Kernel ein Ereignis aus, das von udev erfasst wird. udev folgt dann den Regeln, die in den Verzeichnissen /etc/udev/rules.d, /run/udev/rules.d und /lib/udev/rules.d deklariert sind.

Basierend auf den im Ereignis enthaltenen Informationen findet es die Regel oder Regeln, die es auslösen muss, und führt die erforderlichen Aktionen aus.

Diese Aktionen können das Erstellen oder Löschen von Gerätedateien sein, aber auch das Laden bestimmter Firmware-Dateien in den Kernelspeicher auslösen.

Kyodake
quelle
0

In einem Terminallauf:

sudo nano -b /etc/rc.local

Gehen Sie zu der Zeile mit der Aufschrift "exit 0" und geben Sie in einer Zeile darüber Folgendes ein:

sudo chmod a + r / dev / input / event

Drücken Sie Strg + x, um das zu beenden. Sie werden gefragt, ob Sie speichern möchten. Hit y. Sie werden gefragt, als was Sie speichern möchten. Drücken Sie einfach die Eingabetaste.

Dieser Befehl sollte nun bei jedem Start gestartet werden und Ihnen somit Berechtigungen für diesen Ordner erteilen. Die Datei /etc/rc.local verfügt automatisch über Root-Rechte, sodass Sie hierfür kein Kennwort eingeben müssen.

Oberst Trogdor
quelle