Eu tenho um trabalho Upstart para um aplicativo Node.js e quero fazê-lo executar o Node como node
usuário em vez de root
. Quando uso setuid
na configuração do job, sempre que tento iniciar o job, aparece my-app stop/waiting
. No entanto, se eu omitir, setuid
mas usar exec
with sudo
, funcionará como esperado.
Eu criei node
como usuário do sistema. Pelo que eu sei, todos os arquivos e diretórios relevantes podem ser acessados por esse usuário. A versão do Upstart que estou usando é 1.12.1.
Configurar com setuid
:
script
setuid node
chdir /var/app/my-app
exec nodejs server.js
end script
versus a configuração com sudo
:
script
chdir /var/app/my-app
exec sudo -u node nodejs server.js
end script
Que diferenças existem entre setuid
o comportamento do Upstart e sudo
o comportamento que faria um falhar e o outro ter sucesso?
Responder1
A setuid
estrofe não deve estar em script
bloco, é global. Esta é provavelmente a razão pela qual seu trabalho falha.
Observe que usar setuid
farátodosas fases do trabalho são executadas conforme especificado pelo usuário e não há como alterá-lo. Se você deseja executar apenas um daemon como um usuário diferente, evite sudo
e siga em frente start-stop-daemon
. Isto é especialmente importante com daemons bifurcados. Verifique o UbuntuLivro de receitas para iniciantes, capítulo 11.43.2 para obter detalhes.