在 Linux(Ubuntu)中使用埠 80 執行 Node.js 的最佳實踐


我們知道,大多數情況下,我們希望我們的 Node 應用程式監聽埠 80。雖然這是一種廣泛使用的技術,並且很多時候我們不需要除了在專案配置中簡單地提及埠 80 之外的任何其他操作。但實際問題在於,如今許多作業系統都需要 root 許可權才能實現這一點(例如,OS X、BSD)。

一種解決方法是確保我們以超級使用者身份啟動應用程式。

命令

sudo node server.js

雖然這實際上可以在很大程度上解決問題,但這種方法也存在其漏洞。此步驟涉及許多潛在風險。一個簡單的例子是,如果有人控制了我們的應用程式,然後開始對其進行惡意操作。

因此,通常不建議在整個會話期間以 root 身份執行應用程式。

另一種更好的方法是將當前執行我們程序的使用者帳戶降級到安全性較低的使用者帳戶,例如我們的普通帳戶。

為了做到這一點,我們需要全域性程序上的兩種方法來處理從安全使用者到安全性較低使用者的程序轉移。

這兩個全域性程序是:

  • setgid()

  • setuid()

我們可以建立一個簡單的函式來呼叫上述兩個函式,這將確保埠 80 保持受保護,同時仍防止我們以 root 使用者身份提供請求。

請考慮以下所示的函式:

function drop_root_priviliges(){
   process.setgid(‘unknown’)
   process.setuid(‘unknown’)
}

下面顯示了上述函式的完整工作示例。

const process = require('process');
const http = require('http');
var server = http.createServer(function(req, res) {
   res.write("Success!");
   res.end();
});

server.listen(80, null, null, function() {
   console.log('User ID is:',process.getuid()+', Group ID:',process.getgid());
   drop_root_priviliges();
   console.log('User ID is:',process.getuid()+', Group ID:',process.getgid());
});

更新於:2021年7月29日

620 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.