不需要 root 权限执行 ping

三种解决方案:setuid(不推荐)、capabilities、ping_group_range

ping_group_range

ping_group_range 的取值范围是 linux 用户组 ID 的范围。

sysctl net.ipv4.ping_group_range 查看值默认应该是 1 0,代表禁用。

sudo sysctl -w net.ipv4.ping_group_range='1000 1000' 比如这么设置就是只允许 Group ID 为 1000 的执行 ping。

capabilities

which ping 查看 ping 的路径,可能是 /usr/bin/ping 或者 /bin/ping

sudo setcap cap_net_raw+ep /usr/bin/ping 设置 ping 有 cap_net_raw 权限。

getcap /usr/bin/ping 查看权限

setuid

使用 setuid 存在着安全隐患,它直接把 root 用户的全部权限给了使用者,但我们运行 ping 其实只需要 cap_net_raw 权限。