Il m’est arrivé une mésaventure avec la commande usermod sous Linux. Dans un terminal, usermod sert à modifier un compte utilisateur : groupes, shell, répertoire personnel, nom de login, date d’expiration, etc.
Le cas le plus courant consiste à ajouter un utilisateur à un groupe, par exemple pour lui donner accès à Docker, à des fichiers partagés, à un groupe système, ou à certaines permissions.
Le problème, c’est que beaucoup d’exemples anciens donnent cette commande :
sudo usermod -G groupname username
Elle semble correcte. Elle ne l’est pas, sauf si vous voulez remplacer entièrement la liste des groupes secondaires de l’utilisateur.
La bonne commande pour ajouter un utilisateur à un groupe sans lui retirer ses groupes actuels est :
sudo usermod -aG groupname username
Le petit -a change tout. Sans lui, -G définit la nouvelle liste de groupes supplémentaires. Avec lui, -G ajoute le groupe à la liste existante.
Le piège de usermod -G
Imaginons un utilisateur matt qui appartient déjà à plusieurs groupes :
groups matt
Résultat :
matt : matt sudo adm cdrom dip plugdev lpadmin
Si vous lancez :
sudo usermod -G docker matt
vous ne faites pas seulement “ajouter matt au groupe docker”. Vous remplacez ses groupes secondaires par docker.
Après reconnexion, l’utilisateur peut donc perdre des groupes importants comme sudo, adm, lpadmin ou plugdev. Et là, c’est tout de suite moins drôle. Surtout si vous venez de vous retirer vos propres droits sudo. Grand classique, petit frisson.