Bottle/Python Webserver: Binden an Port 80 als User

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
uKev
User
Beiträge: 15
Registriert: Mittwoch 9. Dezember 2009, 13:43

Hallo Leute,

gleich die nächste Frage zum Theme Python-Webserver/Bottle:

Was ist der empfohlene Weg einen Python-Webserver (egal ob Bottle oder sonst was) an Port 80 zu binden ohne ihn als root-Prozess laufen lassen zu müssen. Kann ich meine root-Privilegion nach dem Start droppen, so wie es Apache und co machen?
Oder gibt es einen anderen Mechanismus um einem Benutzer gezielt zu erlauben, dass er Port 80 binden darf?
Ich will auf keinen Fall einen anderen Webserver vorschalten.

Bin für jeden Tipp dankbar :)!

Viele Grüße,

Kev
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Apache + mod_wsgi als Daemonprocess
uKev
User
Beiträge: 15
Registriert: Mittwoch 9. Dezember 2009, 13:43

Hi Apollo13,

vielen Dank für deine Antwort.

Aber wie bereits gesagt, möchte ich gerade keinen anderen Webserver vorschalten sondern den nackten Python-Prozess als nicht-root an Port 80 gebunden haben.

Viele Grüße,

Kev
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

So macht man das aber ganz bestimmt nicht, das ist ja nur ein Dev.-Server.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Bottle kann momentan keine Rechte droppen, aber das ist ein nettes Feature das ich denke ich bald mal implementieren werde.
Bottle: Micro Web Framework + Development Blog
uKev
User
Beiträge: 15
Registriert: Mittwoch 9. Dezember 2009, 13:43

Defnull hat geschrieben:Bottle kann momentan keine Rechte droppen, aber das ist ein nettes Feature das ich denke ich bald mal implementieren werde.
Ich hoffe, du bist mir nicht böse, aber ich wollte darauf nicht warten und hab das jetzt mal implementiert und dir einen Pull-Request gesendet :).

Um das Feature zu nutzen, muss man zum run() Aufruf nur entsprechend folgende Argumente hinzufügen:

Code: Alles auswählen

run(host='ip', port=80, drop_priv=True, user="kev", group="kev")
und die Site als root starten.

Falls nur drop_priv=True gesetzt ist, ist user standardmäßig nobody und group nogroup.
Falls drop_priv nicht oder auf False gesetzt ist, wird user und group ignoriert.

Das ganze hab ich allerdings nur für den WSGIRefServer implementiert und getestet, weil ich nicht genau weiß, wie die anderen arbeiten. Es ist aber so implementiert, dass es keinen Aufwand darstellt, es für die anderen ebenfalls zu aktivieren.

Sobald der Port (z.B. 80) gebunden wurde, werden die Root-Rechte aufgegeben und der Prozess läuft fortan unter dem eingestellen Benutzer und Gruppe.

Wenn das Feature reloader=True genutzt wird, bleibt allerdings der ursprüngliche Haupt-Prozess root und nur die einzelnen Kind-Prozesse droppen ihre Rechte nach dem Binden des Ports.

Wenn es jemand testen möchte, findet er die angepassten Sourcen dort:
http://github.com/uKev/bottle

Ich hoffe mal, dass du das Feature in dein Repo übernimmst.

Fragen oder Anmerkungen willkommen :).
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Sehr cool, das würde ich gerne übernehmen. Vorher muss ich das allerdings noch etwas aus testen. Schließlich ist das ein recht sicherheitskritisches Feature, was darüber hinaus auch noch ekelig OS-Abhängig ist. Mal sehen, ob ich am Wochenende etwas Zeit dafür finde.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Nene, lass das mal lieber schön raus .. sowas von OS-abhängig.

Schöner wäre vielleicht, wenn man das ganze als ein Plugin/AddOn integrieren und nutzen könnte.

Aber im Basis-Paket hat das IMO nichts verloren.

>>Masaru<<
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Unter Windows braucht man das Feature nicht, da eh jeder Texteditor admin rechte hat und der Web Server im Kernel Space läuft. Unter allen unix deviraten ist es aber ein nettes Feature. Natürlich wird das nicht der default, aber als zusätzliche Option, die halt ne exception wirft wenn sie nicht funktioniert, ist das ne feine Sache. Der auto-reloader funktioniert ja auch nur bedingt unter nicht-Linux Systemen.
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Defnull hat geschrieben:Unter Windows braucht man das Feature nicht, da eh jeder Texteditor admin rechte hat ...
Jein ... ab Windows Vista ist das ganze etwas anders ;).

>>Masaru<<
Antworten