11 KiB
Gérer les utilisateurs et les groupes sous Linux
Pourquoi gérer utilisateurs et groupes ?
Linux est un système multi-utilisateurs : plusieurs personnes (ou plusieurs services) peuvent partager la même machine sans interférer entre elles. Chaque utilisateur dispose de son propre dossier personnel, de ses fichiers, de ses préférences. Et chaque fichier appartient à un utilisateur et à un groupe, ce qui détermine qui peut le lire, le modifier ou l'exécuter.
Comprendre la gestion des utilisateurs et des groupes, c'est donc maîtriser :
- L'isolation : empêcher un utilisateur d'accéder aux fichiers d'un autre.
- Le partage contrôlé : permettre à plusieurs utilisateurs de collaborer via un groupe commun (l'exemple classique : un groupe
famillepour partager des photos). - La sécurité : limiter ce qu'un compte peut faire, notamment les comptes de services.
Les commandes présentées ici nécessitent les droits root (administrateur), on les préfixe donc avec sudo.
Notions de base
Avant de manipuler, posons le vocabulaire :
- UID (User ID) : identifiant numérique unique de l'utilisateur. Sur les distributions modernes, les UID des utilisateurs humains commencent généralement à 1000. Les UID inférieurs à 1000 sont réservés au système et aux comptes de services.
- GID (Group ID) : identifiant numérique du groupe, avec la même logique.
- Groupe principal : chaque utilisateur a un groupe principal, défini dans
/etc/passwd. C'est ce groupe qui est appliqué par défaut aux fichiers qu'il crée. - Groupes secondaires : un utilisateur peut appartenir à plusieurs groupes supplémentaires, listés dans
/etc/group.
Pour voir ces informations sur votre propre compte :
id
Vous obtenez quelque chose comme uid=1000(cedric) gid=1000(cedric) groups=1000(cedric),10(wheel),1003(famille). Le premier groupe listé après gid= est votre groupe principal ; les autres sont vos groupes secondaires.
Créer un groupe
Pour créer un groupe, on utilise groupadd. Le système attribue automatiquement un GID libre :
sudo groupadd famille
Si vous voulez fixer un GID précis (utile quand vous synchronisez des comptes entre plusieurs machines ou avec un NAS), utilisez -g :
sudo groupadd -g 1003 famille
Vérifiez la création en consultant /etc/group :
getent group famille
Créer un utilisateur
La commande de référence est useradd. Sans option, elle crée un compte minimal mais ne le configure pas idéalement. Les options à connaître :
-m: crée le dossier personnel (/home/<nom>) si nécessaire. À utiliser presque toujours pour un compte humain.-d /chemin: précise le chemin du dossier personnel s'il diffère de/home/<nom>.-s /bin/bash: définit le shell de connexion (sur certaines distributions, le shell par défaut est/bin/sh, ce qui n'est pas idéal pour une utilisation interactive).-g <groupe>: groupe principal.-G <groupe1>,<groupe2>: groupes secondaires (sans espace après la virgule).-c "Commentaire": nom complet ou description du compte (champ GECOS).-u <UID>: fixe l'UID manuellement.
Exemple complet pour créer un utilisateur cedric.abonnel avec un dossier personnel, le shell Bash, le groupe principal famille et l'appartenance au groupe wheel (qui donne droit à sudo sur Fedora/RHEL) :
sudo useradd -m -s /bin/bash -g famille -G wheel \
-c "Cédric Abonnel" cedric.abonnel
Sur Debian/Ubuntu, le groupe administrateur s'appelle sudo au lieu de wheel :
sudo useradd -m -s /bin/bash -g famille -G sudo \
-c "Cédric Abonnel" cedric.abonnel
Définir le mot de passe
Par défaut, le compte créé par useradd est verrouillé : impossible de se connecter tant qu'aucun mot de passe n'a été défini. Sortez-le de ce verrou avec passwd :
sudo passwd cedric.abonnel
Le système demande deux fois le nouveau mot de passe. Tant que cette étape n'est pas faite, le compte existe mais n'est pas utilisable.
Une alternative plus simple sur Debian/Ubuntu : adduser
Sur les distributions dérivées de Debian (Debian, Ubuntu, Mint…), il existe un script interactif plus convivial qui crée le dossier, demande le mot de passe et les infos d'identité en une seule commande :
sudo adduser cedric.abonnel
C'est l'outil recommandé pour ces distributions quand on n'a pas de besoin d'automatisation particulier. Sur Fedora/RHEL/openSUSE, useradd reste la commande standard.
Modifier le groupe principal d'un utilisateur
Pour changer le groupe principal d'un utilisateur déjà existant, on utilise usermod avec l'option -g :
sudo usermod -g famille cedric.abonnel
Attention au piège : il faut bien utiliser usermod ici, et pas groupmod. La commande groupmod sert à modifier un groupe (changer son nom ou son GID), pas à changer l'appartenance d'un utilisateur :
sudo groupmod -n famille-elargie famille # renomme le groupe
sudo groupmod -g 1010 famille # change le GID du groupe
Ajouter un utilisateur à un groupe secondaire
C'est l'opération la plus courante : permettre à un utilisateur de rejoindre un groupe existant (par exemple pour accéder à un dossier partagé, ou pour gagner le droit de piloter des machines virtuelles via libvirt).
sudo usermod -aG famille cedric.abonnel
L'option -a (append) est cruciale : sans elle, -G remplace la liste complète des groupes secondaires au lieu d'y ajouter. C'est l'erreur classique qui fait perdre l'accès à sudo ou à docker parce qu'on a écrasé les autres appartenances.
Vous pouvez aussi ajouter plusieurs groupes d'un coup :
sudo usermod -aG famille,docker,libvirt cedric.abonnel
L'utilisateur devra se déconnecter puis se reconnecter pour que sa nouvelle appartenance soit prise en compte par sa session. Pour vérifier sans se reconnecter :
groups cedric.abonnel
Retirer un utilisateur d'un groupe
Pour enlever un utilisateur d'un groupe secondaire :
sudo gpasswd -d cedric.abonnel famille
Supprimer un utilisateur ou un groupe
Pour supprimer un utilisateur, mais garder son dossier personnel :
sudo userdel cedric.abonnel
Pour supprimer aussi son dossier personnel et sa boîte mail :
sudo userdel -r cedric.abonnel
Pour supprimer un groupe (à condition qu'il ne soit le groupe principal d'aucun utilisateur) :
sudo groupdel famille
Verrouiller temporairement un compte
Plutôt que de supprimer un utilisateur, on peut bloquer son accès sans toucher à ses fichiers :
sudo usermod -L cedric.abonnel # verrouille
sudo usermod -U cedric.abonnel # déverrouille
Comprendre et régler umask
Quand un utilisateur crée un fichier, le système lui applique des permissions par défaut. Ces permissions sont déterminées par une valeur appelée umask (« user file-creation mask »), qui retire des droits par rapport à la valeur maximale.
- Pour un fichier, le maximum est
666(rw-rw-rw-). - Pour un dossier, le maximum est
777(rwxrwxrwx). - L'umask soustrait des bits. Avec
umask 0022, on retirewau groupe et au reste du monde : les fichiers sont créés en644(rw-r--r--), les dossiers en755(rwxr-xr-x). C'est la valeur classique pour un usage personnel ou professionnel. umask 0027est plus restrictif : retire toutes les permissions au reste du monde et l'écriture au groupe.umask 0002est plus permissif et adapté aux environnements collaboratifs avec un groupe partagé : les fichiers sont créés en664, donc modifiables par tout le groupe.
Vérifiez votre umask actuel :
umask
Définir umask globalement
Pour appliquer un umask à tous les utilisateurs, créez un fichier dans /etc/profile.d/ qui sera chargé à chaque ouverture de session shell :
sudo tee /etc/profile.d/umask.sh > /dev/null <<'EOF'
umask 0022
EOF
Le fichier doit se terminer par .sh pour être lu automatiquement par /etc/profile. Aucun chmod +x n'est nécessaire (il est sourcé, pas exécuté).
Définir umask par utilisateur
Pour un réglage personnel, ajoutez la ligne umask 0022 dans ~/.bashrc ou ~/.profile de l'utilisateur concerné.
Cas pratique : créer un partage familial
Pour terminer, mettons tout en pratique en construisant un dossier partagé entre les membres d'une famille.
1) Créer le groupe partagé :
sudo groupadd famille
2) Ajouter les utilisateurs au groupe :
sudo usermod -aG famille alice
sudo usermod -aG famille bob
3) Créer le dossier partagé :
sudo mkdir /srv/famille
sudo chown root:famille /srv/famille
sudo chmod 2775 /srv/famille
Le mode 2775 mérite une explication : le 2 en tête active le bit SGID sur le dossier. Conséquence : tout fichier créé à l'intérieur hérite automatiquement du groupe famille, sans dépendre du groupe principal de la personne qui l'a créé. C'est la clé d'un partage qui « marche tout seul » sans avoir à corriger les permissions à la main à chaque fichier.
4) Définir un umask permissif pour les membres : ajoutez umask 0002 dans le ~/.bashrc d'alice et bob, pour que les fichiers qu'ils créent dans /srv/famille soient modifiables par tout le groupe.
Après reconnexion, chaque membre peut déposer des fichiers dans /srv/famille et tout le monde peut les lire et les modifier — sans intervention de l'administrateur.
Les fichiers de configuration sous-jacents
Toutes ces commandes modifient en réalité quelques fichiers texte. Il est utile de savoir lesquels :
/etc/passwd: la liste des utilisateurs (nom, UID, GID principal, dossier personnel, shell)./etc/shadow: les mots de passe chiffrés et les politiques d'expiration. Lisible uniquement par root./etc/group: la liste des groupes et leurs membres secondaires./etc/gshadow: les mots de passe de groupe (rarement utilisés).
Évitez d'éditer ces fichiers à la main : utilisez plutôt vipw (pour passwd/shadow) ou vigr (pour group/gshadow), qui posent un verrou pendant l'édition pour éviter les corruptions liées aux modifications concurrentes.
En résumé
Les commandes essentielles à retenir :
groupadd <nom>crée un groupe.useradd -m -s /bin/bash <nom>crée un utilisateur avec son dossier personnel.passwd <nom>définit ou réinitialise son mot de passe.usermod -aG <groupe> <nom>ajoute l'utilisateur à un groupe secondaire (le-aest indispensable).usermod -g <groupe> <nom>change le groupe principal.userdel -r <nom>supprime l'utilisateur et son dossier personnel.
Et le combo gagnant pour un partage propre : un groupe dédié, le bit SGID sur le dossier (chmod 2775), et un umask 0002 pour les membres concernés.