Я пытаюсь запустить 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

1 ответ1

1

Строка -su представляет оболочку входа в систему. Вам не нужно иметь оболочку входа в систему для запуска одной команды. Exec в любом случае используется для замены текущей оболочки. Используйте su без дефиса или опции -l, и строка -su должна исчезнуть.

Например:

# su jaroslav -c 'cowsay $USER: moo'

Все процессы принадлежат dmitry потому что это цель su. Это меняет пользователя. Sudo отличается тем, что он всегда запускается с правами суперпользователя (я не совсем уверен, как он меняется, предполагает разные личности и чем это отличается от того, что делает su).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .