Utilisateurs Upstart, nœud et bash

J'ai des problèmes pour comprendre tous les mécanismes derrière la gestion des users avec upstart, node et bash.

Ce que je veux faire:

Je souhaite avoir un service, qui exécute un script de noeud. Ce script de noeud ouvre un port et le server, et quand il reçoit une requête, il exécute un file bash via un process enfant.

J'ai un user nommé myuser avec des droits sudo.

Voici donc la description de mon service:

 description "Some Service" author "My User" start on filesystem runlevel [2345] stop on shutdown respawn setuid myuser exec /usr/bin/node /home/myuser/deploy/index.js description "Some Service" description "Some Service" author "My User" start on filesystem runlevel [2345] stop on shutdown respawn setuid myuser exec /usr/bin/node /home/myuser/deploy/index.js auteur "Mon user" description "Some Service" author "My User" start on filesystem runlevel [2345] stop on shutdown respawn setuid myuser exec /usr/bin/node /home/myuser/deploy/index.js setuid myuser description "Some Service" author "My User" start on filesystem runlevel [2345] stop on shutdown respawn setuid myuser exec /usr/bin/node /home/myuser/deploy/index.js 

Ensuite, voici mon file de nœud:

 app.post('/deploy', function (req, res) { ... var child = execFile('/home/myuser/deploy/deploy.sh', execOptions, function(error, stdout, stderr) { ... }); res.send('ok'); }); app.post ('/ deploy', function (req, res) { app.post('/deploy', function (req, res) { ... var child = execFile('/home/myuser/deploy/deploy.sh', execOptions, function(error, stdout, stderr) { ... }); res.send('ok'); }); var child = execFile ('/ home / myuser / deploy / deploy.sh', execOptions, function (error, stdout, stderr) { app.post('/deploy', function (req, res) { ... var child = execFile('/home/myuser/deploy/deploy.sh', execOptions, function(error, stdout, stderr) { ... }); res.send('ok'); }); res.send ('ok'); app.post('/deploy', function (req, res) { ... var child = execFile('/home/myuser/deploy/deploy.sh', execOptions, function(error, stdout, stderr) { ... }); res.send('ok'); }); 

Et ensuite, voici une partie de mon file bash:

 LOG_FILE="/home/myuser/bash_deployer.log" echo "User that deploys: $USER" >> $LOG_FILE; echo "UID that deploys: $UID" >> $LOG_FILE; LOG_FILE = "/ home / myuser / bash_deployer.log" LOG_FILE="/home/myuser/bash_deployer.log" echo "User that deploys: $USER" >> $LOG_FILE; echo "UID that deploys: $UID" >> $LOG_FILE; echo "Utilisateur qui déploie: $ USER" >> $ LOG_FILE; LOG_FILE="/home/myuser/bash_deployer.log" echo "User that deploys: $USER" >> $LOG_FILE; echo "UID that deploys: $UID" >> $LOG_FILE; 

Donc, voici le résultat du file bash_deployer.log :

 User that deploys: UID that deploys: 1001 Utilisateur qui déploie: User that deploys: UID that deploys: 1001 

Je ne comprends donc pas pourquoi ma variable $USER rest vide alors que l' $UID est bon.

Je veux m'assurer que toutes les commands qui se trouvent dans mon script bash sont exécutées par l'user myuser . Comment pourrais-je faire ça?

Information additionnelle:

Lorsque je lance mon script de noeud à partir de la command line enregistrée comme myuser : node index.js et fais une request, l'information est bonne:

 User that deploys: myuser UID that deploys: 1001 Utilisateur qui déploie: myuser User that deploys: myuser UID that deploys: 1001 

Donc, le problème doit être entre le démarrage et le nœud, ou comment je pourrais m'assurer que le service upstart exécute mon script de noeud comme myuser

Je pense que j'ai trouvé une solution, je ne sais pas si c'est la bonne solution, mais je la publie de toute façon. Et je ne comprends pas vraiment très bien, ce que j'ai mal fait en premier lieu.

Le problème était dans le service de démarrage, voici ma nouvelle qui fonctionne bien:

 description "Some Service" author "My User" start on filesystem runlevel [2345] stop on shutdown respawn exec sudo -u myuser /usr/bin/node /home/myuser/deploy/index.js description "Some Service" description "Some Service" author "My User" start on filesystem runlevel [2345] stop on shutdown respawn exec sudo -u myuser /usr/bin/node /home/myuser/deploy/index.js auteur "Mon user" description "Some Service" author "My User" start on filesystem runlevel [2345] stop on shutdown respawn exec sudo -u myuser /usr/bin/node /home/myuser/deploy/index.js 

Comme vous le voyez, myuser la command elle-même comme myuser au lieu d'utiliser le setuid de démarrage.