Chaque processus UNIX est associé à 3 UID. Le privilège de superutilisateur est UID=0.
UID réel
Il s'agit de l'UID de l'utilisateur/processus qui a créé CE processus. Il ne peut être modifié que si le processus en cours a EUID=0.
UID effectif
Cet UID est utilisé pour évaluer les privilèges du processus pour effectuer une action particulière. EUID peut être modifié soit en RUID, soit en SUID si EUID!=0. Si EUID=0, il peut être changé en n'importe quoi.
UID enregistré
Si vous exécutez un exécutable avec le bit set-UID défini, le processus en cours d'exécution résultant démarrera avec un véritable UID de l'utilisateur réel qui l'exécute et un UID effectif et enregistré du propriétaire du fichier exécutable. Si le processus appelle ensuite setuid() ou seteuid() pour changer leur UID effectif, ils peuvent toujours récupérer leurs privilèges d'origine grâce à l'UID enregistré. Si le bit set-UID n'est pas défini, SUID sera le RUID.
Le vrai uid est l'identifiant de l'utilisateur qui a lancé un processus.
L'UID effectif est généralement le même que l'UID réel. Il n'est différent que si :
-
l'exécutable avait le bit set-uid défini et le propriétaire de l'exécutable est différent de l'utilisateur qui l'appelle
-
ou si un processus set-uid appelle setuid(2). Si le processus a des privilèges de super-utilisateur, tout argument de setuid(2) est autorisé (mais alors tous les *-uids ont la même valeur); sinon, setuid(2) peut être appelé avec l'UID réel ou l'UID effectif ou l'UID sauvegardé.
L'uid-enregistré est l'uid effectif que le processus avait au démarrage, et il est enregistré afin d'être autorisé comme argument pour les différents appels système set*uid.
Notez qu'un processus avec des privilèges de superutilisateur appelant setuid(2) pour changer son uid effectif verra également l'uid réel et l'uid enregistré changés à la même valeur, donc le seteuid(2) non POSIX devrait être utilisé à la place.
Tout ce qui précède s'applique également aux identifiants de groupe (réels|effectifs|sauvés).
En plus des UID réels, effectifs et enregistrés, les systèmes Unix sur lesquels l'audit est activé disposent également de l'UID d'audit. L'AUID d'un processus identifie l'utilisateur qui a démarré le processus; il n'est pas modifié par setuid(2) ou seteuid(2). L'intention est qu'il reste constant tout au long du processus et qu'il ne soit utilisé que pour baliser les enregistrements d'audit. Ainsi, si un utilisateur exécute un shell privilégié (même un utilisateur autorisé via su ou sudo), les enregistrements d'audit de ce processus sont marqués à partir de cet utilisateur.