具有 root 权限的 forever 模块 运行 其他进程是否也具有 root 权限?

Does forever module with root privilege run additional processes also with root privilege?

一段时间以来,我在设置 Node.js 网络服务器时一直参考这个 popular answer

然而,有一个看似重要的评论我想提出一个问题:

If I add my Node.js start script to /etc/rc.local, won't it be executed as root on system boot? That would defeat the purpose of the port 80 redirect.

如果我运行 forever package as root, does forever in turn 运行 its processes also as root? 我可以'在 npm documentation 中找不到关于这一点的任何信息。如果 forever 运行 在 forever 也是 root 时以 root 身份处理,那么它确实违背了目的,应该相应地更新该答案。

他并不是在建议您 运行 永久包作为 root。只有您将重定向设置为根目录。一旦 80 重定向到 3000(或任何端口),您可以 运行 节点(或永远)作为您的应用侦听端口 3000 的任何用户。

您可以 运行 以另一个用户的身份执行以下操作:

su <user name> -c '<your command>'

这里有一个简单的方法可以将其放入带有密码的脚本中:https://coderwall.com/p/0wgrwq/run-su-with-password-command-line-argument

另一个选项是 运行user 命令。 这里有一个linkhttp://linuxcommand.org/man_pages/runuser1.html.

另一种选择是 运行 作为带有 --user 选项的守护进程,但这需要一些工作。

这里真正的问题是 我如何以普通用户身份在启动时启动 nodejs 脚本?,因为您确实想以 root 身份启动服务器,主要是出于安全原因。

而且我认为您不会在 npm 文档中找到任何有趣的建议,因为这与 npm 没有太大关系。

上述答案的作者对您引用的评论的回复非常明确:

If you start your node.js script from /etc/rc.local it will run as root. However, security best practices are to never run a server as root

不要以 root 身份启动 pm2。
如果pm2启动了一些其他进程,除了特殊处理,也会以root身份启动。

当我阅读

Add your Node.js start script to the file you edited for port redirection, /etc/rc.local.

我知道制作一个脚本在启动时启动你的 nodejs 脚本,并让这个脚本以 standard/dedicated 用户的身份启动它。
也许这个答案可以给你一些想法:https://askubuntu.com/a/20238

总而言之,答案仍然有用并且不必更新,因为这个解决方案实际上非常适合普通用户访问端口(因为前 1024 个端口仅限于根用户 linux)