Ich habe einen Kartenleser angeschlossen /dev/sdb
.
Ich erteile dem Eigentümer, der Gruppe und dem Rest der Welt alle Berechtigungen, indem ich Folgendes verwende:
sudo chmod 777 /dev/sdb
Kann ich einfach eine andere Kombination verwenden, sodass nur der Besitzer (ich) den Kartenleser verwenden kann?
Es gibt nur ein Benutzerkonto.
linux
permissions
block-device
Mohamed Ahmed
quelle
quelle
ls -l /dev/sdb
. Ich vermute, dass dies von root gehört, aber es wäre gut, dies sicherzustellen.Antworten:
Es gibt mehrere Möglichkeiten, dies zu erreichen.
1. Fügen Sie Ihren Benutzer der Gruppe hinzu, der das Gerät gehört
In den meisten Distributionen gehören Blockgeräte einer bestimmten Gruppe. Sie müssen lediglich Ihren Benutzer zu dieser Gruppe hinzufügen.
Zum Beispiel auf meinem System:
Daher muss ich meinen Benutzer zur
disk
Gruppe hinzufügen .2. Ändern Sie die Berechtigungen des Geräts
Die Idee ist, eine udev-Regel zu erstellen, um einen Befehl auszuführen, wenn das Gerät erkannt wird.
Zuerst müssen Sie einen Weg finden, um das Gerät zu identifizieren. Sie verwenden
udevadm
dafür. Beispielsweise:Dann eine neue Datei in erstellen
/etc/udev/rules.d
, wie zum Beispiel99-cardreader.rules
:Hier habe ich die Ausgabe des
udevadm info
Befehls verwendet, um einige identifizierende Informationen für das Gerät zu finden. Ich habe denSUBSYSTEM="block"
Eintrag für den allerersten Eintrag verwendet und dann dieATTRS
Werte ab dem 6. Eintrag. Dies findet im Grunde das USB-Gerät mit diesem Produkt und der Seriennummer und dann das Blockgerät, das von diesem USB-Gerät stammt.Der
RUN
Befehl ändert die Berechtigungen auf dem Gerät auf777
. Ich halte dies jedoch nicht für eine sehr gute Lösung, da dies das Gerät für die Welt öffnet. Stattdessen könnte eine bessere Lösung sein:Dadurch erhält der Benutzer
patrick
Lese- / Schreibzugriff auf das Gerät.Hinweis: Beachten Sie, dass Sie beim Schreiben von udev-Regeln nur Parameter vom obersten Gerät und von einem anderen Gerät in der Kette verwenden können. Somit kann ich den
SUBSYSTEM="block"
Parameter und dieATTRS
Parameter verwenden. Aber ich konnte keine Parameter von einem anderen Gerät in der Kette verwenden, oder die Regel würde nicht übereinstimmen.Noch ein Hinweis: (da das System mehr als 6 Zeichen für eine Bearbeitung benötigt und ich keinen Ruf habe, einen Kommentar hinzuzufügen) udev matching muss den Gleichheitsoperator (
==
) verwenden, nicht assign (=
)! Diese Antwort hatte vorherSUBSYSTEM="block"
was nicht funktioniert (invalid SUBSYSTEM operation
).quelle
$name
in der schriftlichen regel sollte ich ersetzen Sie es durchsdb
?