我正在运行一个node.js服务器,它将在端口80等端口上为请求提供服务。显然,这需要应用程序以root身份运行(在Linux上)。
以这篇文章(http://syskall.com/dont-run-node-dot-js-as-root)为例,很明显有一些简单的方法可以让node以非根用户的身份运行,但我想知道是否有人对所建议的不同方法的优缺点有看法:
setuid代码:侦听端口80 is established.
谢谢
发布于 2013-07-04 18:22:26
选项1要求您以root身份启动节点服务器。不是很理想。
选项2增加了每个已处理请求的开销,并将另一个故障点添加到堆栈中。
选项3是最简单和最有效的方法。
要实现选项3,请将以下内容添加到系统初始化脚本中。(亚马逊网络服务等基于RedHat的系统上的/etc/rc.d/rc.local
)。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
这会将请求从端口80重定向到端口3000。
发布于 2014-02-14 23:13:41
(我没有足够的名气来添加对Matt Browne的评论,所以我写这篇文章作为答案。请随意编辑。)
与Matt Browne的链接中描述的方法相比,有一种更简单的方法可以在重新启动后自动加载iptables规则:可以使用apt-get从存储库中安装iptables-persistent:
apt-get install iptables-persistent
规则仍然需要手动保存,如下所示:
IPv4:
iptables-save > /etc/iptables/rules.v4
IPv6:
iptables-save > /etc/iptables/rules.v6
(来源:http://www.thomas-krenn.com/de/wiki/Iptables_Firewall_Regeln_dauerhaft_speichern (德语))
发布于 2017-07-02 02:22:18
我喜欢这种解决方法的简单性:
sudo setcap 'cap_net_bind_service=+ep' `which node`
它也适用于nodejs btw以外的程序。
基本上,作为第二个参数,你输入程序可执行文件的路径(就像Ubuntu上的/usr/bin/nodejs
一样),在上面的例子中,which node
应该动态地提供它,从而使这项工作独立于Linux发行版。
但是要注意,当您升级nodejs或可执行文件由于其他原因而被覆盖时,您将不得不再次执行相同的命令。
资料来源:
https://stackoverflow.com/questions/17467696
复制相似问题