Ho usato il supervisore per gestire un processo Gunicorn che esegue un sito Django, anche se questa domanda potrebbe riguardare qualsiasi cosa gestita dal supervisore. In precedenza ero l'unica persona che gestiva e utilizzava il nostro server, e il supervisore aveva appena funzionato come root e avrei usato sudo per eseguire supervisorctl restart myapp
quando necessario.
Ora il nostro server deve supportare più utenti che lavorano su siti diversi e ogni progetto deve essere in grado di riavviare i propri processi di gunicorn senza essere in grado di riavviare i processi di altri utenti.
Ho seguito questo post sul blog:
http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/
ed è stato in grado di consentire agli utenti non root di utilizzare supervisorctl, ma ora chiunque può riavviare i processi di chiunque altro. A quanto pare, il supervisore non ha modo di controllare gli accessi per utente.
Qualcuno ha qualche idea su come consentire agli utenti di riavviare solo i propri processi senza root?
EDIT: Alcune cose a cui abbiamo pensato includono la scrittura di uno script di proprietà di root con il set di bit di suid che non contiene altro che l' supervisorctl restart myapp
inserimento nella directory dell'utente proprietario myapp
. Sembra che Internet stia dicendo che una tale sceneggiatura non è sicura se eseguita in modo errato. Abbiamo anche considerato la possibilità di scrivere un demone personalizzato che ascolta i comandi di utenti specifici e riavvia il processo del supervisore se l'utente ha l'autorizzazione. Questa idea sembra eccessivamente complicata se una soluzione più semplice funzionerebbe.