Estou tentando executar o Node.js como um usuário não privilegiado ( dmitry
neste caso). Esperando que alguém possa confirmar ou, se necessário, por favor, explique o que estou vendo abaixo:
Usando o Ubuntu 12.04 e o upstart, eu escrevi um script de trabalho que chama o seguinte:
exec sudo -u dmitry /usr/bin/node /home/dmitry/node/linkskeeper/app.js >> /var/log/linkskeeper.sys.log 2>&1
Esta declaração reside em um arquivo chamado /etc/init/linkskeeper.conf
e eu invoco
$ sudo service linkskeeper start
Quando examino os processos que isso gera, vejo:
$ ps aux | grep node
root 28349 0.0 0.2 40908 1672 ? Ss 16:51 0:00 sudo -u dmitry /usr/bin/node /home/dmitry/node/linkskeeper/app.js
dmitry 28350 2.1 2.1 641784 13268 ? Sl 16:51 0:00 /usr/bin/node /home/dmitry/node/linkskeeper/app.js
Parece que a chamada exec
inicial gera pid 28349
como root, o que, por sua vez, gera 28350
com a conta sem privilégios. Se esta é a narrativa correta, faz sentido para mim. Curiosamente, a referência [1] abaixo diz que isso não deve funcionar no EC2, mas parece funcionar bem.
Depois, ajustei o comando exec
para:
exec su - dmitry -c '/usr/bin/node /home/dmitry/node/linkskeeper/app.js 2>&1 >> /home/dmitry/app.log'
Eu recebo o seguinte:
$ ps aux | grep node
dmitry 28371 0.0 0.2 37952 1312 ? Ss 16:57 0:00 su - dmitry -c /usr/bin/node /home/dmitry/node/linkskeeper/app.js 2>&1 >> /home/dmitry/app.log
dmitry 28372 0.0 0.2 19516 1712 ? S 16:57 0:00 -su -c /usr/bin/node /home/dmitry/node/linkskeeper/app.js 2>&1 >> /home/dmitry/app.log
dmitry 28375 3.2 2.6 639748 15916 ? Sl 16:57 0:00 /usr/bin/node /home/dmitry/node/linkskeeper/app.js
Eu não entendo o que está acontecendo aqui com pids 28371
, 28372
e 28375
. Todos são de propriedade de dmitry
e não entendo o comando listado para 28372
, que começa com um traço.
Devo observar que o aplicativo Node.js parece funcionar bem com as duas invocações.
Referências:
[1] link