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é?
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"
Je suggère d'utiliser Sudo avec la syntaxe suivante:
Sudo -u foouser foocommand
cela lance la commande foocommand en tant qu'utilisateur foouser.