¿Por qué mi trabajo Upstart funciona con sudo pero no con setuid?

¿Por qué mi trabajo Upstart funciona con sudo pero no con setuid?

Tengo un trabajo Upstart para una aplicación Node.js y quiero que ejecute Node como nodeusuario en lugar de root. Cuando lo uso setuiden la configuración del trabajo, cada vez que intento iniciar el trabajo, dice my-app stop/waiting. Sin embargo, si omito setuidpero uso execwith sudo, funciona como espero.

Lo he creado nodecomo usuario del sistema. Hasta donde yo sé, ese usuario puede acceder a todos los archivos y directorios relevantes. La versión de Upstart que estoy usando es 1.12.1.

Configurar con setuid:

script
  setuid node
  chdir /var/app/my-app
  exec nodejs server.js
end script

versus la configuración con sudo:

script
  chdir /var/app/my-app
  exec sudo -u node nodejs server.js
end script

¿Qué diferencias hay entre setuidel comportamiento de Upstart y sudoel comportamiento que haría que uno fracasara y el otro triunfara?

Respuesta1

La setuidestrofa no debe estar en scriptbloque, es global. Probablemente esta sea la razón por la que su trabajo fracasa.

Tenga en cuenta que el uso setuidharátodoLas fases del trabajo se ejecutan según lo especificado por el usuario y no hay forma de cambiarlo. Si desea ejecutar solo un demonio como un usuario diferente, evítelo sudoy opte por hacerlo start-stop-daemon. Esto es especialmente importante con demonios bifurcados. Compruebe UbuntuLibro de cocina advenedizo, capítulo 11.43.2 para más detalles.

información relacionada