Warum funktioniert mein Upstart-Job mit sudo, aber nicht mit setuid?

Warum funktioniert mein Upstart-Job mit sudo, aber nicht mit setuid?

Ich habe einen Upstart-Job für eine Node.js-Anwendung und möchte, dass er Node als nodeBenutzer und nicht als ausführt root. Wenn ich setuidin der Jobkonfiguration verwende, erscheint jedes Mal, wenn ich versuche, den Job zu starten, die Meldung my-app stop/waiting. Wenn ich jedoch weglasse und stattdessen mit setuidverwende , funktioniert es wie erwartet.execsudo

Ich habe es nodeals Systembenutzer angelegt. Soweit ich weiß, sind alle relevanten Dateien und Verzeichnisse für diesen Benutzer zugänglich. Die von mir verwendete Version von Upstart ist 1.12.1.

Konfiguration mit setuid:

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

gegenüber der Konfiguration mit sudo:

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

Welche Unterschiede gibt es zwischen setuiddem Verhalten von Upstart und sudodem Verhalten, die das eine zum Scheitern und das andere zum Erfolg führen würden?

Antwort1

Die setuidStrophe sollte nicht im scriptBlock stehen, sie ist global. Dies ist wahrscheinlich der Grund, warum Ihr Job fehlschlägt.

setuidBeachten Sie , dass die VerwendungalleJobphasen werden wie vom Benutzer angegeben ausgeführt und es gibt keine Möglichkeit, dies zu ändern. Wenn Sie nur einen Daemon als anderer Benutzer ausführen möchten, vermeiden Sie dies sudound verwenden Sie start-stop-daemonstattdessen. Dies ist insbesondere bei Forking-Daemons wichtig. Überprüfen Sie UbuntusUpstart-Kochbuch, Kapitel 11.43.2 für Einzelheiten.

verwandte Informationen