web-dev-qa-db-fra.com

Différence entre l'ID utilisateur réel, l'ID utilisateur effectif et l'ID utilisateur enregistré

Je suis déjà au courant de l'identité de l'utilisateur réel. C'est le numéro unique d'un utilisateur du système. Dans mon système, mon uid est

$ echo $UID
1014
$                 

Quels sont les deux autres ID est synonyme. Et quelle est l'utilisation d'un identifiant d'utilisateur effectif et d'un identifiant d'utilisateur enregistré et où nous l'utilisons dans le système.

81
mrg

La distinction entre un identifiant d'utilisateur réel et effectif est faite parce que vous pouvez avoir besoin de prendre temporairement l'identité d'un autre utilisateur (la plupart du temps, ce serait root, mais ce pourrait être n'importe quel utilisateur). Si vous n'aviez qu'un seul identifiant d'utilisateur, il n'y aurait aucun moyen de revenir à votre identifiant d'utilisateur initial (autre que prendre votre mot pour acquis et si vous êtes root, utilisez root pour changer d’utilisateur).

Ainsi, le véritable identifiant est qui vous êtes vraiment (celui qui possède le processus) et l'identifiant effectif correspond à ce que le système d'exploitation examine pour décider si vous êtes autorisé ou non à faire quelque chose (la plupart du temps). , il y a quelques exceptions).

Lorsque vous vous connectez, le shell de connexion définit à la fois l'ID utilisateur réel et effectif sur la même valeur (votre identifiant utilisateur réel) que celle fournie par le fichier de mots de passe.

Maintenant, il arrive aussi que vous exécutiez un programme setuid, et en plus de fonctionner en tant qu'utilisateur différent (par exemple, root), le programme setuid est aussi supposé faire quelque chose en votre nom. Comment cela marche-t-il?
Après avoir exécuté le programme setuid, il aura votre véritable identifiant (puisque vous êtes le propriétaire du processus) et l'identifiant effectif du propriétaire du fichier (par exemple root) puisqu'il s'agit de setuid .

Le programme fait la magie dont il a besoin avec les privilèges de superutilisateur, puis il veut faire quelque chose en votre nom. Cela signifie, essayer de faire quelque chose que vous ne devriez pas pouvoir faire devrait échouer. Comment ça fait ça? Eh bien, évidemment, en changeant son identifiant d'utilisateur effectif pour l'identifiant d'utilisateur réel!

Maintenant, ce programme setuid n'a aucun moyen de revenir en arrière puisque tout ce que le noyau sait est votre identifiant et ... votre identifiant. Bang, tu es mort.

C’est à cela que sert l’identifiant d’utilisateur défini.

125
Damon