Я пытаюсь запустить Node.js как непривилегированный пользователь (в этом случае dmitry
). Надеясь, что кто-то может подтвердить или, если необходимо, пожалуйста, уточните, что я вижу ниже.
Используя Ubuntu 12.04 и upstart, я написал скрипт работы, который вызывает следующее:
exec sudo -u dmitry /usr/bin/node /home/dmitry/node/linkskeeper/app.js >> /var/log/linkskeeper.sys.log 2>&1
Этот оператор находится в файле /etc/init/linkskeeper.conf
и я вызываю
$ sudo service linkskeeper start
Когда я изучаю процессы, которые это порождает, я вижу:
$ 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
Похоже, что первоначальный вызов exec
порождает pid 28349
как root, что, в свою очередь, порождает 28350
с непривилегированной учетной записью. Если это правильный рассказ, это имеет смысл для меня. Интересно, что ссылка [1] ниже говорит, что это не должно работать на EC2, но, похоже, работает просто отлично.
Затем я настраиваю команду exec
для:
exec su - dmitry -c '/usr/bin/node /home/dmitry/node/linkskeeper/app.js 2>&1 >> /home/dmitry/app.log'
Я получаю следующее:
$ 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
Я не понимаю, что здесь происходит с пидами 28371
, 28372
и 28375
. Все они принадлежат dmitry
, и я не понимаю команду, указанную для 28372
, которая начинается с тире.
Я должен отметить, что приложение Node.js, кажется, прекрасно работает с обоими вызовами.
Ссылки:[1] https://stackoverflow.com/questions/8312171/can-i-run-node-js-with-low-privileges