簡體   English   中英

如何以非root用戶身份運行node.js?

[英]How to run node.js as non-root user?

我正在運行一個node.js服務器,它將在端口80和其他服務器上提供請求。 顯然,這需要以root身份運行應用程序(在Linux上)。

以這篇文章( http://syskall.com/dont-run-node-dot-js-as-root )為例,很明顯有一些簡單的方法可以讓節點作為非root用戶運行,但我想知道是否有人對所建議的不同方法的優缺點有任何看法:

  1. 代碼:在偵聽端口80建立后,使用setuid()從root用戶下載到非特權用戶。

  2. 使用某種代理服務器將請求重定向到端口> 1024(因此不需要節點以root身份運行)

  3. 使用IP表轉發到另一個端口(同上節點不會以root身份運行)

謝謝

選項1要求您以root身份啟動節點服務器。 不理想。

選項2為每個處理的請求增加了開銷,並為堆棧添加了另一個故障點。

選項3是最簡單,最有效的方法。

要實現選項3,請將以下內容添加到系統初始化腳本中。 (在像AWS這樣的基於RedHat的系統上的/etc/rc.d/rc.local )。

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

這將把請求從端口80重定向到端口3000。

(我沒有足夠的聲譽來添加Matt Browne的評論,所以我把它寫成答案。隨意編輯。)

重啟后自動加載iptables規則的方法比Matt Browne鏈接中描述的更簡單:可以使用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 (德語))

我喜歡這種解決方法的簡單性:

sudo setcap 'cap_net_bind_service=+ep' `which node`

它也適用於nodejs btw以外的程序。

基本上作為第二個參數,您鍵入程序可執行文件的路徑(如Ubuntu上的/usr/bin/nodejs ),在上述情況下which node應該動態提供它,從而使這個工作獨立於Linux發行版。

請注意,當您升級nodejs或由於某些其他原因而覆蓋可執行文件時,您將不得不再次執行相同的命令。

資料來源:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM