Ich habe einen Upstart-Job für eine Node.js-Anwendung und möchte, dass er Node als node
Benutzer und nicht als ausführt root
. Wenn ich setuid
in 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 setuid
verwende , funktioniert es wie erwartet.exec
sudo
Ich habe es node
als 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 setuid
dem Verhalten von Upstart und sudo
dem Verhalten, die das eine zum Scheitern und das andere zum Erfolg führen würden?
Antwort1
Die setuid
Strophe sollte nicht im script
Block stehen, sie ist global. Dies ist wahrscheinlich der Grund, warum Ihr Job fehlschlägt.
setuid
Beachten 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 sudo
und verwenden Sie start-stop-daemon
stattdessen. Dies ist insbesondere bei Forking-Daemons wichtig. Überprüfen Sie UbuntusUpstart-Kochbuch, Kapitel 11.43.2 für Einzelheiten.