Commande id : vérifier l'UID et les groupes, whoami, groups et groupes secondaires

Environnement de testFamille RHELAlmaLinux 9.8coreutils 8.32Compte rootDebian 12 · coreutils 9.1 compte standard
Commandes d'utilisateurs et de groupesid, whoami, groupsEmplacement/usr/bin/id

Pour vérifier l'UID et les groupes du compte courant sur un serveur Linux, on utilise la commande id ; si l'on n'a besoin que du nom du compte, on utilise whoami, et groups si l'on n'a besoin que des noms de groupes. En lançant les trois commandes l'une après l'autre sur des serveurs AlmaLinux 9 et Debian 12 puis en comparant les sorties, on a vu que id -un et whoami affichaient le même nom de compte, et que groups affichait la liste des groupes de id en ne gardant que les noms.

La sortie ci-dessous provient d'un serveur AlmaLinux 9.8 avec le compte root et d'un serveur Debian 12 avec un compte ordinaire. Le nom et les numéros du compte de connexion ainsi que ses groupes secondaires ont été remplacés par des valeurs d'exemple (user1, 1000, adm, systemd-journal).

1️⃣ Utilisation de base de la commande id

  • ↪️ Lire les trois champs uid, gid et groups

Sans option, id affiche sur une ligne les informations du compte qui a lancé le shell courant. Avec le compte root, les trois champs valaient tous 0(root).

id
uid=0(root) gid=0(root) groups=0(root)

Le champ uid donne le numéro et le nom du compte, et le champ gid le numéro et le nom du groupe principal (primary group). Le champ groups contient tous les groupes auxquels le compte appartient, avec le groupe principal en premier.

Si l'on écrit un nom de compte après id, on obtient les informations de ce compte. Pour le compte ordinaire user1, qui a des groupes secondaires, adm et systemd-journal suivaient le groupe principal user1 dans le champ groups. Ces groupes auxquels le compte appartient en plus du groupe principal sont les groupes secondaires (supplementary group).

id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),190(systemd-journal)

Beaucoup de comptes ont le même numéro pour l'UID et le gid, si bien qu'on prend facilement les deux nombres pour la même valeur ; pourtant le compte adm, présent par défaut sur le serveur, avait l'UID 3 et le numéro de groupe principal 4. Le compte operator avait root comme groupe principal.

id adm
uid=3(adm) gid=4(adm) groups=4(adm)
id operator
uid=11(operator) gid=0(root) groups=0(root)

Si l'on écrit plusieurs comptes, on obtient une ligne par compte.

id root bin
uid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)

Si l'on écrit un compte qui n'existe pas, l'erreur [no such user] s'affiche, et le code de sortie était 1.

id no-such-user9
id: 'no-such-user9': no such user
echo $?
1

Le code de sortie pour un compte existant est 0, ce qui permet de s'en servir dans un script comme condition pour vérifier qu'un compte existe.

2️⃣ Options de la commande id

  • ↪️ -u, -g, -G pour les numéros et -n pour les noms

Pour ne passer à un script qu'un seul numéro de toute la sortie, on choisit un seul champ avec une option. -u affiche l'UID, -g le numéro du groupe principal et -G tous les numéros des groupes auxquels le compte appartient.

id -u
0
id -u daemon
2
id -G user1
1000 4 190

Avec -n en plus, on obtient des noms à la place des numéros. En vérifiant les groupes de user1 avec [id -Gn], les trois numéros sont devenus trois noms.

id -Gn user1
user1 adm systemd-journal
id -gn user1
user1

-n et -r s'utilisent avec l'une des options -u, -g et -G. En écrivant -n seul, on a obtenu l'erreur ci-dessous.

id -n
id: cannot print only names or real IDs in default format

-r affiche l'ID réel (real) à la place de l'ID effectif (effective). Dans un shell du compte root, [id -ur] a affiché 0. Si l'on écrit ensemble deux options ou plus qui choisissent un numéro, comme -u et -g, l'erreur [cannot print "only" of more than one choice] s'affiche. Voici le récapitulatif des options.

OptionCopierDescription
-u--userAffiche le numéro d'UID
-g--groupAffiche le numéro du groupe principal
-G--groupsAffiche tous les numéros des groupes d'appartenance
-n--nameAvec -u, -g ou -G, affiche le nom à la place du numéro
-r--realAvec -u, -g ou -G, affiche l'ID réel (real) à la place de l'ID effectif
OptionCopierDescription
-Z--contextAffiche seulement le contexte de sécurité du processus
-z--zeroSépare les éléments de la sortie par des caractères NUL au lieu d'espaces ; inutilisable dans le format par défaut
-aAccepté seulement pour la compatibilité avec d'autres versions de id, puis ignoré
--helpAffiche l'aide
--versionAfficher la version

