回答:
pingはICMPパケットを生成および受信する必要があります。通常、これは「rawソケット」を使用して行われます。これはルート(cap_net_raw)に限定され、システム上の他のトラフィックを傍受して混乱させる可能性があるためです。
多くのディストリビューションは、完全なsetuidルートの代わりに、単にcap_net_raw権限(capabilities(7)
およびgetcap(8)
マニュアルページを参照)にpingを与えるだけです。ただし、これには、拡張属性(xattrs)をサポートするためにカーネルとファイルシステムの両方が必要であり、一部の「最小」システムはそれらを無効にします。
また、最近、特別な「ICMP」ソケットタイプが追加され、追加の権限なしでICMPエコーメッセージのみを送信できるようになりました。ただし、pingコマンドはまだ更新されていません。
getfattr --dump --match=.* /sbin/ping
。