Upstart: permitindo que um usuário normal pare e inicie meu serviço personalizado

16

Eu tenho meu aplicativo de servidor web começando na inicialização usando 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, tenho um script de shell de implantação que efetua login usando o SSH como mainuser (isso não é um sudoer) e atualizará o diretório de trabalho para a versão de implantação mais recente.

O problema aqui é que o serviço precisa ser reiniciado para que os aplicativos carreguem os novos arquivos de origem. No entanto, mainuser obtém um ...

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

... ao tentar pará-lo. Eu tenho que executar sudo stop webapp , mas esse usuário não pode fazer isso porque 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 querer inserir a senha do sudo.

Então, como eu permito que mainuser execute stop webapp e start webapp ?

    
por Tom 19.05.2012 / 19:25

1 resposta

31

sudo é muito configurável, você pode permitir que este usuário execute um conjunto limitado de comandos sem solicitar uma senha. A linha a seguir em /etc/sudoers deve fazer o que você deseja:

mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp
    
por 20.05.2012 / 00:06