在设置我的Node.js网络服务器时,有一段时间我一直在指这个popular answer。
但是,这个看似重要的评论我希望提出一个问题:
如果我将我的Node.js启动脚本添加到/etc/rc.local,不会在系统启动时以root身份执行吗?这将破坏端口80重定向的目的。
如果我以root用户身份运行forever
软件包,是否会依次以root身份运行其进程?我无法在{{{}中找到有关此点的任何信息3}}。如果永远确实以root身份运行进程,那么它确实会破坏目的并且应该相应地更新答案。
答案 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选项作为守护程序运行,但它需要一些工作。