He usado el supervisor para administrar un proceso de Gunicorn que ejecuta un sitio de Django, aunque esta pregunta podría referirse a cualquier cosa administrada por el supervisor. Anteriormente, era la única persona que administraba y usaba nuestro servidor, y el supervisor simplemente se ejecutaba como root y usaba sudo para ejecutar supervisorctl restart myapp
cuando era necesario.
Ahora nuestro servidor tiene que admitir múltiples usuarios que trabajan en diferentes sitios, y cada proyecto debe poder reiniciar sus propios procesos gunicorn sin poder reiniciar los procesos de otros usuarios.
Seguí esta publicación de blog:
http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/
y fue capaz de permitir que usuarios no root usen supervisorctl, pero ahora cualquiera puede reiniciar los procesos de otra persona. Por lo que parece, el supervisor no tiene una forma de hacer el control de acceso por usuario.
¿Alguien tiene alguna idea sobre cómo permitir a los usuarios reiniciar solo sus propios procesos sin root?
EDITAR: Algunas cosas en las que hemos pensado incluyen escribir un script propiedad de root con el conjunto de bits suid que no contiene nada más que supervisorctl restart myapp
ponerlo en el directorio del usuario propietario myapp
. Internet parece estar diciendo que tal script es inseguro si se hace mal. También consideramos escribir un demonio personalizado que escuche los comandos de usuarios específicos y reinicie el proceso del supervisor si el usuario tiene permiso. Esta idea parece demasiado complicada si una solución más simple funcionara.