Skip to content

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
id

Exemple 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 -l et 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 :

  1. Nom de connexion (login) : Le nom que vous tapez pour vous connecter.
  2. Mot de passe : Chiffré et stocké dans un fichier sécurisé.
  3. UID : L'identifiant numérique unique.
  4. GID : L'identifiant du groupe principal.
  5. Descriptif (Commentaire) : Souvent le nom complet de l'utilisateur.
  6. Répertoire personnel (Home directory) : Son dossier de travail, généralement /home/username.
  7. Shell de connexion : L'interpréteur de commandes lancé à sa connexion (ex: /bin/bash).

Règles pour les noms d'utilisateur

  • Sensible à la casse : Bob et bob sont 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-data pour 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_utilisateur

Changer 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 sudo ou wheel permet d'utiliser la commande sudo.
  • 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 :

GroupeGID typiqueDescriptionExemples d'utilisation
root0Groupe du super-utilisateurTous les privilèges administrateur
sudo27Permet l'exécution de commandes avec sudoAdministration système sur Ubuntu/Debian
wheel10Équivalent de sudo sur certaines distributionsAdministration système sur CentOS/RHEL
adm4Accès aux logs systèmeLecture des fichiers dans /var/log/
sys3Accès aux périphériques systèmeContrôle des dispositifs système
tty5Accès aux terminauxUtilisation des terminaux virtuels
disk6Accès direct aux disquesManipulation des partitions (dangereux)
lp7Gestion des imprimantesUtilisation et administration des imprimantes
mail8Gestion du courrier électroniqueAccès aux boîtes mail système
news9Système de news/forumsServeurs de news (rarement utilisé)
www-data33Serveur web Apache/NginxExécution des services web
backup34Système de sauvegardeScripts et outils de backup
operator37Opérateurs systèmeTâches d'administration limitées
users100Groupe par défaut des utilisateurs normauxUtilisateurs standards
nogroup65534Groupe sans privilègesProcessus avec droits minimaux
audiovariableAccès aux périphériques audioUtilisation du son
videovariableAccès aux périphériques vidéoUtilisation de la vidéo, webcam
plugdevvariablePériphériques amoviblesMontage de clés USB, disques externes
netdevvariableConfiguration réseauGestion des connexions réseau
bluetoothvariableGestion BluetoothUtilisation des périphériques Bluetooth
dialoutvariableAccès aux modems et ports sérieCommunication série
cdromvariableAccès aux lecteurs CD/DVDMontage et lecture des CD/DVD
floppyvariableAccès aux lecteurs de disquettesMontage des disquettes (obsolète)

💡 Note importante : Les GID exacts peuvent varier selon la distribution Linux. Utilisez getent group nom_groupe pour 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 disk donnent 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 root ne 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 par root.

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

  1. login : ggarneau
  2. password : x signifie que le mot de passe chiffré est dans /etc/shadow. Un ! signifierait que le compte est verrouillé.
  3. UID : 1000
  4. GID : 1000 (son groupe primaire)
  5. comment : Gilles Garneau
  6. homedir : /home/ggarneau
  7. 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 Additions

usr/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

  1. group : sudo
  2. password : x (rarement utilisé, le mot de passe du groupe est dans /etc/gshadow).
  3. GID : 27
  4. user_list : ggarneau,aminata sont 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

ChampDescription
loginLe nom de l'utilisateur.
encrypted_passwordLe mot de passe chiffré. Un ! ou * signifie que le compte est verrouillé.
lastchangeLe nombre de jours depuis le 1er janvier 1970 que le mot de passe a été changé pour la dernière fois.
mindaysLe nombre minimum de jours avant de pouvoir changer le mot de passe.
maxdaysLe nombre maximum de jours avant que le mot de passe doive être changé.
warndaysLe nombre de jours avant l'expiration du mot de passe où l'utilisateur sera averti.
inactiveLe nombre de jours après l'expiration du mot de passe avant que le compte soit désactivé.
expireLe nombre de jours depuis le 1er janvier 1970 après lequel le compte sera désactivé.
reservedRé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 :

OptionDescriptionExemple d'usage
-mCrée le répertoire personnel de l'utilisateur. Indispensable !useradd -m bob
-g GROUPDéfinit le groupe principal.useradd -g users bob
-G GROUPSAjoute l'utilisateur à des groupes secondaires (séparés par des virgules).useradd -G sudo,dev bob
-d HOMEDIRSpé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 SHELLDéfinit le shell par défaut.useradd -s /bin/zsh bob
-e DATEDé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 aminata

passwd : 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) :

    bash
    passwd

    (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) :

    bash
    sudo passwd bob

    (Aucun ancien mot de passe n'est demandé.)

Options utiles (pour root) :

OptionDescription
-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 :

OptionDescription
-aG GROUPSAjoute (append) l'utilisateur à des groupes secondaires sans le retirer des autres groupes. Toujours utiliser avec -G !
-d HOMEDIRChange le répertoire personnel. Utiliser avec -m pour déplacer les fichiers existants.
-mDéplace le contenu du répertoire personnel vers le nouveau chemin spécifié avec -d.
-l NEW_LOGINChange le nom de connexion (login).
-LVerrouille le compte (équivalent à passwd -l).
-UDéverrouille le compte (équivalent à passwd -u).
-s SHELLChange 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 -a pour "append" est cruciale ici !)

  • Changer le shell par défaut d'un utilisateur :

    bash
    sudo usermod -s /usr/bin/zsh aminata
  • Renommer 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 bob

    Ajouter un utilisateur au groupe sudo :

    bash
    sudo usermod -aG sudo bob

userdel : Supprimer un utilisateur

Rôle : Supprime un compte utilisateur.

Syntaxe : userdel [options] utilisateur

Options importantes :

OptionDescription
-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 bob

Commandes 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 developers

groupmod : 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 developers

gpasswd : 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 :

OptionDescription
-a USERAjoute un utilisateur au groupe.
-d USERSupprime un utilisateur du groupe.
-M USERSDé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 devs

groupdel : 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/zsh

Il faudra vous déconnecter et vous reconnecter pour que le changement soit pris en compte, ou démarrer un nouveau terminal.

Bonnes pratiques à retenir

  1. Toujours utiliser les commandes dédiées (useradd, usermod...) plutôt que d'éditer les fichiers de configuration à la main.
  2. Toujours utiliser l'option -m avec useradd pour créer le répertoire personnel.
  3. Toujours utiliser l'option -r avec userdel pour une suppression propre.
  4. Utiliser gpasswd ou usermod -aG pour ajouter des utilisateurs à des groupes.
  5. Documenter les comptes système que vous créez et leur utilité.

Résumé des commandes principales

ActionCommandeExemple
Créer un utilisateuruseraddsudo useradd -m -G sudo aminata
Modifier un mot de passepasswdsudo passwd aminata
Modifier un utilisateurusermodsudo usermod -aG developers aminata
Supprimer un utilisateuruserdelsudo userdel -r aminata
Créer un groupegroupaddsudo groupadd developers
Gérer les membres d'un groupegpasswdsudo gpasswd -a aminata developers
Supprimer un groupegroupdelsudo groupdel developers
Voir les informationsid, groupsid aminata
Gérer l'expirationchagesudo 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

.