1024以下的埠
免責聲明:我知道如何執行通過使用
privbind
或某些iptables
REDIRECT 偵聽埠 <1024 的守護程序。或者更籠統地說,如何使守護程序在通常不在那裡執行的特權埠上可用。這個問題本身就是一個元問題。
問題:為什麼埠<1024 通常保留給root 使用者。從實用的角度來看,我希望能夠只告訴守護程序在哪個埠上監聽,而不必關心 root 權限。我想得越多,就越得出這樣的結論,即這種“安全”只是歷史上的膨脹。
一個
sysctl -w net.ipv[46].conf.port.80=www-data
類似於(類似的東西,我希望這個想法是通過的)的系統將是我真正想要的。這樣就可以保持“目前的安全級別”,但仍然允許任意使用者監聽較低的埠。Linux 功能 (
CAP_NET_BIND_SERVICE
) 是朝著正確方向邁出的第一步——至少在我看來是這樣——但考慮到我已經習慣了埠 <1024 的特殊性,我猶豫是否要完全放棄該限制。我只是看不出一個客觀的原因。有人請賜教:)
注意:是的,我讀了一些類似的標題,但我對“你不應該這樣做”不太滿意。必須跳過箍讓 apache 在埠 80 上偵聽,它所做的只是啟動
root
然後放棄特權是不必要的(至少我認為)。為什麼我不能讓它以普通使用者的身份執行並完成它的工作。這樣,權限提升錯誤甚至不允許 root 權限。所有有的特權www-data
(或選擇的發行版上的任何使用者)
據我所知,這確實主要只是一個歷史慣例;這個想法是,當訪問 1024 下的埠時,您可以確保您訪問的是伺服器管理員配置為在伺服器上執行的任何內容。當伺服器很少而龐大並且您需要一種簡單的方法來通過這種基本方式進行身份驗證或至少判斷服務的可靠性時,這更有意義。
順便說一句,你可能會發現Capabilities做你想做的事。有關替代方案的更多資訊,請參閱此 SO 問題,但這裡是範例使用:
setcap 'cap_net_bind_service=+ep' /path/to/program