Security
在沒有 setuid 和功能的情況下,ping 如何在 Fedora 上工作?
據我所知,
ping
需要創建一個原始套接字(需要 root 訪問權限或cap_net_raw
功能)。據我了解,過去幾年的趨勢是刪除setuid二進製文件並用功能替換它們。
但是,當我查看
ping
Fedora 32 上的二進製文件時,它看起來沒有任何內容:$ ls -la $(which ping) -rwxr-xr-x. 1 root root 82960 May 18 10:26 /usr/bin/ping $ sudo getcap -v $(which ping) /usr/bin/ping $
ping 是否需要在 Fedora 上打開原始套接字?還是有另一種方法可以授予它打開原始套接字的權限?
我認為https://fedoraproject.org/wiki/Changes/EnableSysctlPingGroupRange回答了您的問題:
啟用 Linux 核心的 net.ipv4.ping_group_range 參數以覆蓋所有組。這將允許作業系統上的所有使用者在不使用 setuid 二進製文件或具有 CAP_NET_ADMIN 和 CAP_NET_RAW 文件功能的情況下創建 ICMP Echo 套接字。
交叉參考細節
sysctl 文件寫道,
ping_group_range - 2 個整數
將數據報套接字限制
ICMP_PROTO
為組範圍內的使用者。預設值為“1 0
”,這意味著沒有人(甚至不是 root)可以創建 ping 套接字。將其設置為“100 100
”將授予單個組的權限。"0 4294967295
" 將為世界啟用它, "100 4294967295
" 將為使用者啟用它,但不為守護程序啟用。一個較舊的程式碼範例展示了此功能的使用,特別是顯示使用標誌創建的套接字
IPPROTO_ICMP
以標識它將用於原始 ICMPint sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)