Ich habe Supervisor verwendet, um einen Gunicorn-Prozess zu verwalten, der eine Django-Site ausführt, obwohl diese Frage sich auf alles beziehen könnte, was vom Supervisor verwaltet wird. Bisher war ich die einzige Person, die unseren Server verwaltete und benutzte, und der Supervisor lief nur als Root und ich verwendete sudo, um ihn supervisorctl restart myapp
bei Bedarf auszuführen .
Jetzt muss unser Server mehrere Benutzer unterstützen, die an verschiedenen Standorten arbeiten, und jedes Projekt muss in der Lage sein, seine eigenen Gunicorn-Prozesse neu zu starten, ohne die Prozesse anderer Benutzer neu zu starten.
Ich bin diesem Blog-Beitrag gefolgt:
http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/
und war in der Lage, Nicht-Root-Benutzern die Verwendung von supervisorctl zu erlauben, aber jetzt kann jeder die Prozesse eines anderen neu starten. So wie es aussieht, hat der Supervisor keine Möglichkeit, die Zugriffskontrolle pro Benutzer durchzuführen.
Hat jemand eine Idee, wie man Benutzern erlaubt, nur ihre eigenen Prozesse ohne root neu zu starten?
BEARBEITEN: Einige Dinge, über die wir nachgedacht haben, sind das Schreiben eines Skripts von root mit dem suid-Bit-Satz, der nichts anderes enthält, supervisorctl restart myapp
und das Ablegen in das Verzeichnis des Benutzers, dessen Eigentümer es ist myapp
. Das Internet scheint zu sagen, dass ein solches Skript unsicher ist, wenn es falsch gemacht wird. Wir haben auch überlegt, einen benutzerdefinierten Daemon zu schreiben, der auf Befehle von bestimmten Benutzern wartet und den Supervisor-Prozess neu startet, wenn der Benutzer die Berechtigung hat. Diese Idee erscheint zu kompliziert, wenn eine einfachere Lösung funktionieren würde.