Tengo mi aplicación de servidor web comenzando en el arranque usando upstart. Este es el script de inicio:
# 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
Esto funciona perfectamente en el servidor Ubuntu 10.04 LTS y estoy muy contento con eso.
Sin embargo, tengo un script de shell de implementación que inicia sesión usando SSH como mainuser
(esto no es un sudoer) y luego actualizará el directorio de trabajo a la última versión de implementación.
El problema aquí es que el servicio debe reiniciarse para que las aplicaciones carguen los nuevos archivos fuente. Sin embargo, mainuser
obtiene un ...
mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found
... cuando intentas detenerlo. Tengo que correr sudo stop webapp
, pero este usuario no puede hacer esto porque no es un sudoer. Por razones de seguridad, tampoco quiero que sea un sudoer, además no quiero insertar la contraseña de sudo.
Entonces, ¿cómo dejo mainuser
correr stop webapp
y start webapp
?
/sbin/stop webapp
me salestop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
. ¿Cómo permitiríamainuser
ejecutar solo este comando?Respuestas:
sudo es muy configurable, puede permitir que este usuario ejecute un conjunto limitado de comandos sin solicitar una contraseña. La siguiente línea
/etc/sudoers
debe hacer lo que quieras:fuente
man sudoers
? Me pareció bastante difícil de analizar.Unable to connect to system bus
. Más: Permitir que un grupo que no sea sudo controle el trabajo de Upstart