Безопасное разветвление дочернего процесса с низким уровнем привилегий с su против sudo

Я пытаюсь запустить 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 колл порождает пид 28349 как корень, который в свою очередь порождает 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 ответ

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

Например:

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

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

Другие вопросы по тегам