Я root.
Пингую 127.0.0.1 и получаю ошибку;
root@sam-PC:~# ping 127.0.0.1
socket: Permission denied
root@sam-PC:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:00:ff:ff:00:00
inet addr:192.168.100.104 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::200:ffff:feff:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2220 (2.2 KB) TX bytes:524 (524.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:40 errors:0 dropped:0 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3160 (3.1 KB) TX bytes:3160 (3.1 KB)
root@sam-PC:~# ping 192.168.100.100
socket: Permission denied
кто знает почему?
решение1
Для решения этой проблемы нам следует добавить следующие строки /etc/group
:
inet:x:3003:root
net_raw:x:3004:root
решение2
Базовый пинг использует sock_raw. Чтобы создать такой сокет, у вас должны быть права root.
int main(void) {
rawsock = socket(AF_INET, SOCK_RAW, protocol->p_proto);
if(rawsock < 0){
perror("socket");
return -1;
}
}
Если владелец пинга не root, ошибка не будет исправлена. Использование механизма возможностей Linux не может решить проблему.
решение3
OP выполняет ping как root, так что это не ответ им, а скорее расширенный комментарий к ответу от @leesagacious. В моей ситуации, на CentOS Stream 8, так что вдвойне неуместно для askubuntu... если это не происходит и там, механизм возможностей Linux действительно появляется в ответе, респектhttps://superuser.com/a/1616749/17633:
[manager@smu-centos8-daily-test ~]$ ping -c 1 8.8.8.8
ping: socket: Operation not permitted
[manager@smu-centos8-daily-test ~]$ getcap /usr/bin/ping
[manager@smu-centos8-daily-test ~]$ sudo setcap cap_net_raw+p /usr/bin/ping
[manager@smu-centos8-daily-test ~]$ ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=4.57 ms
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 4.567/4.567/4.567/0.000 ms
[manager@smu-centos8-daily-test ~]$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+p
[manager@smu-centos8-daily-test ~]$ sudo setcap -r /usr/bin/ping
[manager@smu-centos8-daily-test ~]$ getcap /usr/bin/ping
[manager@smu-centos8-daily-test ~]$ ping -c 1 8.8.8.8
ping: socket: Operation not permitted
[manager@smu-centos8-daily-test ~]$
Я не думаю, чтовладелецping, в отличие от uid процесса, выполняющего ping, был бы важен, за исключением тех дней, когда ping имел setuid.