Warum braucht Upstart "setgid", wenn ich "setuid" habe und der Benutzer Mitglied der Gruppe ist?

7

Ich versuche, Upstart so zu konfigurieren, dass ein kleines Dienstprogramm ausgeführt wird, das als systemweiter Daemon auf ein tty zugreifen muss. Wenn das Dienstprogramm über die Befehlszeile ausgeführt wird, bleibt es im Vordergrund und wird erst mit Strg + C beendet. Ich habe daher die expectZeilengruppe weggelassen und Upstart verfolgt die PID korrekt. Ich habe auch ein nicht privilegiertes Konto für den Daemon erstellt adduser --system --no-create-home --disabled-login avrlirc.

Auf meinem System wird das tty, auf das das Dienstprogramm zugreifen muss, wie folgt installiert:

crw-rw----   1 root dialout 166,   0 May 24 19:25 ttyACM0

Also habe ich den Benutzer avrlirc(oben erstellt) zur dialoutGruppe hinzugefügt . Wenn ich das Dienstprogramm ausführe, avrlircfunktioniert alles wie erwartet. Ich habe die Zeilengruppe setuid avrlirczur Upstart-Konfigurationsdatei hinzugefügt , und der Job schlägt mit "tty kann nicht geöffnet werden" fehl.

Wenn ich die Zeilengruppe weglasse setuid, funktioniert sie (also ist es wahrscheinlich eine Berechtigungssache). Wenn ich die setgid dialoutZeilengruppe neben dem hinzufüge setuid, funktioniert es auch.

Warum brauche ich das, setgidwenn ich es bereits habe setuidund der Benutzer Mitglied der entsprechenden Gruppe ist - warum reicht das nicht aus?

Als Referenz lautet die Konfigurationsdatei für den Upstart-Job:

start on runlevel [2345]
stop on runlevel [016]
console log
setuid avrlirc
setgid dialout
exec /usr/local/bin/avrlirc2udp -f -H -h <IP_ADDRESS> -t /dev/ttyACM0

Wo <IP_ADDRESS>ist die IPv4-Adresse der lokalen Box und innerhalb von 192.168.0.0/16.

Calrion
quelle
Der Vollständigkeit halber (obwohl ich nicht erwarte, dass es besonders relevant ist) handelt es sich um avrlirc2udp( Details ), das serielle Eingaben von einem Arduino Uno mit IR-Empfänger akzeptiert und über UDP an LIRC weiterleitet.
Calrion

Antworten:

7

setuidlegt keine zusätzlichen Gruppen fest, sondern nur die primäre Gruppe. Siehe Upstart-Fehler https://bugs.launchpad.net/upstart/+bug/812870 .

Um den Fall zu überprüfen, können Sie grep Gid /proc/YOURPID/statusvs überprüfen id YOURUSER.

Tuminoid
quelle
1
Ahh natürlich. Ich hatte vergessen, dass unter * nix nicht alle Gruppen gleich sind. ;)
Calrion