如果没有 setuid 和功能,Ping 在 Fedora 上如何工作?

如果没有 setuid 和功能,Ping 在 Fedora 上如何工作?

据我所知,ping需要创建一个原始套接字(需要 root 访问权限或cap_net_raw功能)。

据我了解,近年来的趋势是删除设定值二进制文件并将其替换为能力

然而,当我查看pingFedora 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 上打开原始套接字?或者有另一种方法可以授予它打开原始套接字的权限吗?

答案1

我认为https://fedoraproject.org/wiki/Changes/EnableSysctlPingGroupRange回答你的问题:

启用Linux内核的net.ipv4.ping_group_range参数以覆盖所有组。这将允许操作系统上的所有用户创建 ICMP Echo 套接字,而无需使用 setuid 二进制文件或具有 CAP_NET_ADMIN 和 CAP_NET_RAW 文件功能。

交叉参考细节

系统文件写道,

ping_group_range- 2 个整数

将数据报套接字限制ICMP_PROTO为组范围内的用户。默认值为“ 1 0”,这意味着没有人(甚至 root 也不能​​)创建 ping 套接字。将其设置为“ 100 100”将向单个组授予权限。 “ 0 4294967295”将为世界启用它,“ 100 4294967295”将为用户启用它,但不为守护进程启用它。

一个年纪较大的代码示例演示了此功能的使用,特别是显示了使用标志创建套接字以IPPROTO_ICMP标识它将用于原始 ICMP

int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)

答案2

软呢帽 31内核参数net.ipv4.ping_group_range 已设置为覆盖所有组。

这将允许操作系统上的所有用户创建ICMP Echo套接字,而无需使用setuid二进制文件或具有CAP_NET_ADMIN文件CAP_NET_RAW功能。

sysctl net.ipv4.ping_group_range

net.ipv4.ping_group_range = 0   2147483647

相关内容