Comment démarrer des travaux en tant qu'utilisateur non privilégié dans Upstart?

14

J'utilise la dernière version arrivée pour Ubuntu 10.4 LTS. upstart est lancé avec le drapeau du noyau --debug.

Je fais une configuration de travail personnalisée pour le démon nzbget. Fondamentalement, ce travail a un script de pré-démarrage qui monte un système de fichiers, un script de post-démarrage qui démonte le système de fichiers et une exec nzbget -Dligne.

Le problème est que le démon nzbget doit s'exécuter en tant qu'utilisateur non privilégié. Cette fonctionnalité est déjà incluse dans nzbget. En effet, lorsque j'exécute à partir de la console, sudo nzbget -Dle processus s'exécute en tant qu'utilisateur non privilégié. Mais lorsque je démarre le travail parvenu avec la exec nzbget -Dligne, le processus nzbget -D s'exécute en tant que root. Comme dit dans le livre de recettes parvenu, j'ai essayé d'utiliser l'utilisateur su -c "nzbget -D" et aussi le démon start-stop-sans la strophe attendue comme conseillé. Mais pour les deux commandes, comme upstart suit le mauvais PID, je suppose, il voit le processus principal comme tué (en raison des journaux upstart) à la fin du processus de démarrage et donc, il lance le script de post-processus dont je ne veux pas.

=> Comment puis-je le faire correctement? Comment se fait-il que la exec nzbget -Dcommande upstart fasse fonctionner le processus en tant que root alors que la sudo nzbget -Dcommande le fait fonctionner en tant qu'utilisateur non privilégié?

ashe
la source

Réponses:

12

Il y a eu quelques progrès avec la sortie de la version 1.4:

Nouvelles strophes «setuid» et «setgid» pour permettre l'exécution des tâches système sous l'uid / gid spécifié correspondant au nom / groupe donné.

Vous pouvez le récupérer sur leur page LaunchPad mais (étrangement) je ne vois pas de PPA donc vous devrez peut-être le compiler vous-même.

Sinon, utilisez suou sudodans votre commande exec comme ceci:

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

Ils font tous deux à peu près la même chose, alors choisissez celui avec lequel vous êtes le plus heureux. Donc, en utilisant votre exemple de commande:

exec sudo -u me "nzbget -D"
Oli
la source
nom de domaine upstart.at est mort
contrat du professeur Falken a été
Merci pour cela! Il n'était pas clair pour moi dans les documents Upstart si je devais utiliser Session Init / Jobs etc.
Luke Hoersten
4

Je suggère d'utiliser sudo avec la syntaxe suivante:

sudo -u foouser foocommand

cela exécute la commande foocommand en tant qu'utilisateur foouser.

Michael K
la source