Linux
允許使用者讓監聽低於 1024 的埠
我需要允許使用者(不同於 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