У меня есть демон, который должен запускаться как root при запуске.
Я использую pm2 для запуска других приложений, но не могу понять, может ли он запустить приложение с правами root. Это можно сделать?
Если нет, каковы мои варианты?
У меня есть демон, который должен запускаться как root при запуске.
Я использую pm2 для запуска других приложений, но не могу понять, может ли он запустить приложение с правами root. Это можно сделать?
Если нет, каковы мои варианты?
Я бы порекомендовал:
sudo pm2 start index.js
ИЛИ
pm2 start 'http-server' /var/www -p 80
sudo pm2 startup
pm2 save
ИЛИ
pm2 start 'which http-server' /var/www -p 80
Чтобы запустить его в своем HTTP-порту
Кроме того, я всегда ставил -i 0
в конце - это запускает столько рабочих процессов, сколько у вас есть. Проверьте ЭТО
Не обязательно начинать PM2 как root. Если у вас PM2 как root и установлен модуль cli, безопасность - большой риск. Это необходимо только в том случае, если вы запускаете приложение на порту от 1 до 1024
Если для доступа к номеру порта (например, 80 или 443) ваш демон должен выполняться как root, pm2 рекомендует использовать authbind
. Итак, если вы хотите, чтобы пользователь yourusername
имел доступ к порту 80, запустите:
$ sudo apt-get install authbind
$ sudo touch /etc/authbind/byport/80
$ sudo chown yourusername /etc/authbind/byport/80
$ sudo chmod 755 /etc/authbind/byport/80
$ authbind --deep pm2 update
И затем используйте authbind --deep pm2
вместо pm2
. В документации предлагается создать псевдоним.
Вы должны запустить pm2 как root (sudo pm2 start app.js), тогда ваше приложение запустится как root
У меня были проблемы с sudo pm2 start api
, но это было с тех пор, как pm2 уже работал без привилегий sudo, поэтому вам нужно запустить:
pm2 kill
sudo pm2 start api
Это сначала убивает декамон pm2, так что он начинается с sudo, но тогда вам нужно sudo для ALL pm2 команд, например: sudo pm2 ls
Сначала установите pm2 глобально. Затем установите права root на pm2 с помощью этой команды
sudo chown ubuntu:ubuntu /home/ubuntu/.pm2/rpc.sock /home/ubuntu/.pm2/pub.sock