Linux : ajouter un utilisateur à un groupe sans supprimer ses droits

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.

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.

  • -g modifie le groupe primaire ;
  • -G modifie les groupes secondaires ;
  • -aG ajoute 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.

Gravatar for Matt Biscay

Je suis Matt Biscay, développeur WordPress & WooCommerce certifié chez Codeable, administrateur système et enseignant.

J’aide les entreprises à créer, optimiser et fiabiliser leurs sites WordPress avec une approche technique propre : performance, sécurité, maintenance, développement sur mesure et résolution de problèmes complexes.

Sur Skyminds, je partage des tutoriels WordPress, WooCommerce, Linux et administration système, avec des solutions testées sur des cas réels et pensées pour durer.

Découvrez mes services WordPress et WooCommerce.

4 pensées sur “Linux : ajouter un utilisateur à un groupe sans supprimer ses droits”

  1. Bonjour, sur les systèmes RHEL, Centos, Scientifique linux, la syntaxe pour rajouter un user à un autre groupe que le primaire est bien : (example)

    groupadd -g 5001 groupe1
    usermod -G groupe1 user1
    id user1
    uid=500(user1) gid=500(user1) groups=500(user1),5001(groupe1)

    Pour changer le groupe primaire la commande est :

    usermod -g groupe1 user1
    id user1
    uid=500(user1) gid=5001(groupe1) groups=5001(groupe1)
    Reply
  2. 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

    Reply
    • Bonjour,

      Essaie :

      usermod -aG adm,cdrom,sudo,dip,plugdev,lpadmin,vboxusers myusername

      en remplaçant myusername avec le nom de ton utilisateur.

      Reply

Opinions