在 Raspberry Pi 的 Jessie 版本中,ping
需要setuid
设置位。这样做的理由是什么?
答案1
ping 需要生成和接收 ICMP 数据包,通常使用“原始套接字”来完成 - 该功能仅限于 root(cap_net_raw)因为它也可能被滥用来嗅探和破坏系统上的其他流量。
现在许多发行版只给 pingcap_net_raw特权(请参阅capabilities(7)
手册getcap(8)
页)而不是完整的 setuid root。但是,这需要内核和文件系统都支持扩展属性 (xattrs),而一些“最小”系统会禁用这些属性。
此外,最近有一个特别的“ICMP”套接字类型已添加,仅允许发送 ICMP Echo 消息,无需任何额外权限。不过 ping 命令尚未更新。