View previous topic :: View next topic |
Author |
Message |
buggybunny Apprentice
Joined: 07 Aug 2006 Posts: 156
|
Posted: Thu Oct 04, 2007 8:01 pm Post subject: Als User einen Prozeß auf einem "well known port" |
|
|
Hey ho,
ich hab hier gerade ein Verständnisproblem:
Ich kann ja als User problemlos einen Prozess starten, der oberhalb der well known ports liegt, sprich > 1023:
Jedoch nicht < 1024:
Code: | netcat -l -p 1023
Can't grab 0.0.0.0:1023 with bind : Permission denied |
Soweit nichts neues.
Nur ich frage mich:
Wie machen denn das die ganzen Server-Prozesse (Apache, Samba usw.) die zwar nur von root gestartet werden können, aber dann eben __nicht__ unter root laufen, sondern z.B. unter wwwrun, was auch immer?
Weil:
Kuckt man mal in die Startskripte rein, sieht man z.B. oft sowas wie:
Code: | su - mein_user -c "mein_server_prozess.start -arg1 -arg2" |
Wie schaffen die das, sprich einen Prozess unter einem unpriviligierten user zu starten und laufen zu lassen und trotzdem einen Port < 1024 zu belegen? |
|
Back to top |
|
|
der_flo Tux's lil' helper
Joined: 02 Mar 2004 Posts: 142
|
Posted: Thu Oct 04, 2007 9:41 pm Post subject: |
|
|
ohne jetzt konkrete beispiele zu kennen, kann ich mir eigentlich nur einen weg vorstellen:
sie starten als root und droppen dann ihre rechte, wechseln also den user.
mach auch mal mal
sowas wie "su -c" funktioniert bestimmt nicht, ausser der socket ist schon offen. da denke ich zb an inetd, der nimmt verbindungen als root an und:
- fork't
- dup't die file-deskriptoren (setzt den socket auf stdin und stdout)
- setuid't zum konfigurierten user,
- exec't dann das programm.
schreit nach c-programmierung, ist nicht jedermanns sache.
bitte korrigiert mich, falls müll in diesem beitrag steht.
ciao,
der flo |
|
Back to top |
|
|
sirro Veteran
Joined: 20 Jul 2003 Posts: 1472 Location: aachen.nrw.de.eu
|
Posted: Fri Oct 05, 2007 8:31 am Post subject: |
|
|
So oder so ähnlich wird es auch gemacht. Sieht man an einem Beispiel aus der "richtigen Welt":
http://trac.lighttpd.net/trac/browser/trunk/src/server.c?rev=1988
In Zeile 1321 wird versucht (über eine Funktion) den Port zu öffnen, wenn das erfolgreich ist werden später (ab 1342) Rechte abgegeben. Aber wenn der socket einmal offen ist, dann kann er auch weiter benutzt werden. |
|
Back to top |
|
|
buggybunny Apprentice
Joined: 07 Aug 2006 Posts: 156
|
Posted: Sat Oct 06, 2007 12:47 pm Post subject: |
|
|
Thanks an euch beide, vor allem für das Praxis-beispiel!
Ich hab nochmal nachgeschaut, und festgestellt das meine Beispiele mit "su ...." tatsächlich nur bei Anwendungen vorkamen, die einen Port > 1024 belegt haben....... |
|
Back to top |
|
|
der_flo Tux's lil' helper
Joined: 02 Mar 2004 Posts: 142
|
Posted: Sat Oct 06, 2007 12:57 pm Post subject: |
|
|
buggybunny wrote: |
Ich hab nochmal nachgeschaut, und festgestellt das meine Beispiele mit "su ...." tatsächlich nur bei Anwendungen vorkamen, die einen Port > 1024 belegt haben....... |
danke fürs nachschauen, hätte mich auch _sehr_ gewundert, wenn das so funktioniert hätte. aber man lernt ja nie aus ...
ciao,
der flo |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|