Я хотел бы запустить node с пользователем с низкими привилегиями, возможно ли это? Мне нужно использовать фреймворк Express.js
Могу ли я запустить Node.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.