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

.