web-dev-qa-db-fra.com

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

J'utilise la dernière version récente d'Ubuntu 10.4 LTS. Upstart est lancé avec l'indicateur de noyau --debug.

Je crée 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 supprime le système de fichiers et une ligne exec nzbget -D.

Le problème est que le démon nzbget doit s'exécuter en tant qu'utilisateur non privé. Cette fonctionnalité est déjà incluse dans nzbget. En effet, lorsque je lance depuis la console Sudo nzbget -D, le processus s’exécute en tant qu’utilisateur non privilégié. Mais lorsque je lance le travail en amont avec la ligne exec nzbget -D, le processus nzbget -D s'exécute en tant que root. Comme indiqué dans le livre de recettes mis à jour, j'ai essayé d'utiliser les utilisateurs su -c "nzbget -D", ainsi que start-stop-daemon, sans la strophe attendue conseillée. Mais pour les deux commandes, comme upstart suit le mauvais PID, je pense que le processus principal est tué (en raison des journaux upstart) à la fin du processus de démarrage et lance donc le script de post-traitement, ce que je ne souhaite pas.

=> Comment puis-je le faire correctement? Comment se fait-il que la commande exec nzbget -D upstart force le processus à s'exécuter en tant que root, alors que la commande Sudo nzbget -D l'exécute en tant qu'utilisateur non privé?

14
ashe

La sortie de la version 1.4 a progressé:

Nouvelles strophes "setuid" et "setgid" autorisant l'exécution de tâches système sous les uid/gid spécifiés correspondant au nom/groupe donné.

Vous pouvez le récupérer à partir de leur page LaunchPad mais (étrangement) je ne peux pas voir un PPA, vous devrez donc peut-être le compiler vous-même.

Sinon, utilisez su ou Sudo dans votre commande exec comme suit:

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

Ils font tous les 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"
12
Oli

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

Sudo -u foouser foocommand

cela lance la commande foocommand en tant qu'utilisateur foouser.

4
Michael K