Linux

允許使用者讓監聽低於 1024 的埠

  • April 27, 2021

我需要允許使用者(不同於 root)執行在埠 80 上偵聽的伺服器。

有沒有辦法做到這一點?

setcap 'cap_net_bind_service=+ep' /path/to/program

這將適用於特定流程。但是要允許特定使用者綁定到低於 1024 的埠,您必須將他添加到 sudoers。

看看這個討論了解更多。

(其中一些方法已在其他答案中提到;我以粗略的偏好順序給出了幾種可能的選擇。)

您可以將低埠重定向到高埠並偵聽高埠。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 1080

您可以以 root 身份啟動伺服器,並在它開始偵聽特權埠後放棄特權。最好不要自己編寫程式碼,而是從為您完成工作的包裝器啟動您的伺服器。如果您的伺服器為每個連接啟動一個實例,請從inetd(或類似程序,例如xinetd)啟動它。對於inetd,在 中使用這樣的行/etc/inetd.conf

http  stream  tcp  nowait  username:groupname  /path/to/server/executable  argv[0] argv[1]…

如果您的伺服器在單個實例中偵聽,請從諸如authbind. 創建一個空文件/etc/authbind/byport/80並使其對執行伺服器的使用者可執行;或 create /etc/authbind/byuid/1234,其中 1234 是執行伺服器的 UID,包含行0.0.0.0/0:80,80.

如果您的伺服器執行檔儲存在支持功能的文件系統上,您可以為其賦予功能。請注意,功能仍然相對較新,並且仍然存在一些問題cap_net_bind_service

setcap cap_net_bind_service=ep /path/to/server/executable

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