2011-11-29 67 views
10

我想用低特權用戶運行節點,這有可能嗎?我需要使用框架Express.js我可以使用低特權運行Node.JS嗎?

+2

定義「低特權用戶」。 –

+0

我不想用ROOT權限來監聽node.js。 – Dail

+0

是什麼讓你覺得你必須?我從不需要這樣做。 –

回答

17

是的。有很多解決方案可以做到這一點,這取決於您的確切需求。

如果要在端口80上運行節點,則可以使用nginx(不支持WebSockets)或haproxy。但也許是最快和最骯髒的是用iptables端口重定向80到您選擇的端口:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8003 
sudo iptables -t nat -L 

當你快樂,然後保存配置,並確保iptables的在開機亮起

sudo service iptables save 
sudo chkconfig iptables on 

,如果它未能自動啓動服務的NodeJS作爲非root用戶,並重新啓動它,你可以利用upstart像這樣的腳本:

#!upstart 
description "nodeapp" 
author  "you" 

start on started mountall 
stop on shutdown 

# Automatically Respawn: 
respawn 
respawn limit 99 5 

script 
    export HOME="/home/user/" 
    exec sudo -u user /usr/local/bin/node /home/user/app.js 2>&1 >> /home/user/app.log 
end script 

如果你在亞馬遜EC2安裝,或者你,說sudo: sorry, you must have a tty to run sudo一個錯誤,那麼你可以用這個替換您的exec命令:

#!upstart 
description "nodeapp" 
author  "you" 

start on started mountall 
stop on shutdown 

# Automatically Respawn: 
respawn 
respawn limit 99 5 

script 
    export HOME="/home/user/" 
    #amazon EC2 doesn’t allow sudo from script! so use su --session-command 
    exec su --session-command="/usr/local/bin/node /home/user/app.js 2>&1 >> /home/user/app.log" user & 
end script 

而且,你沒有問這個問題,但要保持它運行下去,退房monit的!這裏是a useful guide to setting up node.js with upstart and monit

+0

設置HOME實際上在這裏做了什麼? – blu

+1

根據您使用的節點的具體版本,您的目錄結構是什麼樣子,以及節點是由root還是當前用戶安裝的,答案在所有內容和任何內容之間都有所不同:)它可以告訴節點它將在哪裏運行從它可能會被完全忽略(注意,在我的示例中,當它匹配'/ home/user /'的app.js位置時,我錯誤地將'/ home/user/nodeapp'放在了'例如require()尋找模塊) – Kato

+0

真棒,感謝您的信息 – blu

相關問題