programme appartenant à root avec bit setuid activé

13

Ping est un programme appartenant à root avec le bit d'ID utilisateur défini.

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

Si je comprends bien, si un utilisateur exécute le processus ping, l'ID utilisateur effectif passera de l'ID utilisateur réel (c'est-à-dire l'ID utilisateur de la personne qui a lancé le processus) à la racine de l'ID utilisateur. Cependant, lorsque j'essaie ceci et regarde la sortie de ps pour voir si le processus ping s'exécute en tant qu'utilisateur root, j'obtiens toujours l'ID utilisateur réel.

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
sashang
la source
Une question connexe est unix.stackexchange.com/questions/152595 .
JdeBP

Réponses:

20

pinga besoin de root pour pouvoir ouvrir un socket en mode brut. C'est littéralement la première chose qu'il fait au démarrage:

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

C'est la seule chose pour laquelle il a besoin de root, donc comme de nombreux programmes, il ramène immédiatement son niveau de privilège à votre compte d'utilisateur normal:

uid = getuid();
if (setuid(uid)) {
    perror("ping: setuid");
    exit(-1);
}
Michael Mrozek
la source