Je vais essayer d'expliquer étape par étape avec quelques exemples.
Bref historique
Chaque processus a ses propres « pouvoirs de processus » qui comprend des attributs tels que PID, les PPID, PGID, session IDainsi que les utilisateurs réels et efficaces et des ID de groupe:
RUID, EUID, RGID, EGID.
Nous allons nous concentrer sur ceux-ci.
Partie 1: Comprendre l'UID et le GID
Maintenant, je vais me connecter à un shell avec mes informations d'identification et exécuter:
$ grep $LOGNAME /etc/passwd
rotem:x:1000:1000:rotem,,,:/home/rotem:/bin/bash
Vous pouvez voir mon nom de journal (rotem), l' UID et le GID qui sont tous deux 1000, et d'autres détails comme le shell auquel je suis connecté.
Partie 2: Comprendre RUID et RGID
Chaque processus a un propriétaire et appartient à un groupe .
Dans notre shell, chaque processus que nous allons maintenant exécuter héritera des privilèges de mon compte utilisateur et fonctionnera avec le même UID et GID.
Permet d'exécuter une commande simple pour le vérifier:
$ sleep 10 & ps aux | grep 'sleep'
Et vérifiez l'UID et le GID du processus:
$ stat -c "%u %g" /proc/$pid/
1000 1000
Ce sont l' ID utilisateur réel ( ) et l' ID de groupe réel ( ) du processus .RUIDRGID
(*) Cochez les autres options pour afficher l'UID et le GID et les moyens d'obtenir cela en une seule ligne .
Pour l'instant, acceptez le fait que les attributs EUIDet EGIDsont «redondants» et sont juste égaux à RUIDet RGIDen coulisses.
Partie 3: Comprendre l'EUID et l'EGID
Prenons la pingcommande comme exemple.
Recherchez l'emplacement binaire avec la whichcommande puis exécutez ls -la:
-rwsr-xr-x 1 root root 64424 Mar 10 2017 ping
Vous pouvez voir que le propriétaire et le groupe du fichier sont root. C'est parce que la pingcommande doit ouvrir une socket et que le noyau Linux demande des rootprivilèges pour cela.
Mais comment puis-je utiliser pingsi je n'ai pas de rootprivilège?
Notez la lettre «s» au lieu de «x» dans la partie propriétaire de l'autorisation de fichier.
Il s'agit d'un bit d'autorisation spécial pour des fichiers exécutables binaires spécifiques (comme pinget sudo) qui est connu sous le nom de setuid .
C'est là EUIDet EGIDentre en jeu.
Ce qui se passera, c'est lorsqu'un binaire setuid comme pings'exécute, le processus change son ID utilisateur effectif ( EUID) de la valeur par défaut RUIDau propriétaire de ce fichier exécutable binaire spécial qui dans ce cas est -root .
Tout cela est fait par le simple fait que ce fichier a le setuidbit.
Le noyau décide si ce processus a le privilège en regardant sur EUIDle processus. Parce que maintenant le EUIDpoint sur root, l'opération ne sera pas rejetée par le noyau.
Remarque : Sur les dernières versions de Linux, la sortie de la pingcommande sera différente du fait qu'elle a adopté l' approche des capacités Linux au lieu de cette approche setuid - pour ceux qui ne sont pas familiers - lisez ici .
Partie 4: Qu'en est-il du SUID et du SGID?
L'ID utilisateur enregistré ( SUID) est utilisé lorsqu'un processus privilégié est en cours d'exécution (comme rootpar exemple) et qu'il doit effectuer des tâches non privilégiées.
Dans ce cas, l'UID effectif ( EUID) d'avant sera enregistré à l'intérieur SUIDpuis changé en une tâche sans privilège. Une fois la tâche non privilégiée terminée, la valeur de EUIDsera prise en SUIDcompte et reviendra au compte privilégié.