node.js - 如何以非 root 用户身份运行 node.js?

标签 node.js root iptables

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

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

  1. 代码:在80端口监听建立后,使用setuid()从root下拉到非特权用户。

  2. 使用某种代理服务器将请求重定向到 >1024 端口(因此不需要 Node 以 root 身份运行)

  3. 使用 IP 表转发到另一个端口(同上 Node 不会以 root 身份运行)

谢谢

最佳答案

选项 1 要求您以 root 身份启动 Node 服务器。不理想。

选项 2 会为每个处理的请求增加开销,并向您的堆栈添加另一个故障点。

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

要实现选项 3,请将以下内容添加到您的系统初始化脚本中。 (/etc/rc.d/rc.local 在基于 RedHat 的系统上,如 AWS)。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

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

关于node.js - 如何以非 root 用户身份运行 node.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17467696/

相关文章:

javascript - 不断将数据(blob)加载到对node.js的POST请求中

.net - 从代码隐藏(.net)获取网站项目的根文件夹

mysql - 无法以 root 身份登录 mysql,即使在使用 --skip-grant-tables 重新启动后也是如此

linux - Centos - 使用 key 进行 root 访问,也强制询问密码

centos - 通过配置iptables创建jumphost的问题

javascript - 检查字符串是否匹配

node.js - Ember.js、Express.js 和 Node.js 的 Assets 管道?

docker - 无法在kubernetes中保留KUBE-FORWARD自定义iptables规则

php - 有什么方法可以调整 MediaWiki 源以更快地拒绝匿名请求?

node.js - System.import 异步模块加载与脚本标签同步加载冲突