2017-03-21 26 views
-3

有一段時間我在設置我的Node.js Web服務器時一直指這個popular answer具有超級用戶權限的永久模塊是否還具有超級用戶權限的其他進程?

然而,有此一說我想提出有關問題看似重要的評論:

如果添加我的Node.js啓動腳本到/etc/rc.local,那會不會執行作爲根系統啓動?這將破壞端口80重定向的目的。

如果我運行forever包爲根,永遠不會反過來也運行其流程爲根?我在npm documentation找不到關於這一點的任何信息。如果永遠以root身份運行進程,永遠也是根源,那麼它確實打敗了目的,並且應該相應地更新答案。

回答

5

這裏真正的問題是如何在啓動時以普通用戶身份啓動nodejs腳本?,因爲你真的不要想以root身份啓動你的服務器,主要是出於安全原因。

我不認爲你會在npm文檔中發現任何有趣的建議,因爲這與npm沒有多大關係。如果你開始你的Node.js腳本的/etc/rc.local它將作爲 root身份運行

你引用註釋,由所提到的回答筆者的迴應是相當清楚的。但是,安全最佳實踐是永不運行服務器 根

不要以root身份啓動pm2。
如果其他進程在pm2啓動,除特殊處理外,還會以root身份啓動。

當我讀到

添加您的Node.js啓動腳本給你端口重定向 ,/etc/rc.local中編輯的文件。

我知道在啓動時創建一個啓動nodejs腳本的腳本,並使該腳本以標準/專用用戶的身份啓動它。
也許這個答案可以給你如何做到這一點的想法:https://askubuntu.com/a/20238

總之,答案還是有用的,並沒有被更新爲這種解決方案實際上是很大的一個普通用戶到達一個端口(因爲第一個1024端口僅限於linux上的root用戶)

+0

如果我希望滿足以下條件:*如果從/etc/rc.local啓動node.js腳本,它將以root身份運行。但是,安全最佳實踐是永遠不會以root身份運行服務器*,那麼聽起來像我需要找到一種方法來以非root用戶身份啓動我的Node.js啓動腳本,但讓root用戶從文件中啓動命令'的/ etc/rc.local'。這就說得通了。 – ThisClark

+0

您的問題存在的問題是,通過執行不應以root身份「永遠」執行的任務,開始構成安全風險。 – Gi1ber7

+1

@ Gi1ber7如果root可以安全地以不同用戶的身份運行進程而不需要提高權限,那麼該進程將不具有root權限,並且可以避免問題。 – ThisClark

1

他並不是建議你以root身份運行forever包。只有你設置重定向爲根。一旦80被重定向到3000(或任何端口),您可以像任何用戶一樣使用您的應用程序監聽端口3000來運行節點。

您可以像下面這樣執行另一個用戶的命令:

su <user name> -c '<your command>' 

這是一個帶密碼把這個腳本中的一個簡單的方法:https://coderwall.com/p/0wgrwq/run-su-with-password-command-line-argument

另一種選擇是runuser命令。 這是鏈接http://linuxcommand.org/man_pages/runuser1.html

另一種選擇是使用--user選項作爲守護進程運行,但它需要一些工作。

+0

不過,我認爲風險大於收益。 – Gi1ber7

+0

@ Gi1ber7,您希望避免永久運行的原因或其他應用程序,因爲您不希望他們訪問敏感資源。您可以通過以另一個用戶身份運行該進程來完成該任務我沒有看到風險。你能詳細說明嗎? – Sanjeev

相關問題