Могу ли я запустить Node.JS с низкими привилегиями?

Я хотел бы запустить node с пользователем с низкими привилегиями, возможно ли это? Мне нужно использовать фреймворк Express.js

Ответ 1

Да. Для этого есть много решений, в зависимости от ваших конкретных потребностей.

Если вы хотите запустить node на порт 80, вы можете использовать nginx (пока не работает с WebSockets) или haproxy. Но, возможно, самым быстрым и грязным является использование iptables для перенаправления порта 80 в порт по вашему выбору:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8003
sudo iptables -t nat -L

Когда вы счастливы, сохраните конфигурацию и убедитесь, что iptables поставляется с загрузкой

sudo service iptables save
sudo chkconfig iptables on

Чтобы автоматически запустить службу nodejs как не-root и перезапустить ее, если она не удалась, вы можете использовать upstart с помощью script вот так:

#!upstart
description "nodeapp"
author      "you"

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

script
   export HOME="/home/user/"
   exec sudo -u user /usr/local/bin/node /home/user/app.js 2>&1 >> /home/user/app.log
end script

Если вы используете установку Amazon EC2 или получаете сообщение об ошибке sudo: sorry, you must have a tty to run sudo, вы можете заменить команду exec следующим образом:

#!upstart
description "nodeapp"
author      "you"

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

script
   export HOME="/home/user/"
   #amazon EC2 doesn’t allow sudo from script! so use su --session-command
   exec su --session-command="/usr/local/bin/node /home/user/app.js 2>&1 >> /home/user/app.log" user &
end script

И вы не задавали этот вопрос, но чтобы он продолжался вечно, проверьте monit! Вот полезное руководство по настройке node.js с выскочкой и monit.