setuid 및 기능 없이 Fedora에서 Ping은 어떻게 작동합니까?

setuid 및 기능 없이 Fedora에서 Ping은 어떻게 작동합니까?

내가 아는 한 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 소켓을 생성할 수 있습니다.

상호 참조 세부정보

  • 타겟 릴리스:페도라 31
  • 최종 업데이트 날짜: 2019-08-13
  • 추적기 오류: #1740809
  • 릴리스 정보 추적기: #376화

이것시스템 파일썼다,

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하지 않고도 소켓을 생성할 수 있습니다 .setuidCAP_NET_ADMINCAP_NET_RAW

sysctl net.ipv4.ping_group_range

net.ipv4.ping_group_range = 0   2147483647

관련 정보