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?
setgid/setuid: Daemon existiert mit zwei PIDs?
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
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.
Ich mag die Schreie.