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

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);
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.