Eu tenho meu aplicativo de servidor da web iniciando na inicialização usando o upstart. Este é o script inicial:
# 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
Isso funciona perfeitamente no servidor Ubuntu 10.04 LTS e estou muito feliz com isso.
No entanto, eu tenho um script de shell de implantação que efetua login usando o SSH como mainuser
(este não é um sudoer) e atualiza o diretório ativo para a versão de implantação mais recente.
O problema aqui é que o serviço precisa ser reiniciado para que os aplicativos carregem os novos arquivos de origem. No entanto, mainuser
recebe uma ...
mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found
... ao tentar pará-lo. Eu tenho que executar sudo stop webapp
, mas este usuário não pode fazer isso, pois ele não é um sudoer. Por motivos de segurança, também não quero que ele seja um sudoer, além de não inserir a senha do sudo.
Então, como permito mainuser
correr stop webapp
e start webapp
?
/sbin/stop webapp
eu recebostop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
. Como eu permitimainuser
executar apenas este comando?Respostas:
sudo é muito configurável, você pode permitir que esse usuário execute um conjunto limitado de comandos sem solicitar uma senha. A seguinte linha
/etc/sudoers
deve fazer o que você deseja:fonte
man sudoers
? Achei muito difícil analisar.Unable to connect to system bus
. Mais: Permitir grupo não sudo para controlar trabalho Upstart