最近(可能是由于升级,而不是由于重启),我的系统不再允许我 ping 其他主机,尽管 root 可以正常执行此操作。它提供了一条有用的错误消息,但对我来说还不够:
$ ping 1.1.1.1
ping: socktype: SOCK_RAW
ping: socket: Operation not permitted
ping: => missing cap_net_raw+p capability or setuid?
$ sudo ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=31.9 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=59 time=28.6 ms
^C
--- 1.1.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 28.552/30.231/31.911/1.679 ms
$ ping -V
ping from iputils 20240905
libcap: yes, IDN: yes, NLS: no, error.h: yes, getrandom(): yes, __fpending(): yes
我该如何修复这个问题?
问题就在错误消息中,但解决方案却不是。我不得不进行一些搜索,以找到重新允许普通用户使用 ping 所需的命令。
错误“缺少 cap_net_raw+p 功能或 setuid”表明有两种解决方案:新的“文件功能”方法(参见
man setcap
)和旧setuid
方法,后者是我一直试图避免的大问题。要设置该文件功能,只需运行
sudo setcap cap_net_raw+p /usr/bin/ping