Fedora 32를 사용하여 다음을 사용하여 네트워크 네임스페이스 내에서 쉘을 시작했습니다.
sudo ip netns add net0
sudo ip netns exec net0 sudo -u fred /usr/bin/bash
ping을 활성화하도록 네트워크 링크와 방화벽을 구성했습니다. 루트가 아닌 사용자로 ping을 시도하면 다음과 같은 결과가 나타납니다.
$ ping 8.8.8.8
ping: socket: Operation not permitted
하지만 sudo를 사용하여 ping을 시도하면 작동합니다. 왜?
답변1
관련 질문 보기setuid 및 기능 없이 Fedora에서 Ping은 어떻게 작동합니까?
및 링크
https://lwn.net/Articles/422330/
https://fedoraproject.org/wiki/Changes/EnableSysctlPingGroupRange
보안상의 이유로 Fedora는 더 이상 루트가 아닌 사용자가 ping을 사용할 수 있도록 setuid/capability를 사용하지 않습니다. 대신 관리자가 gid의 ping 사용을 활성화할 수 있는 최신 커널 기능을 사용합니다.
일반 쉘에서는:
$ 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를 생성할 때 루트가 아닌 사용자가 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