Como devo usar o sudo de um script iniciante?

2

Estou usando o upstart para executar meu aplicativo node.js em uma instância do Amazon Linux AMI EC2. Eu tive alguns problemas para fazê-lo funcionar, resumidos abaixo.

No meu roteiro, eu tinha uma frase como esta:

exec sudo -u www /usr/local/bin/node /var/www/foo/app.js >> /var/log/foo.sys.log 2>&1

Quando executado, o trabalho nunca foi aprovado stop/waiting e, quando liguei log-priority debug , vi esta linha:

sudo: sorry, you must have a tty to run sudo

Acabei em este post falando sobre visudo e porque eu não deveria usá-lo e como recomenda usar --session-command . Então mudei a linha para:

exec su --session-command="/usr/local/bin/node /var/www/foo/app.js >> /var/log/foo.sys.log 2>&1" www

O log agora diz (sys) Starting , mas initctl status foo ainda diz foo stop/waiting .

Neste momento eu não tenho certeza de como o que fazer para que isso funcione, qualquer ajuda seria apreciada.

Atualização: Já passei de esta postagem do SO e os resultados são o mesmo.

    
por blu 05.02.2012 / 20:45

1 resposta

6

P: "Como devo usar sudo de um script do upstart (ou qualquer outro tipo de inicialização / inicialização do sistema)?"
A: "Você não deveria".

O Sudo é realmente projetado para ser usado interativamente (daí a mensagem you must have a tty to run sudo ) - Não é a ferramenta certa para ser usada em scripts de inicialização não interativos.

Para fazer o que você quer, é necessário ter um pouco de hackery, porque o Upstart não suporta o lançamento de trabalhos como usuários sem privilégios (ainda que, um dia, eles consertem o problema). A questão era perguntada e respondida no SuperUser , mas vou reproduzi-la aqui como é igualmente valioso para os administradores:

Asking on the #upstart channel on freenode, the official take on the matter is:

A future release of Upstart will have native support for that, but for now, you can use something like:

exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters]

    
por 05.02.2012 / 21:42