J'ai démarré mon application de serveur Web au démarrage en utilisant upstart. Voici le script parvenu:
# 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 script shell de déploiement 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 vers la dernière version de déploiement.
Le problème ici est que le service doit être redémarré pour que les applications chargent les nouveaux fichiers source. Cependant, mainuser
obtient un ...
mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found
... en essayant de l'arrêter. Je dois courir sudo stop webapp
, mais cet utilisateur ne peut pas le faire car il n'est pas sudoer. Pour des raisons de sécurité, je ne veux pas non plus qu'il soit sudoer, et je ne veux pas insérer le mot de passe sudo.
Alors, comment puis-je mainuser
exécuter stop webapp
et start webapp
?
/sbin/stop webapp
je reçoisstop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
. Comment pourrais-je permettremainuser
d'exécuter uniquement cette commande?Réponses:
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
/etc/sudoers
doit faire ce que vous voulez:la source
man sudoers
? J'ai trouvé que c'était assez difficile à analyser.Unable to connect to system bus
. Plus: Autoriser un groupe non sudo à contrôler le travail Upstart