Linux: Rechtevergabe für USB device

Gast #5013626
Lesenswert?

Ich habe eine Hardware an meinem Ubuntu/PC per USB (ftdi) angeschlossen. 
Auf der Hardware befindet sich ein Flash-Speicher, welche ich nun durch 
das tool "flashrom" (https://www.flashrom.org/Flashrom) programmieren 
möchte. Das tool "flashrom" greift wiederum über USB auf den ftdi-chip 
zu.

Zu meinem Problem:
===================
1) Starte ich es mit "sudo ./flashrom -argumente"   --> Passwortabfrage, 
dann läuft es

2) Starte ich es als superuser mit "sudo su"   --> Passwortabfrage, dann 
lässt sich das tool auch einfach so ausführen.

Ich brauche jedoch die Möglichkeit das tool ohne Passwortabfrage zu 
starten.

Die Gruppe "dialout" habe ich meinem user bereits hinzugefügt. Auch die 
folgende Zeile im visudo bzw. /etc/sudors (und Neustart) zwingt mich 
noch zur Passworteingabe:
MeiUserName ALL=(ALL) ALL

Hat jemand einen Tipp was ich noch versuchen könnte?
#5013644
Lesenswert?

Und Du bist sicher, dass das Device File (z.B. /dev/ttyUSB0), auf
das ein Tool zugreifen will, auch der Gruppe "dialout" gehört ?
1
ls -l /dev/[xyz]

Lies Dich mal in die Problematik "UDEV Rules" ein. Mit einer UDEV
Rule kannst Du das Device z.B. /dev/ttyUSB0 einer neuen UID/GID zuordnen
und hast somit von dieser UID aus freien Zugriff darauf.

Gruss Daniel
Gast #5013649
Lesenswert?

> Die Gruppe "dialout" habe ich meinem user bereits hinzugefügt.

Hmm... normalerweise fügt man ein User einer Gruppe zu. Wie bist Du 
hierbei genau vorgegangen?

Kontrolle: wie schaut die Ausgabe bei folgenden Befehle aus?
1
$ grep "$USER" /etc/groups && grep "$USER" /etc/passwd



> Hat jemand einen Tipp was ich noch versuchen könnte?

udev rules ?    (eher nicht, denke ich mal...)
#5014172
Lesenswert?

Kommandozeile vor dem Frühstück für Alle! schrieb:
> Kontrolle: wie schaut die Ausgabe bei folgenden Befehle aus?$ grep
> "$USER" /etc/groups && grep "$USER" /etc/passwd

Oder einfach das Kommando "id" benutzen.

montagskind schrieb:
> 2) Starte ich es als superuser mit "sudo su"   --> Passwortabfrage, dann
> lässt sich das tool auch einfach so ausführen.

sudo su ist doppelt gemoppelt. sudo -i würde es auch tun.

> Die Gruppe "dialout" habe ich meinem user bereits hinzugefügt. Auch die
> folgende Zeile im visudo bzw. /etc/sudors (und Neustart) zwingt mich
> noch zur Passworteingabe:
> MeiUserName ALL=(ALL) ALL

Das sollte aber dann das Passwort des Benutzers sein und nicht mehr das 
von root.

> Hat jemand einen Tipp was ich noch versuchen könnte?

Du könntest für das Tool das suid-Bit setzen. (Es muss dafür als Owner 
root haben)
chmod u+s flashrom
Gast #5014745
Lesenswert?

Danke für die vielen Antworten.

Ich hatte eine falsche Angabe in meinen udev-Regeln. Richtig(er) lautet 
sie nun:
1
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", GROUP="users", MODE="0666"

Nun sehen ich auch, dass eigentlich jeder Schreibrechte haben sollte:
1
ll /dev/ttyU*
2
crw-rw-rw- 1 root dialout 188, 0 May 18 15:25 /dev/ttyUSB0
3
crw-rw-rw- 1 root dialout 188, 1 May 18 15:25 /dev/ttyUSB1

Wenn ich nun in visudo die Freigabe auf alles erlaube, lässt sich mein 
tool ohne Passwort ausführen:
1
myuser ALL = NOPASSWD: ALL

Beschränke ich die Freigabe nun auf ausschließlich meine verwendeten 
USB-Schnittstellen, werde ich wieder nach Passwort gefragt.
1
myuser ALL = NOPASSWD: /dev/ttyUSB0, /dev/ttyUSB1, /dev/ttyUSB2, /dev/ttyUSB3


Das heißt doch, dass noch irgend jemand anderes die Rechte benötigt, 
oder? Wie finde ich heraus, wer das ist?
Das tool hat die Rechte ebenfalls:
1
-rwxr-xr-x 1 myuser myuser  887086 Jan 18 15:16 flashrom*



Noch eine Info welchen Gruppen mein user angehört:
1
$ id
2
uid=1000(myuser) gid=1000(myuser) groups=1000(myuser),4(adm),5(tty),20(dialout),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

