디렉토리를 나열할 때 빨간색 바탕에 노란색으로 표시되는 /usr/bin
것을 볼 수 있습니다 .ping
파일에는 특별한 기능이 없습니다.
$ file /usr/bin/ping
/usr/bin/ping: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for
GNU/Linux 2.6.32, BuildID[sha1]=2508ea2a85b70c68967b3e6345541430f5317d5f,
stripped
$ stat /usr/bin/ping
File: '/usr/bin/ping'
Size: 62096 Blocks: 136 IO Block: 4096 regular file
Device: 802h/2050d Inode: 4457229 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:ping_exec_t:s0
Access: 2016-11-01 10:02:57.332925719 +0100
Modify: 2016-06-22 14:01:14.000000000 +0200
Change: 2016-07-10 23:41:59.623796126 +0200
Birth: -
에 따르면터미널의 다양한 색상은 무엇을 의미하나요?, 색상 해석을 나열하는 스크립트를 찾을 수 있습니다. "빨간색 바탕에 노란색"은 "ca"를 의미합니다.
"ca"은(는) 무슨 뜻인가요? 어쩌면 이 파일이 다른 곳에서 하드링크되었다는 의미일 수도 있습니다( 동일한 파일임) /usr/bin/ping
./usr/ping
PS 시청 중 발생한 질문입니다.더러운 COW를 설명여기서 ping
Ubuntu의 명령은 setuid 루트로 표시되는데 이상하게 들립니다.
답변1
이는 ping
추가 기능이 있음을 나타냅니다.
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
또는 심지어 (Fedora에서는 최대 30까지):
$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_admin,cap_net_raw+ep
이를 통해 ping
.NET으로 실행하지 않고도 원시 소켓을 열고 ICMP 패킷을 보내고 받을 수 있습니다 root
.setcap(8)
그리고capabilities(7)
자세한 내용을 알려주세요.
역사적으로 ping
다음과 같이 실행되도록 setuid가 설치되었습니다.root
원시 소켓으로 실행되고 사용할 수 . 기능을 사용할 수 있게 되면 많은 배포판에서는 권한에 대해 제공하는 보다 세밀한 제어가 바람직해 보이기 때문에 대신 해당 기능을 사용하도록 전환했습니다. 그런데 우분투에서는설치 프로그램에 문제가 있는 것 같습니다., ping
여전히 setuid가 설치되어 있습니다.root
(기능 코드는 다음에서 비활성화됩니다).관련 관리자 스크립트, 이는 Debian에서 유래되었습니다.ping
구성된 Debian에서 제공됩니다.기능 사용가능하다면).
그만큼ping
페이지요구사항을 설명합니다.따라서:
ping
실행하려면 기능이 필요합니다CAP_NET_RAW
. 1) 프로그램이 에코가 아닌 쿼리에 사용되는 경우(-N
옵션 참조), 2) 커널이 원시가 아닌 ICMP 소켓을 지원하지 않는 경우, 또는 3) 사용자가 ICMP 에코를 생성하는 것이 허용되지 않는 경우 소켓. 이 프로그램은 set-uid 루트로 사용될 수 있습니다.
커널 2.6.39 이상은 다음을 제공합니다.프로그램이 ICMP 에코 메시지를 보내고 받을 수 있도록 하는 또 다른 메커니즘:net.ipv4.ping_group_range
. 이는 Fedora 31 이상에서 사용됩니다.ping
추가 기능 없이(특히 루트 없는 컨테이너 내부에서) 작업할 수 있도록 사용됩니다. 보다setuid 및 기능 없이 Fedora에서 ping은 어떻게 작동합니까?자세한 내용은.