Forum: PC-Programmierung Linux: Rechtevergabe für USB device


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von montagskind (Gast)


Bewertung
0 lesenswert
nicht 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?

von Andreas E. (hismastersvoice)


Bewertung
1 lesenswert
nicht lesenswert
Google mal nach udev und ubuntu.
Du mußt eine udev Regel erstellen und mit dieser das Gerät einer Gruppe 
zuteilen, z.Bsp. plugdev und selber auch dieser Gruppe natürlich 
angehören.

von Daniel B. (dbuergin)


Bewertung
0 lesenswert
nicht 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

von Kommandozeile vor dem Frühstück für Alle! (Gast)


Bewertung
0 lesenswert
nicht 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...)

von Dr. Google (Gast)


Bewertung
0 lesenswert
nicht lesenswert
MeiUserName ALL=(ALL) NOPASSWD: ALL /usr/bin/meintool

von Kommandozeile vor dem Frühstück für Alle! (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Daniels Kontrolle ( group & ownership von /dev/[xyz] verifizieren) 
ist sinnvoll :-)

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht 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

von montagskind (Gast)


Bewertung
0 lesenswert
nicht 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

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht 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. ;-)

von Felix (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von Sheeva P. (sheevaplug)


Bewertung
0 lesenswert
nicht 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/

von montagskind (Gast)


Bewertung
0 lesenswert
nicht 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)?

von Clemens L. (c_l)


Bewertung
0 lesenswert
nicht 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?

: Bearbeitet durch User
von Felix Adam (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Weil es wohl nicht USERS ist, sondern OWNER. Den Link zu libftd2xx hatte 
ich heute morgen gepostet. Da hättest du ein funktionierendes Beispiel 
gefunden.

von montagskind (Gast)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.