Ant*_*ton 12 security setuid capabilities
据我所知,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
$
Run Code Online (Sandbox Code Playgroud)
ping 是否需要在 Fedora 上打开原始套接字?还是有另一种方法可以授予它打开原始套接字的权限?
roa*_*ima 14
我认为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
标志创建套接字以标识它将用于原始 ICMP
int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)
Run Code Online (Sandbox Code Playgroud)
从Fedora 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1618 次 |
最近记录: |