netns内でpingを実行するにはsudo(Fedora)が必要です。

netns内でpingを実行するにはsudo(Fedora)が必要です。

Fedora 32を使用して、次のようにネットワークネームスペース内でシェルを起動しました。

sudo ip netns add net0
sudo ip netns exec net0 sudo -u fred /usr/bin/bash

pingを有効にするようにネットワークリンクとファイアウォールを設定しました。 root以外のユーザーとしてpingを試みると、次のような結果が表示されます。

$ ping 8.8.8.8                       
ping: socket: Operation not permitted

しかし、sudoを使ってpingをしようとするとうまくいきます。なぜ?

答え1

関連質問を見るsetuidと機能なしでFedoraでPingをどのように機能しますか?

とリンク

https://lwn.net/Articles/422330/

https://fedoraproject.org/wiki/Changes/EnableSysctlPingGroupRange

セキュリティ上の理由から、Fedoraはroot以外のユーザーがpingを使用できるようにsetuid / capabilityを使用しません。代わりに、管理者がgidのpingを有効にできる最新のカーネル機能を使用してください。

通常のシェルでは:

$ sudo sysctl net.ipv4.ping_group_range      
net.ipv4.ping_group_range = 0   2147483647

しかし、サイバー空間内の新しいシェルでは:

$ sudo sysctl net.ipv4.ping_group_range
net.ipv4.ping_group_range = 1   0

したがって、新しいnetnsを作成するときにroot以外のユーザーがfedoraでpingを使用できるようにするメカニズムは、デフォルトで無効になっています。この問題を解決するには、netnsでsysctl値を設定するだけです。

$ sudo sysctl net.ipv4.ping_group_range="0 2147483647"
net.ipv4.ping_group_range = 0 2147483647
$ ping 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=1 ttl=40 time=20 ms

関連情報