내가 아는 한 ping
,원시 소켓(루트 액세스 또는 cap_net_raw
기능이 필요합니다).
제가 알기로는 최근 몇 년간의 추세는 제거하는 것이었습니다.설정값바이너리 파일로 교체하고능력.
그러나 Fedora 32의 바이너리를 보면 ping
아무 것도 없는 것 같습니다.
$ ls -la $(which ping)
-rwxr-xr-x. 1 root root 82960 May 18 10:26 /usr/bin/ping
$ sudo getcap -v $(which ping)
/usr/bin/ping
$
핑을 사용하려면 Fedora에서 원시 소켓을 열어야 합니까? 아니면 원시 소켓을 열 수 있는 권한을 부여하는 다른 방법이 있습니까?
답변1
제 생각에는https://fedoraproject.org/wiki/Changes/EnableSysctlPingGroupRange귀하의 질문에 대답하십시오 :
모든 그룹을 포괄하려면 Linux 커널의 net.ipv4.ping_group_range 매개변수를 활성화합니다. 이를 통해 운영 체제의 모든 사용자는 setuid 바이너리를 사용하거나 CAP_NET_ADMIN 및 CAP_NET_RAW 파일 기능을 사용하지 않고도 ICMP Echo 소켓을 생성할 수 있습니다.
상호 참조 세부정보
이것시스템 파일썼다,
ping_group_range- 2개의 정수
데이터그램 소켓을
ICMP_PROTO
그룹 전체 사용자로 제한합니다. 기본값은 "1 0
"입니다. 이는 누구도(루트도 포함) 핑 소켓을 생성할 수 없음을 의미합니다. 이를 "100 100
"로 설정하면 단일 그룹에 권한이 부여됩니다. "0 4294967295
"는 전 세계에 대해 활성화하고, "100 4294967295
"은 사용자에 대해 활성화하지만 데몬에 대해서는 활성화하지 않습니다.
더 오래된 것코드 예IPPROTO_ICMP
이 기능의 사용법을 보여줍니다. 특히 원시 ICMP에 사용될 것임을 식별 하는 플래그가 있는 소켓 생성을 보여줍니다.
int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)
답변2
~에서페도라 31커널 매개변수는 net.ipv4.ping_group_range
모든 그룹을 포함하도록 설정됩니다.
이를 통해 운영 체제의 모든 사용자는 바이너리를 사용하거나 파일 기능을 사용 ICMP Echo
하지 않고도 소켓을 생성할 수 있습니다 .setuid
CAP_NET_ADMIN
CAP_NET_RAW
sysctl net.ipv4.ping_group_range
net.ipv4.ping_group_range = 0 2147483647