Jak rozpocząć pracę jako użytkownik nieuprzywilejowany w programie Upstart?

14

Używam ostatniej wersji upstart dla Ubuntu 10.4 LTS. upstart jest uruchamiany z flagą jądra --debug.

Tworzę niestandardową konfigurację zadania dla demona nzbget. Zasadniczo to zadanie ma skrypt przed uruchomieniem, który montuje system plików, skrypt po uruchomieniu, który odmontowuje system plików i exec nzbget -Dlinię.

Problem polega na tym, że demon nzbget musi działać jako użytkownik nieuprzywilejowany. Ta funkcja jest już zawarta w nzbget. Rzeczywiście, kiedy uruchamiam z konsoli, sudo nzbget -Dproces działa jako użytkownik nieuprzywilejowany. Ale kiedy zaczynam zadanie upstart z exec nzbget -Dlinią, proces nzbget -D działa jako root. Jak powiedziano w podręcznej książce kucharskiej, próbowałem użyć użytkownika su -c „nzbget -D”, a także demona start-stop-demona bez oczekiwanej zwrotki zgodnie z zaleceniami. Ale w przypadku obu poleceń, gdy upstart śledzi niewłaściwy PID, wydaje się, że widzi główny proces jako zabity (z powodu logów upstart) na końcu procesu uruchamiania, a zatem uruchamia skrypt postprocesowy, którego nie chcę.

=> Jak mogę to zrobić dobrze? Jak to się exec nzbget -Ddzieje, że polecenie upstart powoduje, że proces działa jako root, a sudo nzbget -Dpolecenie uruchamia go jako użytkownik nieuprzywilejowany?

ashe
źródło

Odpowiedzi:

12

Odnotowano pewien postęp w wydaniu wersji 1.4 .:

Nowe sekcje „setuid” i „setgid”, aby umożliwić uruchamianie zadań systemowych pod określonym identyfikatorem uid / gid odpowiadającym podanej nazwie / grupie.

Możesz pobrać go ze strony LaunchPad, ale (o dziwo) nie widzę PPA, więc być może będziesz musiał go skompilować samodzielnie.

W przeciwnym razie użyj polecenia sulub sudow komendzie exec w następujący sposób:

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

Oba robią prawie to samo, więc wybierz to, co Ci się najbardziej podoba. Używając przykładowego polecenia:

exec sudo -u me "nzbget -D"
Oli
źródło
nazwa domeny upstart.at jest nieumarła
umowa prof.
Dzięki za to! Nie było dla mnie jasne w dokumentach Upstart, czy powinienem używać Session Init / Jobs itp.
Luke Hoersten
4

Sugeruję użycie sudo z następującą składnią:

sudo -u foouser foocommand

uruchamia to polecenie foocommand jako użytkownik foouser.

Michael K.
źródło