setuidと機能なしでFedoraでPingをどのように機能しますか?

setuidと機能なしでFedoraでPingをどのように機能しますか?

私が知る限りping生ソケット(ルートアクセスまたはcap_net_raw機能が必要です)。

私が知っているのは、近年の傾向は排除することでした。設定値バイナリファイルに置き換えて能力

しかし、Fedora 32のバイナリを見るとping何もないようです。

$ 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
$   

pingを使用するには、Fedoraで生のソケットを開く必要がありますか?それとも、rawソケットを開く権限を与える他の方法はありますか?

ベストアンサー1

私の考えではhttps://fedoraproject.org/wiki/Changes/EnableSysctlPingGroupRangeあなたの質問に答えてください:

すべてのグループをカバーするには、Linuxカーネルのnet.ipv4.ping_group_rangeパラメータを有効にします。これにより、オペレーティングシステムのすべてのユーザーがsetuidバイナリを使用したり、CAP_NET_ADMINおよびCAP_NET_RAWファイル機能を使用せずにICMP Echoソケットを作成できます。

相互参照の詳細

  • ターゲットリリース:Fedora 31
  • 最終更新日:2019-08-13
  • トラッカーエラー:#1740809
  • リリースノートトラッカー:#376話

これシステムファイル書いた、

ping_group_range- 2つの整数

データグラムソケットをICMP_PROTOグループ全体のユーザーに制限します。デフォルトは " 1 0"です。これは、誰も(ルートも含む)pingソケットを作成できないことを意味します。これを" 100 100"に設定すると、単一のグループに権限が付与されます。 " 0 4294967295"は世界中で有効にし、" 100 4294967295"はユーザーに対して有効にしますが、デーモンに対しては有効にしません。

より古いものコード例IPPROTO_ICMPこの機能の使い方を示します。特に、生のICMPに使用されることを識別するフラグを持つソケットの生成を示します。

int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)

おすすめ記事