programma di proprietà root con bit setuid attivo


13

Il ping è un programma di proprietà di root con il bit di ID utente impostato.

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

A quanto ho capito, se un utente esegue il processo di ping, l'ID utente effettivo cambierà dall'ID utente reale (ovvero l'ID utente della persona che ha avviato il processo) alla radice dell'ID utente. Tuttavia, quando provo questo e guardo l'output di ps per vedere se il processo di ping è in esecuzione come utente root, ottengo ancora la visualizzazione dell'ID utente reale.

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

Una domanda correlata è unix.stackexchange.com/questions/152595 .
JdeBP,

Risposte:


20

pingha bisogno di root per poter aprire un socket in modalità raw. Questa è letteralmente la prima cosa che fa quando si avvia:

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

Questa è l'unica cosa di cui necessita il root, quindi come molti programmi, riporta immediatamente il suo livello di privilegio al tuo normale account utente:

uid = getuid();
if (setuid(uid)) {
    perror("ping: setuid");
    exit(-1);
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.