Différence entre le Réel de l'ID d'Utilisateur, Efficace, ID Utilisateur et ID Utilisateur Enregistré
Je suis déjà au courant de l'identificateur d'utilisateur réel. C'est le numéro unique pour un utilisateur dans le système. Dans mon système, Mon uid est
$ echo $UID
1014
$
Quels sont les deux autres ID représente. Et qu'est-ce que l'utilisation efficace de l'id d'utilisateur et enregistré l'utilisateur id et où nous l'utilisons dans le système.
- Pour info, il existe également le système de fichiers de l'id d'utilisateur, comme indiqué sur la page Wikipédia: en.wikipedia.org/wiki/User_identifier
Vous devez vous connecter pour publier un commentaire.
La distinction entre un vrai et un id d'utilisateur est faite parce que vous peut avoir besoin de prendre temporairement une autre identité de l'utilisateur (la plupart du temps, ce serait
root
, mais il pourrait être n'importe quel utilisateur). Si vous n'aviez qu'une id d'utilisateur, il n'y aurait pas moyen de changer à nouveau de votre id d'utilisateur d'origine par la suite (autres que de prendre votre parole pour acquis, et dans le cas où vous êtesroot
, à l'aide deroot
's les privilèges de modifier à tout utilisateur).Donc, le vrai nom d'utilisateur est qui vous êtes vraiment (celui qui détient le processus), et l'uid effectif est ce que le système d'exploitation regarde pour prendre une décision si oui ou non vous êtes autorisé à faire quelque chose (la plupart du temps, il y a quelques exceptions).
Lorsque vous vous connectez, le shell de connexion définit à la fois le réel et efficace de l'id d'utilisateur à la même valeur (votre identificateur d'utilisateur réel) fourni par le fichier de mot de passe.
Maintenant, il arrive aussi que vous exécutez un programme setuid, et outre l'exécution d'un autre utilisateur (par exemple,
root
) le programme setuid est aussi censé faire quelque chose en votre nom. Comment cela fonctionne?Après l'exécution du programme setuid, il aura votre nom réel (puisque vous êtes le propriétaire de processus) et l'uid effectif du propriétaire du fichier (par exemple
root
), puisqu'il est setuid.Le programme n'quelle que soit la magie qu'il doit faire avec les privilèges de super-utilisateur, puis veut faire quelque chose en votre nom. Cela signifie que, en essayant de faire quelque chose que vous ne devriez pas être en mesure de faire doit échouer. Comment faut-il faire? Bon, évidemment, en changeant son uid effectif de l'identificateur d'utilisateur réel!
Maintenant que le programme setuid n'a aucun moyen de commutation de retour depuis tous le noyau sait est votre identifiant et votre... votre id. D'un coup, vous êtes mort.
C'est ce qui l'a sauvé set-user-id est pour.
access
. C'est de 99,9% de celui-ci. Aussisetfsuid
(mais rarement nécessaire), et de très faible niveau funcs, et vous avez besoin (mais ne sont pas contrôlés par) l'identificateur d'utilisateur réel pour obtenir/de la définition des priorités ou un planificateur de tâches, et les Identifiants transmis aux gestionnaires de signaux ou retourné parwait
et coll. est real Id.execve
ne pas vérifier, mais peut échouer si vous avez modifié l'identificateur d'utilisateur réel. Aussifork
ne pas vérifier, mais peut échouer si vous atteignez le maximum de quota sur l'UID réel. Google avecsite:man7.org
est votre ami ici.