私が知る限り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ソケットを作成できます。
相互参照の詳細
これシステムファイル書いた、
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)