Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
setgid/setuid: Daemon existiert mit zwei PIDs?

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
TomoT
Gast





BeitragVerfasst am: 04. Aug 2010 12:51   Titel: setgid/setuid: Daemon existiert mit zwei PIDs?

Hi,

mal eine Verständnisfrage:

Ich habe einen Daemon, der wird mit root-Rechten gestartet, öffnet sein Logfile und legt einen Serversocket an. Anschließend werden seine Rechte durch Aufruf von setgid()/setuid() auf die von "nobody" beschränkt.

Das führt lustigerweise dazu, dass dieser Prozess mit zwei PIDs in der ps-Aufstellung auftaucht, jeweils mit unterschiedlichen Userkennungen. Ist das normal so? Bzw. ist das in Ordnung, dass speziell der Prozess mit den root-Rechten weiterhin auftaucht?
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 05. Aug 2010 9:56   Titel:

Das kommt drauf an, wie der Daemon implementiert ist. Ein naiver Daemon würde einfach den Benutzer setzen und fertig. Er hätte dann aber niemals mehr die Chance wieder an root-Rechte zu gelangen, ohne dass ihn root neu startet. Das kann zum Problem werden, wenn der nichtpriviligierte Prozess abstürzt. Im allgemeinen möchte man, dass ein Daemon neu startet, wenn er durch irgendein unbedachtes Ereignis beendet wurde.

Also wird jener Daemon so implementiert sein, dass er fork()ed, dann nur das Kind setuid() ausführt und der Elternprozess dann mittels wait() auf einen eventuellen Absturz des Kindes wartet, um es in jenem Fall sofort wieder neu starten zu können. So macht das auch die Servicefunktion daemon().

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

TomoT
Gast





BeitragVerfasst am: 10. Aug 2010 7:21   Titel:

Ja, der Daemon macht das so, er ruft setuid()/setgid() auf und macht dann ohne jegliches daemon() oder fork() weiter - er braucht ab diesem Punkt keine root-Rechte mehr und soll deswegen auch nicht "versehentlich" an welche gelangen. Dennoch bleibt diese eine PID mit der root-User-ID zurück.
 

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 11. Aug 2010 22:50   Titel:

daemon() oder fork() müssten wenn überhaupt *vor* setuid() stehen, nicht danach.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy