Limitez les processus que l'utilisateur peut redémarrer avec un superviseur?

J'ai utilisé un superviseur pour contrôler le processus Gunicorn, sur lequel le site est en cours d'exécution Django, Bien que cette question puisse relier à tout ce qui est géré par un superviseur. J'étais la seule personne qui a gouverné et utilisé notre serveur, et le superviseur n'a commencé que comme root, Et j'ai utilisé sudo Pour commencer

supervisorctl restart myapp

Si nécessaire.

Notre serveur doit maintenant prendre en charge plusieurs utilisateurs travaillant sur différents sites, et chaque projet devrait pouvoir redémarrer vos propres processus de prise de vue sans possibilité de redémarrer les processus des autres utilisateurs.

J'ai regardé ce blog post:

http://drumcoder.co.uk/blog/20 ... root/
et était capable de permettre aux utilisateurs sans autorité root utilisation supervisorctl, Mais maintenant, tout le monde peut redémarrer les processus d'autres personnes. Apparemment, le superviseur n'a pas de moyen de gérer l'accès pour chaque utilisateur.

Est-ce que quelqu'un a des idées sur la manière de permettre aux utilisateurs de redémarrer uniquement leurs propres processus sans racine?

EDIT: Certaines choses que nous avons pensé à écrire un script appartenant à root, Avec un jeu suid, qui ne contient rien mais

supervisorctl restart myapp

et le placer dans le répertoire utilisateur auquel appartient

myapp

. Internet semble dire qu'un tel script est insécurisé si c'est faux. Nous avons également envisagé la possibilité d'écrire une démon personnalisée qui a écouté des commandes de certains utilisateurs et redémarre le processus de superviseur si l'utilisateur a la permission. Cette idée semble trop compliquée si cela fonctionnait une solution plus simple.
Invité:

Hannah

Confirmation de:

Vous pourriez utiliser

sudo

Au lieu de votre propre scénario pour faire de même. C'est-à-dire en prenant en compte la valeur par défaut

supervisord

Configuration dans laquelle ne peut fonctionner que root

supervisorctl

, Vous pouvez mettre une telle entrée dans

/etc/sudoers

:

alice ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app1
bob ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app2

Cela permettrait

alice

Cours

sudo /usr/bin/supervisorctl restart app1

comme root sans avoir à entrer un mot de passe, et cela permettra

bob

Commencer à rebeller

app2

.

Pour répondre aux questions, connectez-vous ou registre