setuid 비트가 설정된 루트 소유 프로그램


13

Ping은 사용자 ID 비트가 설정된 루트가 소유 한 프로그램입니다.

$ ls -l `which ping`
-rwsr-xr-x 1 root root 35752 Nov  4  2011 /bin/ping

내가 알기로, 사용자가 핑 프로세스를 실행하면 유효 사용자 ID가 실제 사용자 ID (즉, 프로세스를 시작한 사람의 사용자 ID)에서 사용자 ID 루트로 변경됩니다. 그러나 이것을 시도하고 ps의 출력을보고 핑 프로세스가 루트 사용자로 실행되는지 확인하면 여전히 실제 사용자 ID가 표시됩니다.

ps -e -o user,ruser,euser,cmd,args | grep ping
sashan   sashan   sashan   ping -i 10 -c 1000 www.goog ping -i 10 -c 1000 www.google.com

관련 질문은 unix.stackexchange.com/questions/152595 입니다.
JdeBP

답변:


20

ping원시 모드에서 소켓을 열 수 있도록 루트가 필요합니다. 말 그대로 시작될 때 가장 먼저하는 일입니다.

icmp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
socket_errno = errno;

그것은 루트에 필요한 유일한 것이므로 많은 프로그램과 마찬가지로 권한 수준을 즉시 일반 사용자 계정으로 되돌립니다.

uid = getuid();
if (setuid(uid)) {
    perror("ping: setuid");
    exit(-1);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.