Privilegien abschütteln

23/03/2009 - 18:23 von Thomas Bach | Report spam
Hallo NG,

bin mir nicht ganz sicher, ob das alles so Sinn macht. Problem ist,
dass ich einen kleinen Dàmon laufen lassen will, dieser hat unter
anderem auch die Aufgabe regelmàßig pings abzusetzen.
Da ich mit select arbeiten will, kann ich kein einfaches subprocess
mit ping nehmen und brauche also zumindest in einem Teil meines
Programms root!?!

Wie gehe ich da jetzt am geschicktesten ran, um das Ding so zu bauen,
das nicht alles als root làuft? Geht das überhaupt?

Mein erster Plan wàre es, einen Thread zu machen, der als root làuft
und der Rest des Dàmons macht sich dann zu einem normalen User. Der
Thread würde dann immer das Bauen der Sockets übernehmen und an die
Hauptroutine übergeben.

Gruß,
Thomas Bach.
 

Lesen sie die antworten

#1 Diez B. Roggisch
23/03/2009 - 21:42 | Warnen spam
Thomas Bach schrieb:
Hallo NG,

bin mir nicht ganz sicher, ob das alles so Sinn macht. Problem ist,
dass ich einen kleinen Dàmon laufen lassen will, dieser hat unter
anderem auch die Aufgabe regelmàßig pings abzusetzen.
Da ich mit select arbeiten will, kann ich kein einfaches subprocess
mit ping nehmen und brauche also zumindest in einem Teil meines
Programms root!?!

Wie gehe ich da jetzt am geschicktesten ran, um das Ding so zu bauen,
das nicht alles als root làuft? Geht das überhaupt?

Mein erster Plan wàre es, einen Thread zu machen, der als root làuft
und der Rest des Dàmons macht sich dann zu einem normalen User. Der
Thread würde dann immer das Bauen der Sockets übernehmen und an die
Hauptroutine übergeben.



Das geht nicht so - Threads teilen den Prozessraum, und damit koennte
ein nicht-root-thread sich einfach in den root-thread reinkopieren, und
sich privilegien verschaffen.

Stattdessen fiele mir ein:


- als root forken, und mit einem prozess pings absetzen (der bleibt
root), der andere gibt seine privilegien auf, kommunikation ueber pipes.

- einen thread starten welcher ping per subprocess aufruft, der
kommuniziert mit dem hauptthread ebenfalls ueber pipes (und damit select)

Ich wuerde zuerstmal letzteres bevorzugen, weil es robuster bezueglich
der privilegienaufgabe ist.

Diez

Ähnliche fragen