Nginx

為什麼 nginx 以 root 身份啟動程序?

  • June 3, 2014

我已經安裝了 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 在該埠上偵聽。

引用自:https://unix.stackexchange.com/questions/134301