Por que meu trabalho Upstart funciona com sudo, mas não com setuid?

Por que meu trabalho Upstart funciona com sudo, mas não com setuid?

Eu tenho um trabalho Upstart para um aplicativo Node.js e quero fazê-lo executar o Node como nodeusuário em vez de root. Quando uso setuidna configuração do job, sempre que tento iniciar o job, aparece my-app stop/waiting. No entanto, se eu omitir, setuidmas usar execwith sudo, funcionará como esperado.

Eu criei nodecomo 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 setuido comportamento do Upstart e sudoo comportamento que faria um falhar e o outro ter sucesso?

Responder1

A setuidestrofe não deve estar em scriptbloco, é global. Esta é provavelmente a razão pela qual seu trabalho falha.

Observe que usar setuidfará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 sudoe 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.

informação relacionada