Recentemente (provavelmente devido a uma atualização, mas não devido a uma reinicialização), meu sistema parou de me deixar fazer ping em outros hosts, embora o root possa fazer isso muito bem. Ele fornece uma mensagem de erro informativa, mas não foi informativa o suficiente para mim:
$ 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
Como posso corrigir isso?
O problema estava bem ali na mensagem de erro, embora a solução não estivesse. Tive que fazer uma pequena pesquisa para encontrar o comando necessário para reativar o uso de ping por usuários comuns.
O erro "cap_net_raw+p capacity or setuid ausente" está dizendo que há duas soluções: o novo método "file capabilities" (veja
man setcap
) e osetuid
método antigo, que é o grande problema que eu estava tentando evitar.Para definir a capacidade desse arquivo, basta executar
sudo setcap cap_net_raw+p /usr/bin/ping