Come posso avviare i lavori come utente non privilegiato in Upstart?


14

Sto usando l'ultima versione di avvio per Ubuntu 10.4 LTS. upstart viene lanciato con --debug kernel flag.

Sto creando una configurazione di lavoro personalizzata per il demone nzbget. Fondamentalmente, questo lavoro ha uno script pre-avvio che monta un filesystem, uno script post-avvio che smonta il file system e una exec nzbget -Dlinea.

Il problema è che il demone nzbget deve essere eseguito come utente non autorizzato. Questa funzione è già inclusa in nzbget. In effetti, quando corro dalla console, sudo nzbget -Dil processo viene eseguito come utente non privilegiato. Ma quando inizio il processo di avvio con la exec nzbget -Dlinea, il processo nzbget -D viene eseguito come root. Come detto nel ricettario upstart, ho provato ad usare su -c "nzbget -D" utente e anche start-stop-daemon entrambi senza la strofa attesa come consigliato. Ma per entrambi i comandi, poiché upstart tiene traccia del PID errato, immagino, vede il processo principale come ucciso (a causa dei registri upstart) alla fine del processo di avvio e quindi avvia lo script post-process che non voglio.

=> Come posso farlo bene? In che modo il exec nzbget -Dcomando upstart fa funzionare il processo come root mentre il sudo nzbget -Dcomando lo fa funzionare come utente non autorizzato?

Risposte:


12

Ci sono stati alcuni progressi con il rilascio della versione 1.4 .:

Nuove stanze "setuid" e "setgid" per consentire l'esecuzione dei lavori di sistema con l'uid / gid specificato corrispondente al nome / gruppo specificato.

Puoi prenderlo dalla loro pagina LaunchPad ma (stranamente) non riesco a vedere un PPA, quindi potresti doverlo compilare da solo.

Altrimenti, usa suo sudonel tuo comando exec in questo modo:

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

Entrambi fanno praticamente la stessa cosa, quindi scegli quello con cui sei più felice. Quindi usando il comando di esempio:

exec sudo -u me "nzbget -D"

il nome di dominio upstart.at non è morto
contratto del Prof. Falken è stato violato il

Grazie per questo! Non mi era chiaro nei documenti Upstart se avrei dovuto usare Session Init / Jobs ecc.
Luke Hoersten il

4

Suggerisco di usare sudo con la seguente sintassi:

sudo -u foouser foocommand

questo esegue il comando foocommand come utente foouser.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.