使用 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