🔲 Simulateur de la commande id

Le simulateur ci-dessous démarre avec le compte user1, qui a des groupes secondaires. Après avoir ajouté le groupe wheel avec la puce [🖊 Autre fenêtre], on peut comparer [id] et [id user1], puis vérifier les groupes d'un nouveau shell avec la puce [🔁 Se reconnecter].

Simulateur de la commande idcoreutils 8.32
[root@server work]#
Il fonctionne uniquement dans le navigateur. Après avoir modifié les groupes avec la puce [🖊 Autre fenêtre], on compare [id] et [id user1], puis on vérifie les groupes d'un nouveau shell avec la puce [🔁 Se reconnecter].

3️⃣ La commande whoami et id -un

  • ↪️ Vérifier le nom du compte courant et vérifier d'autres comptes

Si l'on n'a besoin que du nom du compte du shell courant, on lance whoami. La page de man décrit whoami comme la même commande que [id -un]. Avec le compte root, les deux commandes ont affiché root.

whoami
root
id -un
root

Avec un compte ordinaire sur le serveur Debian 12, les deux commandes ont aussi affiché le même nom de compte.

whoami
user1
id -un
user1

whoami affiche le nom du compte qui correspond à l'UID effectif (effective) courant. Cette commande ne vérifie que le compte courant, donc une erreur s'affiche si l'on ajoute un nom de compte derrière.

whoami user1
whoami: extra operand 'user1'
Try 'whoami --help' for more information.

Pour vérifier le nom ou le numéro d'un autre compte, on écrit ce compte après id.

id -un user1
user1

Si l'on écrit -u à la place de -un, le numéro d'UID s'affiche au même endroit à la place du nom du compte.

4️⃣ La commande groups et les groupes secondaires

  • ↪️ Groupe principal et groupes secondaires, et le shell après un changement de groupes

groups affiche seulement les noms de groupes sur une ligne. Sans nom de compte, on obtient les groupes du shell courant ; avec le compte root, il n'y avait que root.

groups
root

Avec un nom de compte, on obtient le nom du compte puis, après les deux-points, les groupes. Avec plusieurs comptes, on a obtenu une ligne par compte.

groups user1 daemon
user1 : user1 adm systemd-journal
daemon : daemon

Le groupe principal et les groupes secondaires ne sont pas enregistrés au même endroit. Les groupes secondaires sont inscrits comme membres dans le quatrième champ de la base des groupes (/etc/group), et le groupe principal est inscrit sous forme de numéro dans le quatrième champ des informations du compte (/etc/passwd).

getent group adm
adm:x:4:user1
getent group user1
user1:x:1000:
getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin

Le groupe user1, groupe principal de user1, avait un quatrième champ vide, et user1 était inscrit comme membre du groupe secondaire adm. Le 2 du quatrième champ de la ligne du compte daemon est le numéro du groupe principal.

Pour ajouter un compte à un groupe secondaire, on utilise la commande usermod sous la forme [usermod -aG groupe compte]. Avec -G seul, sans -a, le compte sort des groupes secondaires existants qui ne figurent pas dans la liste ; on écrit donc -a avec.

groups lancé sans nom de compte affiche les groupes du processus du shell courant. La page de man explique que cette valeur peut différer de la base quand la base des groupes change.

C'est pourquoi, juste après un changement de groupes, on vérifie les groupes de la base avec [groups compte] ou [id compte], et on se reconnecte pour les appliquer au shell. Pour changer l'ID de groupe courant sans se déconnecter, il existe la commande newgrp.

🔢 FAQ & contenus recommandés

Oui, c'est possible. Sur le serveur AlmaLinux 9.8, [id 0] a affiché uid=0(root) gid=0(root) groups=0(root), comme [id root].

À partir du numéro indiqué par UID_MIN dans /etc/login.defs. Sur le serveur AlmaLinux 9.8, c'était 1000, et SYS_UID_MIN et SYS_UID_MAX du même fichier valaient 201 et 999, la plage des comptes système.

who am i est who suivi de deux mots ; la commande se comporte comme l'option -m et affiche une ligne d'informations de connexion du terminal dans lequel on tape. whoami affiche seulement une ligne avec le nom du compte de l'UID effectif courant.

ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 6   +   2   =