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

2

Eu tenho um trabalho Upstart para um aplicativo Node.js e desejo executá-lo como o usuário node em vez de root . Quando eu uso setuid na configuração do trabalho, sempre que tento iniciar o trabalho, ele diz my-app stop/waiting . No entanto, se eu omitir setuid , mas usar exec com sudo , funcionará como esperado.

Eu criei node como usuário do sistema. Tanto quanto eu sei, todos os arquivos e diretórios relevantes são acessíveis por esse usuário. A versão do Upstart que estou usando é 1.12.1.

Config 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

Quais são as diferenças entre o comportamento setuid e sudo do Upstart que faria um falhar e o outro ter sucesso?

    
por amacleod 06.10.2015 / 22:09

1 resposta

3

A sub-rotina setuid não deve estar no bloco script , é global. Esta é provavelmente a razão pela qual seu trabalho falha.

Observe que usar setuid fará com que as todas fases da tarefa sejam executadas conforme o usuário especificou e não há como alterá-las. Se você deseja executar apenas um daemon como um usuário diferente, evite sudo e use start-stop-daemon . Isso é especialmente importante com daemons de bifurcação. Verifique o Cookbook Upstart do Ubuntu, capítulo 11.43.2 para detalhes.

    
por 06.10.2015 / 23:05

Tags