为什么 ping 需要 setuid 位?

Old*_*zer 10 file-permissions setuid raspberry-pi

在 Raspberry Pi 的 Jessie 版本中,ping需要setuid设置该位。这样做的理由是什么?

use*_*686 17

ping 需要生成和接收 ICMP 数据包,通常是使用“原始套接字”完成的——该功能仅限于 root (cap_net_raw),因为它也可能被滥用来嗅探和破坏系统上的其他流量。

许多发行版现在只提供 ping cap_net_raw权限(参见capabilities(7)getcap(8)手册页)而不是完整的 setuid root。然而,这需要内核和文件系统都支持扩展属性(xattrs),并且一些“最小”系统禁用这些。

此外,最近添加了一种特殊的“ICMP”套接字类型,它只允许发送 ICMP Echo 消息,而无需任何额外权限。ping 命令尚未更新。

  • @ggg:但确实如此。尝试`getfattr --dump --match=.* /sbin/ping`。 (2认同)