Nginx
為什麼 nginx 以 root 身份啟動程序?
我已經安裝了 nginx 伺服器。我剛剛檢查了監聽埠並看到了以下內容:
$ sudo lsof -nP -i | grep LISTEN sshd 614 root 3u IPv4 7712 0t0 TCP *:22 (LISTEN) nginx 822 root 7u IPv4 8745 0t0 TCP *:80 (LISTEN) nginx 827 www-data 7u IPv4 8745 0t0 TCP *:80 (LISTEN) nginx 828 www-data 7u IPv4 8745 0t0 TCP *:80 (LISTEN) nginx 829 www-data 7u IPv4 8745 0t0 TCP *:80 (LISTEN) nginx 830 www-data 7u IPv4 8745 0t0 TCP *:80 (LISTEN) . . .
我只是感興趣為什麼有四個 nginx 程序作為“www-data”使用者執行,一個作為“root 使用者”執行?
您注意到的程序是主程序,即啟動所有其他 nginx 程序的程序。此過程由啟動 nginx 的 init 腳本啟動。此程序以 root 身份執行的原因僅僅是因為您以 root 身份啟動它!您可以以另一個使用者身份啟動它,但您必須確保該使用者可以使用 nginx 所需的所有資源。這通常至少是 /var/log/nginx 和 /var/run/ 下的 pid 文件。
最重要的是; 只有 root 程序可以監聽 1024 以下的埠。網路伺服器通常在埠 80 和/或 443 上執行。這意味著它需要以 root 身份啟動。
總之,由 root 執行的主程序是完全正常的,並且在大多數情況下是正常執行所必需的。
編輯:以 root 身份執行任何東西都會帶來隱含的安全風險。通常,此類軟體的開發人員對攻擊向量有很多了解,並非常注意盡可能少地以 root 身份執行。最後,您只需要相信該軟體的質量很好。
如果您仍然感到不安,有一種方法可以以另一個使用者身份執行 nginx,並且仍然使用 1024 以下的埠。您可以使用 iptables 將埠 80 上的所有傳入流量重定向到另一個埠,例如 8080,並讓 nginx 在該埠上偵聽。