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
Bottle/Python Webserver: Binden an Port 80 als User
- 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
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 .Defnull hat geschrieben:Bottle kann momentan keine Rechte droppen, aber das ist ein nettes Feature das ich denke ich bald mal implementieren werde.
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")
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 .
- 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
- 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