Aller au contenu

UID : User Identifier (identifiant utilisateur Unix)

Sécurité

UID : User Identifier, identifiant numérique d'un utilisateur sur un système de type Unix. « Le numéro qui fait l'utilisateur, le nom n'étant qu'une politesse faite aux humains », par analogie avec le matricule du soldat : il peut changer de prénom, l'intendance ne connaît que le chiffre.

Principe : Le noyau ne connaît que des nombres : chaque processus et chaque fichier porte un UID, et les droits se décident en les comparant. L'UID 0 est root, qui passe outre la plupart des contrôles ; deux comptes de noms différents mais de même UID sont, pour le noyau, une seule et même personne.

Réel, effectif, sauvegardé : Un processus porte un UID réel (qui l'a lancé), un UID effectif (avec quels droits il agit) et un UID sauvegardé. Un programme setuid s'exécute avec l'UID effectif de son propriétaire, souvent root : utile pour changer son mot de passe, dangereux dès que le programme vérifie un fichier puis l'ouvre en deux temps, laissant à l'appelant le loisir de le remplacer entre-temps par un lien, situation dite TOCTOU (Time Of Check to Time Of Use).

Conteneurs : Les espaces de noms utilisateur permettent d'être root (UID 0) dans un conteneur tout en correspondant à un UID ordinaire sur l'hôte. Sans eux, le root du conteneur est le root de l'hôte, séparé seulement par les autres mécanismes d'isolation et beaucoup d'optimisme.

Homonymie : En RFID et NFC, UID désigne aussi l'identifiant unique d'une puce sans contact, sans rapport avec les comptes Unix, et qui ne prouve guère d'identité puisqu'il se lit à distance et se copie parfois.

Ce qui arrive si on s'en passe

Un programme setuid root qui vérifie les droits sur un chemin puis l'ouvre ensuite laisse à un utilisateur ordinaire une fenêtre pour substituer un lien symbolique et lui faire lire ou écrire un fichier système, par exemple /etc/shadow. Deux comptes partageant un UID par erreur accèdent mutuellement à leurs fichiers, et un UID réattribué après le départ d'un employé hérite des fichiers orphelins de son prédécesseur. Dans les conteneurs, exécuter en UID 0 sans espace de noms utilisateur transforme la moindre évasion en compromission complète de l'hôte.

Explication de la marmotte

Sur Linux et les systèmes de la même famille, chaque utilisateur est identifié par un numéro, l'UID. L'ordinateur ne regarde pas le nom, seulement ce numéro, pour décider qui a le droit de lire ou de modifier un fichier. Le numéro 0 correspond à l'administrateur, qui a presque tous les droits. Certains programmes s'exécutent avec les droits d'un autre utilisateur, ce qui demande beaucoup de prudence dans leur écriture.

Où ce terme est utilisé

← Tout le glossaire