16 votes

Upstart : permettre à un utilisateur normal d'arrêter et de démarrer mon service personnalisé

J'ai réussi à faire démarrer mon application de serveur web au démarrage en utilisant upstart. Voici le script de upstart :

# web app node upstart file at /etc/init/webapp.conf

description "web application"

start on started mongodb
stop on runlevel [06]

respawn
respawn limit 10 100

env NODE_ENV=production

pre-start script
    ulimit -n 2048
end script

exec start-stop-daemon --start -c mainuser --exec /usr/bin/make -- -C /home/mainuser/app start-prod

Cela fonctionne parfaitement sur le serveur Ubuntu 10.04 LTS et j'en suis très heureux.

Cependant, j'ai un déploiement Shell Shell qui se connecte en utilisant SSH en tant que mainuser (ce n'est pas un sudoer) et mettra ensuite à jour le répertoire de travail avec la dernière version du déploiement.

Le problème ici est que le service doit être redémarré pour que les applications chargent les nouveaux fichiers sources. Cependant, mainuser obtient un...

mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found

...en essayant de l'arrêter. Je dois exécuter sudo stop webapp mais cet utilisateur ne peut pas le faire car il n'est pas un sudoer. Pour des raisons de sécurité, je ne veux pas non plus qu'il soit un sudoer, et je ne veux pas non plus insérer le mot de passe sudo.

Alors comment puis-je permettre mainuser à exécuter stop webapp y start webapp ?

31voto

mgorven Points 29736

Sudo est très configurable, vous pouvez autoriser cet utilisateur à exécuter un ensemble limité de commandes sans demander de mot de passe. La ligne suivante dans /etc/sudoers devrait faire ce que vous voulez :

mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X