Appearance
Gestion des utilisateurs et des groupes sous Linux
La gestion des utilisateurs est une compétence fondamentale pour tout administrateur système Linux. Chaque action, chaque fichier, chaque processus sur le système est lié à un utilisateur. Comprendre comment les créer, les modifier et les gérer est donc essentiel pour la sécurité et l'organisation de votre environnement.
Ce cours vous guidera à travers les concepts de base, les fichiers de configuration et les commandes essentielles.
Principes de base
Qu'est-ce qu'un utilisateur ?
Sur Linux, un utilisateur n'est pas simplement un nom. C'est l'association d'un nom de connexion (le login) à des identifiants numériques uniques :
- UID (User ID) : L'identifiant numérique de l'utilisateur.
- GID (Group ID) : L'identifiant numérique du groupe principal de l'utilisateur.
Pour visualiser rapidement vos propres identifiants, utilisez la commande id :
bash
idExemple de sortie :
uid=1000(ggarneau) gid=1000(ggarneau) groups=1000(ggarneau),27(sudo),100(users)Ici, l'utilisateur ggarneau a l'UID 1000, son groupe principal est ggarneau (GID 1000), et il appartient aussi aux groupes secondaires sudo et users.
L'importance des identifiants uniques
En principe, les UID et GID sont uniques sur un système. Le système d'exploitation se base sur ces numéros, et non sur les noms, pour gérer les permissions.
- Il est techniquement possible d'avoir plusieurs utilisateurs avec le même UID, mais c'est une très mauvaise pratique qui peut entraîner des problèmes de sécurité et de permissions.
- Les noms (
ggarneau,root, etc.) sont des alias conçus pour être lus et mémorisés facilement par les humains.
💡 Le saviez-vous ? Quand vous faites
ls -let que vous voyez le nom du propriétaire d'un fichier, le système a en réalité lu l'UID du propriétaire dans la table des inodes et l'a simplement "traduit" en nom lisible pour vous !
Les utilisateurs en détail
Attributs d'un utilisateur
Chaque utilisateur est défini par plusieurs attributs essentiels :
- Nom de connexion (login) : Le nom que vous tapez pour vous connecter.
- Mot de passe : Chiffré et stocké dans un fichier sécurisé.
- UID : L'identifiant numérique unique.
- GID : L'identifiant du groupe principal.
- Descriptif (Commentaire) : Souvent le nom complet de l'utilisateur.
- Répertoire personnel (Home directory) : Son dossier de travail, généralement
/home/username. - Shell de connexion : L'interpréteur de commandes lancé à sa connexion (ex:
/bin/bash).
Règles pour les noms d'utilisateur
- Sensible à la casse :
Bobetbobsont deux utilisateurs différents. - Longueur : La limite est souvent de 32 caractères, mais il est recommandé de s'en tenir à 8 caractères pour une meilleure compatibilité avec d'anciens systèmes.
- Caractères : Utilisez des lettres minuscules, des chiffres et le tiret (
-) ou le souligné (_). - Important : Le nom ne doit pas commencer par un chiffre.
Les différents types d'UID
Les UID ne sont pas tous créés égaux. Ils sont généralement répartis en trois catégories :
- UID 0 : Réservé à l'utilisateur root, le super-utilisateur qui a tous les droits.
- UID 1 à 999 (variable) : Réservés aux comptes système, utilisés par les services et les démons (ex:
www-datapour un serveur web). Un démon est un programme qui tourne en arrière-plan pour fournir un service (comme un serveur web, un serveur de base de données, etc.). - UID ≥ 1000 : Attribués aux utilisateurs "normaux" (vous, vos collègues, etc.).
Les groupes
À quoi servent les groupes ?
Un groupe est un ensemble d'utilisateurs. C'est un mécanisme puissant pour gérer les permissions sur des fichiers et des dossiers partagés.
Un utilisateur appartient toujours à :
- Un groupe primaire (obligatoire).
- Zéro ou plusieurs groupes secondaires (optionnels).
L'appartenance à un groupe donne à l'utilisateur les permissions associées à ce groupe.
Commandes utiles pour les groupes
Voir les groupes d'un utilisateur
bash
# Pour l'utilisateur courant
groups
# Pour un utilisateur spécifique
groups nom_utilisateurChanger temporairement de groupe primaire
La commande newgrp ouvre un nouveau shell où votre groupe primaire est celui que vous spécifiez.
bash
newgrp [nom_de_groupe]⚠️ Attention : Ce changement n'est actif que dans le terminal où la commande a été lancée. Fermez le terminal, et tout redevient comme avant !
Utilité: Permet de tester les permissions d'un groupe sans avoir à se déconnecter et reconnecter.
Groupe primaire vs groupes secondaires
Groupe primaire
- C'est le groupe qui est automatiquement assigné aux nouveaux fichiers et dossiers que vous créez.
- Chaque utilisateur n'a qu'un seul groupe primaire.
- Il est défini dans le fichier
/etc/passwd.
Groupes secondaires
- Ce sont tous les autres groupes auxquels un utilisateur appartient.
- Ils servent à accorder des droits supplémentaires. Par exemple, appartenir au groupe
sudoouwheelpermet d'utiliser la commandesudo. - Ils sont définis dans le fichier
/etc/group.
Principaux groupes d'utilisateurs dans Linux
Chaque distribution Linux contient des groupes par défaut qui ont des rôles spécifiques. Voici les plus importants :
| Groupe | GID typique | Description | Exemples d'utilisation |
|---|---|---|---|
root | 0 | Groupe du super-utilisateur | Tous les privilèges administrateur |
sudo | 27 | Permet l'exécution de commandes avec sudo | Administration système sur Ubuntu/Debian |
wheel | 10 | Équivalent de sudo sur certaines distributions | Administration système sur CentOS/RHEL |
adm | 4 | Accès aux logs système | Lecture des fichiers dans /var/log/ |
sys | 3 | Accès aux périphériques système | Contrôle des dispositifs système |
tty | 5 | Accès aux terminaux | Utilisation des terminaux virtuels |
disk | 6 | Accès direct aux disques | Manipulation des partitions (dangereux) |
lp | 7 | Gestion des imprimantes | Utilisation et administration des imprimantes |
mail | 8 | Gestion du courrier électronique | Accès aux boîtes mail système |
news | 9 | Système de news/forums | Serveurs de news (rarement utilisé) |
www-data | 33 | Serveur web Apache/Nginx | Exécution des services web |
backup | 34 | Système de sauvegarde | Scripts et outils de backup |
operator | 37 | Opérateurs système | Tâches d'administration limitées |
users | 100 | Groupe par défaut des utilisateurs normaux | Utilisateurs standards |
nogroup | 65534 | Groupe sans privilèges | Processus avec droits minimaux |
audio | variable | Accès aux périphériques audio | Utilisation du son |
video | variable | Accès aux périphériques vidéo | Utilisation de la vidéo, webcam |
plugdev | variable | Périphériques amovibles | Montage de clés USB, disques externes |
netdev | variable | Configuration réseau | Gestion des connexions réseau |
bluetooth | variable | Gestion Bluetooth | Utilisation des périphériques Bluetooth |
dialout | variable | Accès aux modems et ports série | Communication série |
cdrom | variable | Accès aux lecteurs CD/DVD | Montage et lecture des CD/DVD |
floppy | variable | Accès aux lecteurs de disquettes | Montage des disquettes (obsolète) |
💡 Note importante : Les GID exacts peuvent varier selon la distribution Linux. Utilisez
getent group nom_groupepour connaître le GID d'un groupe spécifique sur votre système.
Exemples pratiques
bash
# Voir les membres du groupe sudo
getent group sudo
# Ajouter un utilisateur au groupe audio pour accès au son
sudo usermod -aG audio aminata
# Ajouter un utilisateur au groupe plugdev pour monter des périphériques USB
sudo usermod -aG plugdev bob
# Voir tous les groupes d'un utilisateur
groups nom_utilisateur⚠️ Attention : Certains groupes comme
diskdonnent un accès direct aux partitions et peuvent être dangereux. Ne les utilisez qu'en connaissance de cause.
Les mots de passe
La sécurité des comptes repose en grande partie sur la robustesse des mots de passe.
Chiffrement
Sur un système Linux moderne, les mots de passe ne sont jamais stockés en clair. Ils sont chiffrés à l'aide d'algorithmes robustes (comme SHA-512).
- Même l'administrateur
rootne peut pas "lire" votre mot de passe. Il peut seulement le réinitialiser. - Les mots de passe chiffrés sont stockés dans le fichier
/etc/shadow, qui n'est lisible que parroot.
Contraintes et politiques
Un administrateur peut définir des règles strictes pour les mots de passe afin d'améliorer la sécurité :
- Complexité minimale (longueur, présence de chiffres, de symboles...).
- Durée de vie (obliger l'utilisateur à changer son mot de passe tous les 90 jours, par exemple).
- Historique (empêcher la réutilisation d'un ancien mot de passe).
Fichiers de configuration
La configuration des utilisateurs et des groupes repose principalement sur 4 fichiers texte situés dans le répertoire /etc/.
1. /etc/passwd : La carte d'identité des utilisateurs
- Contient : La liste de tous les utilisateurs du système.
- Permissions : Lisible par tout le monde, mais modifiable uniquement par
root.
Format (7 champs séparés par :) : login:password:UID:GID:comment:homedir:shell
Exemple : ggarneau:x:1000:1000:Gilles Garneau:/home/ggarneau:/bin/bash
- login :
ggarneau - password :
xsignifie que le mot de passe chiffré est dans/etc/shadow. Un!signifierait que le compte est verrouillé. - UID :
1000 - GID :
1000(son groupe primaire) - comment :
Gilles Garneau - homedir :
/home/ggarneau - shell :
/bin/bash
Exemple complet
bash
zil@MyDebian:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash # super-utilisateur
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin # utilisé pour les services système
bin:x:2:2:bin:/bin:/usr/sbin/nologin # utilisé pour les programmes système
sys:x:3:3:sys:/dev:/usr/sbin/nologin # utilisé pour les périphériques système
sync:x:4:65534:sync:/bin:/bin/sync # utilisé pour la commande sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin # utilisé pour les jeux
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin # accès aux pages de manuel
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin # gestion du courrier électronique
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin # serveur web
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin # système de sauvegarde
systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin # gestion réseau
dhcpcd:x:100:65534:DHCP Client Daemon:/usr/lib/dhcpcd:/bin/false # client DHCP
systemd-timesync:x:991:991:systemd Time Synchronization:/:/usr/sbin/nologin # synchronisation de l'heure
sshd:x:989:65534:sshd user:/run/sshd:/usr/sbin/nologin # serveur SSH
usbmux:x:104:46:usbmux daemon:/var/lib/usbmux:/usr/sbin/nologin # gestion USB
Debian-gdm:x:111:115:Gnome Display Manager:/var/lib/gdm3:/bin/false # gestionnaire d'affichage
zil:x:1000:1000:zil,,,:/home/zil:/bin/bash # utilisateur normal
bob:x:1001:1001::/home/bob:/bin/sh # autre utilisateur normal
vboxadd:x:997:1::/var/run/vboxadd:/bin/false # utilisateur pour VirtualBox Guest Additionsusr/sbin/nologinou /bin/false indique que l'utilisateur ne peut pas se connecter directement au système. Cela est souvent le cas pour les comptes système utilisés par des services ou des démons.
2. /etc/group : Le registre des groupes
- Contient : La définition de tous les groupes et la liste de leurs membres secondaires.
Format (4 champs séparés par :) : group:password:GID:user_list
Exemple : sudo:x:27:ggarneau,aminata
- group :
sudo - password :
x(rarement utilisé, le mot de passe du groupe est dans/etc/gshadow). - GID :
27 - user_list :
ggarneau,aminatasont des membres secondaires de ce groupe.
3. /etc/shadow : Le coffre-fort des mots de passe
- Contient : Les mots de passe chiffrés et les règles d'expiration.
- Permissions : Lisible et modifiable uniquement par
root. C'est un fichier très sensible.
Format (9 champs séparés par :) : login:encrypted_password:lastchange:mindays:maxdays:warndays:inactive:expire:reserved
| Champ | Description |
|---|---|
login | Le nom de l'utilisateur. |
encrypted_password | Le mot de passe chiffré. Un ! ou * signifie que le compte est verrouillé. |
lastchange | Le nombre de jours depuis le 1er janvier 1970 que le mot de passe a été changé pour la dernière fois. |
mindays | Le nombre minimum de jours avant de pouvoir changer le mot de passe. |
maxdays | Le nombre maximum de jours avant que le mot de passe doive être changé. |
warndays | Le nombre de jours avant l'expiration du mot de passe où l'utilisateur sera averti. |
inactive | Le nombre de jours après l'expiration du mot de passe avant que le compte soit désactivé. |
expire | Le nombre de jours depuis le 1er janvier 1970 après lequel le compte sera désactivé. |
reserved | Réservé pour un usage futur. |
Ce fichier contient des informations détaillées sur la politique de mot de passe (date du dernier changement, durée de vie, etc.).
4. /etc/gshadow : La sécurité des groupes
- Contient : Des informations de sécurité pour les groupes, comme un mot de passe de groupe ou des administrateurs de groupe.
- Ce fichier n'est pas toujours utilisé par défaut sur toutes les distributions.
⚠️ Important
Bien qu'il soit instructif de connaître la structure de ces fichiers, il est fortement déconseillé de les modifier manuellement. Utilisez toujours les commandes dédiées (useradd, usermod, etc.) pour éviter les erreurs et garantir la cohérence du système.
Commandes de gestion des utilisateurs
Toutes les commandes suivantes doivent être exécutées avec des privilèges root (par exemple, en utilisant sudo).
useradd : Créer un utilisateur
Rôle : Ajoute un nouveau compte utilisateur.
Syntaxe de base : useradd [options] login
Options les plus courantes :
| Option | Description | Exemple d'usage |
|---|---|---|
-m | Crée le répertoire personnel de l'utilisateur. Indispensable ! | useradd -m bob |
-g GROUP | Définit le groupe principal. | useradd -g users bob |
-G GROUPS | Ajoute l'utilisateur à des groupes secondaires (séparés par des virgules). | useradd -G sudo,dev bob |
-d HOMEDIR | Spécifie un chemin pour le répertoire personnel. | useradd -d /srv/web/bob bob |
-c "COMMENT" | Ajoute un commentaire (souvent le nom complet). | useradd -c "Bob L'éponge" bob |
-s SHELL | Définit le shell par défaut. | useradd -s /bin/zsh bob |
-e DATE | Définit une date d'expiration pour le compte (format YYYY-MM-DD). | useradd -e 2025-12-31 bob |
✅ Exemple complet :
bash
# Crée un utilisateur 'aminata' avec :
# - un répertoire personnel /home/aminata (-m)
# - le commentaire "Aminata compte dev" (-c)
# - le shell /bin/bash (-s)
# - une appartenance aux groupes secondaires 'users' et 'dev' (-G)
sudo useradd -m -c "Aminata compte dev" -s /bin/bash -G users,dev aminatapasswd : Définir et gérer les mots de passe
Rôle : Attribue ou modifie le mot de passe d'un utilisateur. Permet aussi de verrouiller/déverrouiller un compte.
Syntaxe : passwd [options] [utilisateur]
Usages courants :
Changer son propre mot de passe (en tant qu'utilisateur normal) :
bashpasswd(Le système vous demandera votre ancien mot de passe par sécurité.)
Définir/réinitialiser le mot de passe d'un autre utilisateur (en tant que
root) :bashsudo passwd bob(Aucun ancien mot de passe n'est demandé.)
Options utiles (pour root) :
| Option | Description |
|---|---|
-l (lock) | Verrouille le compte. L'utilisateur ne peut plus se connecter. |
-u (unlock) | Déverrouille le compte. |
-d (delete) | Supprime le mot de passe. L'utilisateur peut se connecter sans mot de passe (⚠️ dangereux). |
-S (status) | Affiche le statut du compte (verrouillé, mot de passe défini, etc.). |
usermod : Modifier un utilisateur
Rôle : Modifie les attributs d'un compte existant. Les options sont très similaires à useradd.
Syntaxe : usermod [options] utilisateur
Options importantes :
| Option | Description |
|---|---|
-aG GROUPS | Ajoute (append) l'utilisateur à des groupes secondaires sans le retirer des autres groupes. Toujours utiliser avec -G ! |
-d HOMEDIR | Change le répertoire personnel. Utiliser avec -m pour déplacer les fichiers existants. |
-m | Déplace le contenu du répertoire personnel vers le nouveau chemin spécifié avec -d. |
-l NEW_LOGIN | Change le nom de connexion (login). |
-L | Verrouille le compte (équivalent à passwd -l). |
-U | Déverrouille le compte (équivalent à passwd -u). |
-s SHELL | Change le shell par défaut. |
Exemples pratiques :
Ajouter un utilisateur à un nouveau groupe secondaire :
bash# Ajoute aminata au groupe 'sudo' sans enlever ses autres groupes sudo usermod -aG sudo aminata(L'option
-apour "append" est cruciale ici !)Changer le shell par défaut d'un utilisateur :
bashsudo usermod -s /usr/bin/zsh aminataRenommer un utilisateur et déplacer son dossier personnel :
bash# Renomme 'bob' en 'robert', déplace /home/bob vers /home/robert sudo usermod -l robert -d /home/robert -m bobAjouter un utilisateur au groupe
sudo:bashsudo usermod -aG sudo bob
userdel : Supprimer un utilisateur
Rôle : Supprime un compte utilisateur.
Syntaxe : userdel [options] utilisateur
Options importantes :
| Option | Description |
|---|---|
-r (remove) | Supprime également le répertoire personnel et la boîte mail de l'utilisateur. |
-f (force) | Force la suppression, même si l'utilisateur est actuellement connecté. |
Exemples :
bash
# Suppression simple (conserve le répertoire personnel)
sudo userdel bob
# ✅ Suppression complète et recommandée
sudo userdel -r bobCommandes de gestion des groupes
groupadd : Créer un groupe
Rôle : Crée un nouveau groupe.
Syntaxe : groupadd [options] nom_groupe
Exemple :
bash
# Crée un groupe 'developers' avec un GID spécifique
sudo groupadd -g 1500 developersgroupmod : Modifier un groupe
Rôle : Modifie les attributs d'un groupe, comme son nom ou son GID.
Syntaxe : groupmod [options] nom_groupe
Exemple :
bash
# Renomme le groupe 'developers' en 'devs'
sudo groupmod -n devs developersgpasswd : Gérer les membres d'un groupe
Rôle : C'est l'outil le plus pratique pour ajouter ou retirer des membres d'un groupe.
Syntaxe : gpasswd [options] groupe
Options principales :
| Option | Description |
|---|---|
-a USER | Ajoute un utilisateur au groupe. |
-d USER | Supprime un utilisateur du groupe. |
-M USERS | Définit la liste complète des membres (remplace la liste existante). |
Exemples :
bash
# Ajoute 'aminata' au groupe 'devs'
sudo gpasswd -a aminata devs
# Retire 'bob' du groupe 'devs'
sudo gpasswd -d bob devsgroupdel : Supprimer un groupe
Rôle : Supprime un groupe.
Syntaxe : groupdel nom_groupe
⚠️ Attention : Vous ne pouvez pas supprimer un groupe s'il est le groupe primaire d'un ou plusieurs utilisateurs. Vous devez d'abord changer le groupe primaire de ces utilisateurs avec
usermod.
Commandes et astuces utiles
chage : Gérer l'expiration des mots de passe
La commande chage (pour CHange AGE) est un outil puissant pour gérer la politique de vieillissement des mots de passe, en modifiant directement les champs du fichier /etc/shadow.
Syntaxe : chage [options] utilisateur
- Afficher la politique d'un utilisateur :bash
sudo chage -l aminata - Forcer un utilisateur à changer son mot de passe à sa prochaine connexion :bash
# Met la date du dernier changement de mot de passe à 0 sudo chage -d 0 aminata
chsh : Changer son shell par défaut
Si vous souhaitez changer votre propre shell de connexion (passer de bash à zsh par exemple).
bash
chsh -s /bin/zshIl faudra vous déconnecter et vous reconnecter pour que le changement soit pris en compte, ou démarrer un nouveau terminal.
Bonnes pratiques à retenir
- ✅ Toujours utiliser les commandes dédiées (
useradd,usermod...) plutôt que d'éditer les fichiers de configuration à la main. - ✅ Toujours utiliser l'option
-mavecuseraddpour créer le répertoire personnel. - ✅ Toujours utiliser l'option
-ravecuserdelpour une suppression propre. - ✅ Utiliser
gpasswdouusermod -aGpour ajouter des utilisateurs à des groupes. - ✅ Documenter les comptes système que vous créez et leur utilité.
Résumé des commandes principales
| Action | Commande | Exemple |
|---|---|---|
| Créer un utilisateur | useradd | sudo useradd -m -G sudo aminata |
| Modifier un mot de passe | passwd | sudo passwd aminata |
| Modifier un utilisateur | usermod | sudo usermod -aG developers aminata |
| Supprimer un utilisateur | userdel | sudo userdel -r aminata |
| Créer un groupe | groupadd | sudo groupadd developers |
| Gérer les membres d'un groupe | gpasswd | sudo gpasswd -a aminata developers |
| Supprimer un groupe | groupdel | sudo groupdel developers |
| Voir les informations | id, groups | id aminata |
| Gérer l'expiration | chage | sudo chage -l aminata |
Quiz 🎉
👋🏾 Cliquez sur la bonne réponse.
1 / 18 👉🏾 Quel est l'identifiant numérique unique d'un utilisateur sous Linux ?
A. GID
B. UID
C. SID
D. PID