Wie starte ich Jobs als nicht privilegierter Benutzer in Upstart?

14

Ich verwende die letzte Upstart-Version für Ubuntu 10.4 LTS. upstart wird mit --debug kernel flag gestartet.

Ich erstelle eine benutzerdefinierte Jobkonfiguration für den nzbget-Daemon. Grundsätzlich verfügt dieser Job über ein Pre-Start-Skript, mit dem ein Dateisystem gemountet wird, und ein Post-Start-Skript, mit dem das Dateisystem und eine exec nzbget -DZeile gemountet werden.

Das Problem ist, dass der nzbget-Daemon als nicht privilegierter Benutzer ausgeführt werden muss. Diese Funktion ist bereits in nzbget enthalten. Tatsächlich wird sudo nzbget -Dder Prozess von der Konsole aus als nicht privilegierter Benutzer ausgeführt. Aber wenn ich den Upstart-Job mit der exec nzbget -DZeile starte, läuft der Prozess nzbget -D als root. Wie im Upstart-Kochbuch erwähnt, habe ich versucht, su -c "nzbget -D" user und auch start-stop-daemon zu verwenden, ohne die empfohlene Zeilengruppe expect. Aber für beide Befehle, da upstart die falsche PID verfolgt, wird der Hauptprozess am Ende des Startprozesses (aufgrund von Upstart-Protokollen) als abgebrochen betrachtet und somit das Post-Process-Skript gestartet, das ich nicht möchte.

=> Wie kann ich das richtig machen? Wie kommt es, dass mit dem exec nzbget -DBefehl sudo nzbget -Dupstart der Prozess als root ausgeführt wird, während er mit dem Befehl als nicht berechtigter Benutzer ausgeführt wird?

als er
quelle

Antworten:

12

Mit der Veröffentlichung der Version 1.4 wurden einige Fortschritte erzielt:

Neue Zeilengruppen "setuid" und "setgid", mit denen Systemjobs unter der angegebenen UID / GID ausgeführt werden können, die dem angegebenen Namen / der angegebenen Gruppe entspricht.

Sie können es von der LaunchPad-Seite herunterladen, aber (seltsamerweise) kann ich keine PPA sehen, sodass Sie sie möglicherweise selbst kompilieren müssen.

Verwenden Sie andernfalls suoder sudoin Ihrem exec-Befehl wie folgt:

su -c "<commands>" <username>
sudo -u <username> <commands>

Beide machen so ziemlich das Gleiche, also wähle aus, mit was auch immer du am glücklichsten bist. Verwenden Sie also Ihren Beispielbefehl:

exec sudo -u me "nzbget -D"
Oli
quelle
Domainname upstart.at ist untot
Prof. Falken unterstützt Monica
Danke dafür! War mir in den Upstart-Dokumenten nicht klar, ob ich Session Init / Jobs usw. verwenden sollte
Luke Hoersten
4

Ich schlage vor, sudo mit der folgenden Syntax zu verwenden:

sudo -u foouser foocommand

Dadurch wird der Befehl foocommand als Benutzer foouser ausgeführt.

Michael K
quelle