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

时间:2017-03-21 23:02:04

标签: node.js forever

在设置我的Node.js网络服务器时,有一段时间我一直在指这个popular answer

但是,这个看似重要的评论我希望提出一个问题:

  

如果我将我的Node.js启动脚本添加到/etc/rc.local,不会在系统启动时以root身份执行吗?这将破坏端口80重定向的目的。

如果我以root用户身份运行forever软件包,是否会依次以root身份运行其进程?我无法在{{{}中找到有关此点的任何信息3}}。如果永远确实以root身份运行进程,那么它确实会破坏目的并且应该相应地更新答案。

2 个答案:

答案 0 :(得分:5)

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

而且我不认为你会在npm文档上找到任何有趣的建议,因为这与npm没什么关系。

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

  

如果从/etc/rc.local启动node.js脚本,它将以   根。但是,安全性最佳实践是永远不要像运行服务器那样运行   根

不要以root身份启动pm2 如果某个其他进程在pm2之前启动,除了特殊处理之外,还将以root身份启动。

当我读到

  

将Node.js启动脚本添加到您为端口编辑的文件中   重定向,/ etc / rc.local。

我理解在启动时创建一个启动nodejs脚本的脚本,并使该脚本作为标准/专用用户启动。
也许这个答案可以为你提供如何做的想法:https://askubuntu.com/a/20238

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

答案 1 :(得分:1)

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

您可以通过执行以下操作以另一个用户身份运行命令:

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

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

另一个选项是runuser命令。  这是一个链接http://linuxcommand.org/man_pages/runuser1.html

另一种选择是使用--user选项作为守护程序运行,但它需要一些工作。