[英]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用戶運行,但我想知道是否有人對所建議的不同方法的優缺點有任何看法:
代碼:在偵聽端口80建立后,使用setuid()從root用戶下載到非特權用戶。
使用某種代理服務器將請求重定向到端口> 1024(因此不需要節點以root身份運行)
使用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.