Mit den Ausgaben des folgenden Befehls konnte ich nicht viel anfangen, 
aber hier, da danach gefragt wurde:
1
$ grep "$USER" /etc/groups && grep "$USER" /etc/passwd
1
adm:x:4:syslog,myuser,jenkins
2
tty:x:5:myuser,gast,jenkins
3
dialout:x:20:myuser,jenkins
4
cdrom:x:24:myuser
5
sudo:x:27:myuser
6
dip:x:30:myuser,jenkins
7
plugdev:x:46:myuser,jenkins
8
lpadmin:x:108:myuser
9
myuser:x:1000:jenkins
10
sambashare:x:124:myuser
11
myuser:x:1000:1000:myuser:/home/myuser:/bin/bash
#5015305
Lesenswert?

montagskind schrieb:
> Beschränke ich die Freigabe nun auf ausschließlich meine verwendeten
> USB-Schnittstellen, werde ich wieder nach Passwort gefragt.
> myuser ALL = NOPASSWD: /dev/ttyUSB0, /dev/ttyUSB1, /dev/ttyUSB2,
> /dev/ttyUSB3

Was du da angeben musst, sind die Programme, die der Benutzer als root 
ausführen darf. /dev/ttyUSB0 ist aber kein Programm. Du müßtest dort 
dein flashrom angeben statt das Device. Was du aber machen kannst, ist 
Kommandozeilenargumente vorgeben, die dem Programm übergeben werden 
müssen.

> Das heißt doch, dass noch irgend jemand anderes die Rechte benötigt,
> oder?

Nein, es heißt, dass deine sudoers fehlerhaft ist. ;-)
#5015333
Lesenswert?

montagskind schrieb:
> Ich habe eine Hardware an meinem Ubuntu/PC per USB (ftdi) angeschlossen.
> Auf der Hardware befindet sich ein Flash-Speicher, welche ich nun durch
> das tool "flashrom" (https://www.flashrom.org/Flashrom) programmieren
> möchte. Das tool "flashrom" greift wiederum über USB auf den ftdi-chip
> zu.
>
> Die Gruppe "dialout" habe ich meinem user bereits hinzugefügt. Auch die
> folgende Zeile im visudo bzw. /etc/sudors (und Neustart) zwingt mich
> noch zur Passworteingabe:
> MeiUserName ALL=(ALL) ALL
>
> Hat jemand einen Tipp was ich noch versuchen könnte?

Ja, lies den feinen Manuel und konfigurier Dein System richtig. Dabei 
gibt es im Prinzip zwei Ansätze: das FTDI-Device hat eine Device-Datei, 
und die wiederum hat einen Besitzer und eine Gruppe. Wenn die Gruppe das 
Recht hat, auf die Datei zu schreiben, reicht es, Deinen Benutzer dieser 
Gruppe hinzu zu fügen und Dich einmal aus- und wieder einzuloggen. Den 
Benutzer und die Gruppe des Geräts kannst Du mit udev bzw. systemd-udevd 
einstellen.

Der andere Ansatz ist, sudo korrekt zu konfigurieren, siehe dazu: man 
sudoers /NOPASSWD -- weiter unten in der Manpage ist auch ein Beispiel. 
Siehe dazu auch [1].

Eine Änderung der sudoers (die man nicht direkt, sondern immer mit 
visudo bearbeitet, das vor dem Speichern einen Syntaxcheck macht) 
erfordert im Übrigen keinen Neustart, sondern wird sofort wirksam. Den 
gewünschten Editor kann man visudo über die Umgebungsvariable EDITOR 
mitteilen.

[1] https://wiki.ubuntuusers.de/sudo/Konfiguration/
Gast #5015466
Lesenswert?

Recht herzlichen Dank für eure Hilfen. Es geht nun.

puhh....  das war jetzt echt ein langer Weg, für so wenig benötigte 
Änderungen. Ich hatte zwar diese Zeile:
[c]SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", 
GROUP="users", MODE="0666"

Richtig ist aber diese:
[c]SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", 
GROUP="dialout", MODE="0666"

Ich bin zwar richtig, richtig froh, dass es nun läuft. Vertehen würde 
ich es aber trotzdem gerne. Wenn ich das device der Gruppe "users" 
zuordne, sollte doch jeder(!) drauf zugreifen können. Warum geht es aber 
erst, wenn ich es nur der Gruppe "dialouts" zuordne (der ich angehöre)?
#5015478
Lesenswert?

Es könnte rein theoretisch sein, dass die alte Zeile aus irgendeinem 
Grund nicht ausgeführt wurde. Oder dass irgendeine Software explizit 
nach der Gruppe "dialout" schaut.

Aber laut der grep-Ausgabe bist du überhaupt nicht Mitglied von "users". 
Wird das mit dem Kommando "id" angezeigt? Gibt es diese Gruppe überhaupt 
in /etc/groups?
Gast #5015556
Lesenswert?

Ja, das mit der Gruppe "users" war wohl ein Fehler von mir. Ich dachte, 
"users" bedeutet in diesem Fall 'jeder user' und nicht eine Grupe, die 
"users" heißt.

Den Link hatte ich mir auch durchgelesen. Danke dafür.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren