在 netns 内 ping 需要 sudo (Fedora)

在 netns 内 ping 需要 sudo (Fedora)

使用 fedora 32,我在网络命名空间内启动了一个 shell,使用

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 和功能,Ping 在 Fedora 上如何工作?

和链接

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

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

出于安全原因,Fedora 不再使用 setuid/capability 来允许非 root 用户使用 ping。相反,他们使用最新的内核功能,允许管理员启用 gid 的 ping 使用。

在普通的 shell 中:

$ 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

相关内容