핑 소켓: 권한이 거부되었습니다.

핑 소켓: 권한이 거부되었습니다.

나는 루트입니다.
ping 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를 사용하고 있습니다. 이러한 소켓을 생성하려면 루트 권한이 있어야 합니다.

int main(void) {
    rawsock = socket(AF_INET, SOCK_RAW, protocol->p_proto);
    if(rawsock < 0){
        perror("socket");
        return -1;
    }
}

핑의 소유자가 루트가 아닌 경우 오류가 수정되지 않습니다. Linux 기능 메커니즘을 사용해도 문제를 해결할 수 없습니다.

답변3

OP는 루트로 핑을 실행하고 있으므로 이에 대한 답변이 아니며 @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이 setuid였던 시절을 제외하고는 ping이 관련이 있습니다.

관련 정보