J'ai utilisé le superviseur pour gérer un processus Gunicorn exécutant un site Django, bien que cette question puisse concerner tout ce qui est géré par le superviseur. Auparavant, j'étais la seule personne à gérer et à utiliser notre serveur, et le superviseur s'exécutait en tant que root et j'utilisais sudo pour exécuter en supervisorctl restart myapp
cas de besoin.
Maintenant, notre serveur doit prendre en charge plusieurs utilisateurs travaillant sur différents sites, et chaque projet doit pouvoir redémarrer leurs propres processus gunicorn sans pouvoir redémarrer les processus d'autres utilisateurs.
J'ai suivi ce billet de blog:
http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/
et a pu autoriser les utilisateurs non root à utiliser supervisorctl, mais maintenant tout le monde peut redémarrer les processus de n'importe qui d'autre. À première vue, le superviseur n'a aucun moyen de contrôler l'accès par utilisateur.
Quelqu'un a-t-il des idées sur la façon de permettre aux utilisateurs de redémarrer uniquement leurs propres processus sans root?
EDIT: Nous avons pensé à écrire un script appartenant à root avec le jeu de bits suid qui ne contient rien supervisorctl restart myapp
et le mettre dans le répertoire de l'utilisateur qui en est propriétaire myapp
. Internet semble dire qu'un tel script n'est pas sûr s'il est mal fait. Nous avons également envisagé d'écrire un démon personnalisé qui écoute les commandes d'utilisateurs spécifiques et redémarre le processus de supervision si l'utilisateur a l'autorisation. Cette idée semble trop compliquée si une solution plus simple fonctionnait.
la source
%sudo ALL=(ALL:ALL) ALL