首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何以非根用户身份运行node.js?

如何以非根用户身份运行node.js?
EN

Stack Overflow用户
提问于 2013-07-04 18:15:31
回答 3查看 12.4K关注 0票数 17

我正在运行一个node.js服务器,它将在端口80等端口上为请求提供服务。显然,这需要应用程序以root身份运行(在Linux上)。

以这篇文章(http://syskall.com/dont-run-node-dot-js-as-root)为例,很明显有一些简单的方法可以让node以非根用户的身份运行,但我想知道是否有人对所建议的不同方法的优缺点有看法:

setuid代码:侦听端口80 is established.

  • using后,使用
  1. ()从根用户下拉到非特权用户。
  2. 使用IP表将请求重定向到端口>1024 (因此不需要节点以根用户身份运行)的端口(同上,节点不以根用户身份运行)

谢谢

EN

回答 3

Stack Overflow用户

发布于 2013-07-04 18:22:26

选项1要求您以root身份启动节点服务器。不是很理想。

选项2增加了每个已处理请求的开销,并将另一个故障点添加到堆栈中。

选项3是最简单和最有效的方法。

要实现选项3,请将以下内容添加到系统初始化脚本中。(亚马逊网络服务等基于RedHat的系统上的/etc/rc.d/rc.local)。

代码语言:javascript
复制
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

这会将请求从端口80重定向到端口3000。

票数 22
EN

Stack Overflow用户

发布于 2014-02-14 23:13:41

(我没有足够的名气来添加对Matt Browne的评论,所以我写这篇文章作为答案。请随意编辑。)

与Matt Browne的链接中描述的方法相比,有一种更简单的方法可以在重新启动后自动加载iptables规则:可以使用apt-get从存储库中安装iptables-persistent:

代码语言:javascript
复制
apt-get install iptables-persistent

规则仍然需要手动保存,如下所示:

IPv4:

代码语言:javascript
复制
iptables-save > /etc/iptables/rules.v4

IPv6:

代码语言:javascript
复制
iptables-save > /etc/iptables/rules.v6

(来源:http://www.thomas-krenn.com/de/wiki/Iptables_Firewall_Regeln_dauerhaft_speichern (德语))

票数 5
EN

Stack Overflow用户

发布于 2017-07-02 02:22:18

我喜欢这种解决方法的简单性:

代码语言:javascript
复制
sudo setcap 'cap_net_bind_service=+ep' `which node`

它也适用于nodejs btw以外的程序。

基本上,作为第二个参数,你输入程序可执行文件的路径(就像Ubuntu上的/usr/bin/nodejs一样),在上面的例子中,which node应该动态地提供它,从而使这项工作独立于Linux发行版。

但是要注意,当您升级nodejs或可执行文件由于其他原因而被覆盖时,您将不得不再次执行相同的命令。

资料来源:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17467696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档