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.
La syntaxe correcte : usermod -aG
Pour ajouter un utilisateur à un groupe sans supprimer ses groupes existants, utilisez :
sudo usermod -aG groupname username
Exemple avec Docker :
sudo usermod -aG docker matt
Exemple avec le groupe www-data :
sudo usermod -aG www-data matt
Exemple avec plusieurs groupes à la fois :
sudo usermod -aG docker,www-data,adm matt
Attention : avec -G, les groupes sont séparés par des virgules, sans espaces.
# Correct.
sudo usermod -aG docker,www-data matt
# Incorrect.
sudo usermod -aG docker, www-data mattCode language: PHP (php)
La documentation Ubuntu de usermod confirme que -a ajoute l’utilisateur aux groupes supplémentaires, et qu’il doit être utilisé avec -G.
L’ordre des options : -aG ou -a -G
Vous pouvez écrire :
sudo usermod -aG groupname username
ou :
sudo usermod -a -G groupname username
Ces deux formes sont correctes.
Vos mises à jour vous font peur ?
PHP 8.x qui casse un plugin, un thème qui n'est plus maintenu, une mise à jour de WooCommerce qui change tout — je gère les montées de version proprement, avec environnement de staging et rollback prévu.
Mettons votre stack à jour sans risque →En revanche, évitez les variantes ambiguës ou mal ordonnées. Gardez toujours le couple -aG ou -a -G. C’est simple, lisible, et cela évite de transformer un ajout de groupe en effacement de droits.
Vérifier les groupes avant modification
Avant de modifier les groupes d’un utilisateur, affichez sa configuration actuelle :
id username
ou :
groups username
Exemple :
id matt
Résultat possible :
uid=1000(matt) gid=1000(matt) groups=1000(matt),27(sudo),4(adm),33(www-data)
Gardez cette sortie sous les yeux avant de lancer usermod. Si quelque chose casse, vous aurez une référence claire.
Vérifier les groupes après modification
Après la commande :
sudo usermod -aG docker matt
vérifiez :
id matt
groups matt
Mais attention : pour l’utilisateur déjà connecté, les nouveaux groupes ne s’appliquent pas toujours immédiatement à la session courante.
Le plus simple est de se déconnecter puis se reconnecter. Pour une session SSH, ouvrez une nouvelle connexion. Pour une session graphique, fermez puis rouvrez la session.
Vous pouvez aussi tester temporairement avec :
newgrp groupname
Mais pour éviter les confusions, une vraie reconnexion reste souvent plus claire.
Alternative plus sûre : gpasswd
Pour ajouter un utilisateur à un seul groupe, j’aime bien gpasswd. La syntaxe est plus explicite :
sudo gpasswd -a username groupname
Exemple :
sudo gpasswd -a matt docker
Pour retirer un utilisateur d’un groupe :
sudo gpasswd -d username groupname
La page de manuel de gpasswd documente justement -a, --add user pour ajouter un utilisateur au groupe nommé, et -d, --delete user pour l’en retirer.
Pour un ajout simple à un groupe, gpasswd -a évite le piège de usermod -G. C’est moins compact, mais plus difficile à rater. Et dans un terminal root, “moins facile à rater” est une qualité sous-estimée.
Ubuntu : attention au groupe sudo
Sur Ubuntu, les droits administrateur passent généralement par le groupe sudo.
Si vous retirez accidentellement votre utilisateur du groupe sudo, vous pouvez perdre la possibilité d’exécuter des commandes administrateur :
sudo apt update
peut alors répondre :
matt is not in the sudoers file. This incident will be reported.
Ce message a une certaine élégance dramatique. Il ne résout rien, mais il juge très bien.
Comment réparer si vous avez perdu sudo
Si vous avez encore une session root ouverte, corrigez immédiatement :
usermod -aG sudo matt
ou :
gpasswd -a matt sudo
Ensuite, déconnectez puis reconnectez l’utilisateur.
Si vous n’avez plus aucune session avec droits administrateur, il faudra passer par le mode recovery, une console hébergeur, un accès root direct, ou un autre compte administrateur encore valide.
Sur un serveur dédié, gardez toujours une session root ouverte pendant que vous modifiez les groupes d’un utilisateur sudo. Ne fermez pas votre seule porte de secours avant d’avoir vérifié que la nouvelle clé fonctionne.
Différence entre groupe primaire et groupes secondaires
Linux distingue le groupe primaire et les groupes secondaires d’un utilisateur.
-gmodifie le groupe primaire ;-Gmodifie les groupes secondaires ;-aGajoute des groupes secondaires sans supprimer les anciens.
Exemple pour changer le groupe primaire :
sudo usermod -g www-data matt
Ce n’est pas la même chose que :
sudo usermod -aG www-data matt
Dans le premier cas, vous changez le groupe principal de l’utilisateur. Dans le second, vous ajoutez simplement un groupe secondaire.
Pour la plupart des besoins courants — Docker, accès à un dossier partagé, groupe www-data, groupe adm — c’est bien -aG que vous voulez.
Ajouter l’utilisateur courant à un groupe
Pour ajouter l’utilisateur courant à un groupe, utilisez $USER :
sudo usermod -aG docker "$USER"Code language: JavaScript (javascript)
ou :
sudo gpasswd -a "$USER" dockerCode language: JavaScript (javascript)
Puis reconnectez-vous.
Pour vérifier après reconnexion :
id
groups
Ajouter un utilisateur à www-data
Sur un serveur web, on peut vouloir ajouter un utilisateur de déploiement au groupe www-data :
sudo usermod -aG www-data deploy
ou :
sudo gpasswd -a deploy www-data
Ensuite, vérifiez :
id deploy
Pour un serveur WordPress, cela peut aider à gérer les droits de fichiers entre un utilisateur de déploiement et PHP-FPM/Apache/Nginx. Mais n’utilisez pas les groupes comme rustine universelle : les permissions doivent rester minimales et lisibles.
Ajouter un utilisateur à docker
Pour permettre à un utilisateur d’exécuter Docker sans sudo :
sudo usermod -aG docker "$USER"Code language: JavaScript (javascript)
Puis reconnectez-vous.
Vérifiez :
docker ps
Attention toutefois : le groupe docker donne des permissions très puissantes sur la machine. Sur un serveur de production, on ne l’ajoute pas à n’importe quel utilisateur par confort.
Supprimer un utilisateur d’un groupe
Pour retirer un utilisateur d’un groupe, je préfère gpasswd :
sudo gpasswd -d username groupname
Exemple :
sudo gpasswd -d matt docker
Vous pouvez aussi utiliser deluser sur Debian/Ubuntu :
sudo deluser matt docker
Pour vérifier :
groups matt
Script de vérification avant/après
Quand je modifie des groupes sur un serveur, j’aime bien faire une vérification avant/après.
Avant :
id matt | tee /tmp/matt-groups-before.txt
Modification :
sudo usermod -aG www-data matt
Après :
id matt | tee /tmp/matt-groups-after.txt
Comparer :
diff -u /tmp/matt-groups-before.txt /tmp/matt-groups-after.txt
Ce n’est pas indispensable, mais cela évite les mauvaises surprises, surtout sur un serveur auquel vous tenez un peu. Ou beaucoup. Ou qui facture vos clients, donc beaucoup.
Mémo rapide
# Voir les groupes d’un utilisateur.
id username
groups username
# Mauvais réflexe : remplace les groupes secondaires existants.
sudo usermod -G groupname username
# Bon réflexe : ajoute le groupe sans supprimer les autres.
sudo usermod -aG groupname username
# Variante lisible.
sudo usermod -a -G groupname username
# Ajouter plusieurs groupes.
sudo usermod -aG docker,www-data,adm username
# Alternative plus explicite.
sudo gpasswd -a username groupname
# Retirer un utilisateur d’un groupe.
sudo gpasswd -d username groupname
# Ajouter l’utilisateur courant à un groupe.
sudo usermod -aG groupname "$USER"
# Vérifier après reconnexion.
id
groups
# Réparer un utilisateur retiré accidentellement du groupe sudo.
sudo usermod -aG sudo username
# ou
sudo gpasswd -a username sudoCode language: PHP (php)
Conclusion
La commande usermod est très pratique, mais l’option -G est piégeuse.
Cette commande :
sudo usermod -G groupname username
remplace la liste des groupes secondaires de l’utilisateur.
La commande sûre pour ajouter un groupe est :
sudo usermod -aG groupname username
ou, encore plus explicite pour un seul groupe :
sudo gpasswd -a username groupname
Avant de modifier les groupes, vérifiez toujours avec id username ou groups username. Après modification, reconnectez-vous et vérifiez à nouveau.
Bref : avec usermod, le -a n’est pas décoratif. C’est le petit caractère qui vous évite de vous auto-expulser du groupe sudo. Et franchement, il mérite le respect.
Marre des agences qui sous-traitent ?
Avec moi, vous parlez directement au développeur qui fait le travail. Pas d'intermédiaire, pas de promesses creuses. Juste du code propre et un interlocuteur joignable.
Travaillons directement ensemble →
merci
Bonjour, sur les systèmes RHEL, Centos, Scientifique linux, la syntaxe pour rajouter un user à un autre groupe que le primaire est bien : (example)
Pour changer le groupe primaire la commande est :
Bonjour, je viens de me faire avoir aussi (en ajoutant le groupe vboxusers sans -a j’ai supprimé tous les autres groupes.
Connaitrais tu l’antidote ? Il me faudrait rajouter tous les groupes supprimés malencontreusement mais comment savoir lesquels …. et toi, comment as-tu fait ?
Merci d’avance.
Bruno
Bonjour,
Essaie :
en remplaçant myusername avec le nom de ton utilisateur.