【发布时间】:2016-05-08 09:40:18
【问题描述】:
我有一个必须在启动时以 root 身份运行的守护进程。
我使用 pm2 启动其他应用程序,但不知道它是否可以以 root 身份启动应用程序。能做到吗?
如果没有,我有什么选择?
【问题讨论】:
我有一个必须在启动时以 root 身份运行的守护进程。
我使用 pm2 启动其他应用程序,但不知道它是否可以以 root 身份启动应用程序。能做到吗?
如果没有,我有什么选择?
【问题讨论】:
你应该以 root 身份启动 pm2,(sudo pm2 start app.js),然后你的应用程序将以 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 放在最后——这会启动与内核数量一样多的工作进程。检查THIS
并不总是需要以 root 身份启动 PM2。如果您以 root 身份安装了 PM2 并安装了 cli 模块,则安全性是一个很大的风险。仅当您在 1 到 1024 之间的端口上启动应用时才需要这样做
【讨论】:
如果您只需要以 root 身份运行您的守护程序以访问端口号(例如 80 或 443),pm2 documentation 建议使用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。文档建议设置别名。
【讨论】:
apt-get 仅适用于基于 Debian 的发行版。
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
【讨论】:
ubuntu:ubuntu?在不同的发行版中会是root:user_to_give_root_access吗?
您可能会考虑使用 iptables 路由您的流量,因为此错误背后是有原因的
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
【讨论】:
浪费了大约一个小时
在 AWS EC2 机器上,由于较早的安装,一个系统处于不一致的状态,这迫使应用程序中的 sudo 提升对操作系统的所有命令,如 sh 等。
pm2 曾以 root 身份运行:
ps aux | grep pm2
# root ... PM2 v4.1.2: God Daemon (/root/.pm2)
现在 pm2 正在作为 ubuntu 运行:
ps aux | grep pm2
# ubuntu ... PM2 v4.1.2: God Daemon (/home/ubuntu/.pm2)
以下命令有效:
sudo pm2 kill
sudo npm remove pm2 -g
sudo npm i -g pm2@latest
sudo pm2 update
sudo chown -R ubuntu:ubuntu /home/ubuntu/.pm2
希望有帮助
【讨论】: