Security

為什麼 Web 伺服器傳統上以超級使用者身份啟動?

  • August 17, 2018

考慮到未來的 Web 伺服器設置,令我震驚的是,出於某種原因,Web 伺服器通常以 root 身份啟動,然後放棄setuid工作程序的某些權限 ()。此外,還經常chroot涉及,這並不完全是一種安全措施。

我想知道的是,為什麼 Web 伺服器(我已經管理了從 Apache、lighttpd 到 nginx 的所有東西)不能在 Linux 上使用功能係統(capabilities(7)),例如CAP_NET_BIND_SERVICE,而只是以非 root 使用者身份啟動?…這種方式仍然在偵聽低於 1024 的特權埠。

或者更好,我認為他們中的大多數人都可以,但為什麼這不是常見的做法呢?為什麼不 …

  • 在正在執行的二進製文件上使用setcap(8)with ?CAP_NET_BIND_SERVICE
  • 設置日誌文件夾以允許(非root)使用者在那裡寫入
  • …,如果您覺得有chroot幫助,請使用chrootlxc“監禁”網路伺服器?

除了(工人)子程序可能會殺死我可以想出的父程序之外,沒有什麼比直接從root.

那麼,為什麼他們傳統上以 root 身份啟動,而之後一切都已完成以消除隨之而來的隱含安全問題?

儘管 POSIX 有一個我認為包括 CAP_NET_BIND_SERVICE 的功能標準,但這些不是一致性所必需的,並且在某些方面可能與例如 linux 上的實現不兼容。

由於像 apache 這樣的網路伺服器不是只為一個平台編寫的,因此使用 root 權限是最便攜的方法。我想它可以專門在 linux 和 BSD(或檢測到支持的任何地方)上執行此操作,但這意味著行為會因平台而異,等等。

在我看來,您可以配置您的系統,以便可以以這種方式使用任何 Web 伺服器;這裡有一些關於這個 WRT apache 的(可能是笨拙的)建議:NonRootPortBinding

那麼,為什麼他們傳統上以 root 身份啟動,而之後一切都已完成以消除隨之而來的隱含安全問題?

它們以 root 身份啟動,因為它們通常需要訪問特權埠,而傳統上這是唯一的方法。他們後來降級的原因是因為他們隨後不需要特權,並且限制了伺服器常用的無數第三方附加軟體帶來的潛在損害。

這並不是不合理的,因為特權活動非常有限,並且按照慣例,許多其他系統守護程序會連續執行 root,包括其他 inet 守護程序(例如,sshd)。

請記住,如果伺服器被打包以便它可以作為具有 CAP_NET_BIND_SERVICE 的非特權使用者執行,這將允許任何非特權使用者啟動 HTTP(S) 服務,這可能是一個更大的風險。

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