Usuários do Upstart, node e bash

1

Estou tendo alguns problemas para entender todos os mecanismos por trás do gerenciamento de usuários com upstart, node e bash.

O que eu quero fazer:

Eu quero ter um serviço que execute um script de nó. Esse script de nó abre uma porta e o servidor e, quando recebe uma solicitação, executa um arquivo bash por meio de um processo filho.

Eu tenho um usuário chamado myuser com direitos sudo.

Então aqui está minha descrição de serviço:

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

Então, aqui está o meu arquivo de nó:

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

E a seguir, aqui está uma parte do meu arquivo bash:

LOG_FILE="/home/myuser/bash_deployer.log"

echo "User that deploys: $USER" >> $LOG_FILE;
echo "UID that deploys: $UID" >> $LOG_FILE;

Então, aqui está o resultado do arquivo bash_deployer.log :

User that deploys:
UID that deploys: 1001

Portanto, não consigo entender por que minha variável $USER fica vazia enquanto o $UID é bom.

Eu quero ter certeza de que todos os comandos que estão no meu script bash são executados pelo usuário myuser . Como eu pude fazer isso?

Informações adicionais:

Quando executo meu script de nó a partir da linha de comando registrada como myuser : node index.js e faço uma solicitação, as informações são boas:

User that deploys: myuser
UID that deploys: 1001

Portanto, o problema deve ser entre upstart e node, ou como eu poderia ter certeza de que o serviço upstart executaria meu script de nó como myuser

    
por Hammerbot 23.09.2016 / 11:31

1 resposta

0

Acho que encontrei uma solução, não tenho certeza se é a solução certa, mas postei de qualquer maneira. E eu realmente não entendi muito bem, o que eu fiz de errado em primeiro lugar.

O problema estava no serviço iniciante, aqui está o meu novo que funciona bem:

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

Como você pode ver, eu executo o comando como myuser ao invés de usar o setuid do upstart.

    
por 23.09.2016 / 15:57