Systemd

不推薦使用 setcap 嗎?

  • December 14, 2018

我正在使用systemd單元文件以非 root 使用者身份啟動網路伺服器。

listen tcp :80: bind: permission denied即使我已經跑了,我也得到了

setcap cap_net_bind_service=+ep

在執行檔上。

在網際網路上的一個範例單元文件中,我發現

CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE

在單元文件中使用。所以我嘗試了一下,突然應用程序可以綁定埠 80。

那告訴我什麼?setcap是舊的/不推薦的/忽略的?僅由systemd還是由 Linux 提供?

可以正確地說,通常 systemd 不能使用管理的文件功能,setcap而是需要您將它們配置為服務單元的一部分。

所以它並不像setcap完全棄用……(在 systemd 啟動的服務之外可能有它的有效用途。)但它至少不適用於 systemd 服務。

實際上,文件能力(setcap由引入了功能來解決這些問題中的許多問題,並且它是新系統所採用的(這裡包括 systemd,如您所見,您正在設置AmbientCapabilities=您的服務以管理能夠綁定到低埠。)

能力的主題相當複雜……對於這個問題的更溫和的介紹,您可能需要查看LWN 的“繼承能力”。有關完整的詳細資訊(包括功能集上的一些代數符號),請參閱功能 (7)手冊頁。

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