$ carnet-linux
PHASE 1 · MODULE 04

Utilisateurs, groupes & permissions

Linux est multi-utilisateur depuis sa naissance : chaque fichier appartient à quelqu'un, et neuf petites lettres décident de qui peut le lire, le modifier ou l'exécuter. Comprendre ce mécanisme, c'est comprendre toute la sécurité du système.

⏱️ Lecture ~50 min 🧪 Pratique ~1 h 30 🎚️ Niveau débutant → intermédiaire
Tux

🎯 Ce que tu sauras à la fin

👥

Comptes

Lire /etc/passwd, créer des utilisateurs et des groupes.

👑

root et sudo

Utiliser les droits d'administrateur à bon escient.

🔐

Permissions

Décoder rwxr-xr-x et le modifier avec chmod.

✨

Cas spéciaux

umask, SUID, sticky bit et ACL.

Utilisateurs et groupes

Pour le noyau, un utilisateur n'est pas un nom mais un numéro : l'UID (User ID). De même, chaque groupe a un GID. Les noms ne sont qu'une traduction pour les humains, stockée dans des fichiers texte de /etc.

user@ubuntu:~$ whoami
user
user@ubuntu:~$ id
uid=1000(user) gid=1000(user) groupes=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),114(lpadmin)

Le premier compte créé à l'installation reçoit l'UID 1000 et appartient au groupe sudo : c'est ce qui lui donne le droit d'administrer.

UIDQui ?
0root, l'administrateur. Tous les droits, sans exception.
1 à 999Comptes système : services qui tournent en arrière-plan (www-data pour le serveur web, syslog…). Personne ne s'y connecte.
1000 et plusLes humains : toi et les autres utilisateurs.

Le fichier /etc/passwd

Malgré son nom, il ne contient plus de mot de passe depuis longtemps : juste la liste des comptes, un par ligne, en 7 champs séparés par :.

useridentifiant
xmot de passedans /etc/shadow
1000UID
1000GIDgroupe principal
user,,,description
/home/userdossier perso
/bin/bashshell
FichierContenuLisible par
/etc/passwdLes comptesTout le monde
/etc/shadowLes mots de passe hachés (jamais en clair) et leur date d'expirationroot uniquement
/etc/groupLes groupes et leurs membresTout le monde
Un compte système n'a pas de vrai shell

Regarde les dernières colonnes de /etc/passwd : beaucoup de comptes ont pour shell /usr/sbin/nologin. Impossible de s'y connecter : ils existent seulement pour qu'un service tourne avec ses propres droits, isolé du reste.

root, sudo et le moindre privilège

▶ Vidéo · 1 min 30root, sudo et le moindre privilègepourquoi on ne travaille jamais en root
Animation réalisée pour ce cours. Voix off et musique générées par IA (Google Gemini et Lyria).

root peut tout faire, y compris détruire le système en une commande. D'où le principe du moindre privilège : on travaille avec un compte normal, et on n'emprunte les droits de root que pour une commande précise, avec sudo.

user@ubuntu:~$ cat /etc/shadow
cat: /etc/shadow: Permission non accordée
user@ubuntu:~$ sudo head -n 2 /etc/shadow
[sudo] Mot de passe de user :
root:*:19800:0:99999:7:::
daemon:*:19800:0:99999:7:::
CommandeEffet
sudo commandeExécute une commande en tant que root. Demande ton mot de passe, mémorisé 15 minutes.
sudo -u alice commandeExécute une commande en tant qu'un autre utilisateur
sudo -iOuvre un shell root complet (invite #). À utiliser avec parcimonie, et à quitter avec exit.
sudo -lListe ce que tu as le droit de faire avec sudo
su - aliceDevient alice (demande le mot de passe d'alice)
Qui a droit à sudo ?

Sur Ubuntu, les membres du groupe sudo. Les règles complètes sont dans /etc/sudoers, qu'on ne modifie jamais directement mais avec sudo visudo : il vérifie la syntaxe avant d'enregistrer. Une erreur dans ce fichier peut te priver de sudo. Chaque utilisation de sudo est journalisée dans /var/log/auth.log.

sudo n'est pas une formule magique

« Permission denied » est une protection, pas un obstacle à contourner. Avant d'ajouter sudo, demande-toi si l'action est normale. Et ne colle jamais une commande trouvée sur Internet qui commence par sudo sans la comprendre.

Créer et gérer des comptes

user@ubuntu:~$ sudo adduser alice               # création interactive (mot de passe, nom complet…)
user@ubuntu:~$ sudo addgroup projet             # créer un groupe
user@ubuntu:~$ sudo usermod -aG projet alice     # ajouter alice au groupe projet
user@ubuntu:~$ groups alice
alice : alice projet
user@ubuntu:~$ su - alice                      # se connecter en tant qu'alice
alice@ubuntu:~$ exit
user@ubuntu:~$ sudo passwd alice                # changer son mot de passe
user@ubuntu:~$ sudo deluser --remove-home alice   # supprimer le compte et son dossier
Le piège de usermod -G

Sans le -a (append), usermod -G projet user remplace tous les groupes secondaires par projet… y compris sudo. Résultat : plus de droits d'administration. Retiens le duo : -aG, toujours.

Les groupes s'appliquent à la connexion

Après avoir ajouté un utilisateur à un groupe, il doit se déconnecter et se reconnecter pour que le changement s'applique à sa session. id affiche les groupes de la session en cours.

adduser et addgroup sont les outils conviviaux de Debian et Ubuntu. Sur d'autres distributions, on utilise les commandes de bas niveau useradd et groupadd, qui demandent plus d'options (useradd -m -s /bin/bash alice).

Les permissions : rwx décodé

▶ Vidéo · 1 min 30rwx décodélire les droits, chmod et la notation octale
Animation réalisée pour ce cours. Voix off et musique générées par IA (Google Gemini et Lyria).
user@ubuntu:~$ ls -l script.sh
-rwxr-xr-- 1 user projet 220 oct. 23 10:12 script.sh
-type- fichier, d dossier
rwxpropriétaire (u)user
r-xgroupe (g)projet
r--autres (o)tout le monde

Chaque trio se lit toujours dans le même ordre : r (read), w (write), x (execute). Un tiret signifie que le droit est absent. Linux applique le premier trio qui te concerne : si tu es le propriétaire, seuls les droits du propriétaire comptent.

DroitSur un fichierSur un dossier
r — 4Lire le contenuLister les noms qu'il contient (ls)
w — 2Modifier le contenuCréer, renommer, supprimer des fichiers dedans
x — 1L'exécuter comme un programmeY entrer (cd) et accéder à ses fichiers
Supprimer dépend du dossier, pas du fichier

Pouvoir supprimer un fichier ne dépend pas de ses propres droits, mais du droit w sur le dossier qui le contient. Un fichier en lecture seule dans ton dossier personnel peut donc être supprimé (rm te demande simplement confirmation).

Modifier avec chmod : la notation symbolique

On combine qui (u propriétaire, g groupe, o autres, a tous), une action (+ ajouter, - retirer, = fixer exactement) et des droits :

user@ubuntu:~$ chmod u+x script.sh          # rendre exécutable pour soi
user@ubuntu:~$ chmod o-r notes.txt          # retirer la lecture aux autres
user@ubuntu:~$ chmod g+w,o= partage.txt     # groupe peut écrire, autres : plus rien
user@ubuntu:~$ chmod -R a+rX public/          # -R : récursif ; X : x seulement sur les dossiers

La notation octale : les administrateurs parlent en chiffres

Chaque droit vaut un nombre : r = 4, w = 2, x = 1. On additionne pour chaque trio, et on obtient trois chiffres :

rwx4+2+1 = 7propriétaire
r-x4+0+1 = 5groupe
r-x4+0+1 = 5autres
755chmod 755le résultat
ValeurDroitsUsage typique
755rwxr-xr-xScripts, programmes, dossiers partagés en lecture
644rw-r--r--Documents, fichiers de configuration
700rwx------Dossier privé
600rw-------Fichiers secrets : clés SSH, mots de passe
777rwxrwxrwxÀ éviter : tout le monde peut tout faire
Le réflexe chmod 777

Face à une erreur de permission, beaucoup de tutoriels conseillent chmod 777. Ça « marche »… en ouvrant le fichier à n'importe qui, y compris à un programme malveillant. Cherche plutôt qui doit accéder au fichier, et donne-lui le droit minimal nécessaire.

Changer le propriétaire : chown et chgrp

user@ubuntu:~$ sudo chown alice rapport.txt           # nouveau propriétaire
user@ubuntu:~$ sudo chown alice:projet rapport.txt    # propriétaire et groupe
user@ubuntu:~$ sudo chgrp -R projet /srv/projet       # groupe, récursivement

Seul root peut donner un fichier à quelqu'un d'autre : d'où le sudo.

Les droits par défaut : umask

Quand tu crées un fichier, qui décide de ses droits ? Le umask, un masque qui retire des droits au maximum possible (666 pour un fichier, 777 pour un dossier).

user@ubuntu:~$ umask
0002
user@ubuntu:~$ touch f.txt; mkdir d; ls -ld f.txt d
drwxrwxr-x 2 user user 4096 oct. 23 10:30 d        # 777 - 002 = 775
-rw-rw-r-- 1 user user    0 oct. 23 10:30 f.txt    # 666 - 002 = 664

Un fichier n'est jamais exécutable à sa création : il faut le décider explicitement avec chmod +x. C'est une sécurité.

Droits spéciaux : SUID, SGID, sticky bit et ACL

🦸

SUID (s chez le propriétaire)

Le programme s'exécute avec les droits de son propriétaire. C'est ainsi que passwd peut écrire dans /etc/shadow.

-rwsr-xr-x /usr/bin/passwd
👪

SGID (s chez le groupe)

Sur un dossier, les fichiers créés dedans héritent de son groupe. Idéal pour un dossier d'équipe.

chmod g+s /srv/projet
📌

Sticky bit (t)

Dans un dossier ouvert à tous, chacun ne peut supprimer que ses fichiers. C'est le cas de /tmp.

drwxrwxrwt /tmp
🎯

ACL

Des droits sur mesure pour un utilisateur précis, au-delà du trio u/g/o. Un + apparaît à la fin des droits dans ls -l.

setfacl -m u:alice:r fichier
user@ubuntu:~$ ls -l /usr/bin/passwd; ls -ld /tmp
-rwsr-xr-x 1 root root 64152 ... /usr/bin/passwd
drwxrwxrwt 18 root root 4096 ... /tmp
user@ubuntu:~$ setfacl -m u:alice:r notes.txt      # paquet acl : sudo apt install acl
user@ubuntu:~$ getfacl notes.txt
user::rw-
user:alice:r--
...

En octal, ces bits forment un quatrième chiffre placé devant : 4 = SUID, 2 = SGID, 1 = sticky. Ainsi chmod 2775 dossier active le SGID.

Glossaire du module

UID / GID
Numéro d'utilisateur / de groupe. root a l'UID 0.
root
Le super-utilisateur, aux droits illimités.
sudo
Exécute une commande avec les droits de root (ou d'un autre utilisateur).
Moindre privilège
Principe : n'accorder que les droits strictement nécessaires.
/etc/passwd
La liste des comptes.
/etc/shadow
Les mots de passe hachés, lisibles par root seulement.
Groupe principal / secondaire
Le groupe par défaut des fichiers créés / les groupes supplémentaires.
rwx
Lire, écrire, exécuter (ou entrer, pour un dossier).
u / g / o / a
Propriétaire, groupe, autres, tous.
Notation octale
Droits en chiffres : r=4, w=2, x=1 (ex. 755).
umask
Masque qui fixe les droits par défaut des nouveaux fichiers.
SUID / SGID / sticky
Droits spéciaux : exécuter en tant que le propriétaire, hériter du groupe, protéger les fichiers d'autrui.
ACL
Liste de contrôle d'accès : droits fins par utilisateur.

🧠 Quiz : as-tu tout retenu ?

1. Quel est l'UID de root ?
root a toujours l'UID 0. Le premier utilisateur humain reçoit 1000.
2. Dans -rwxr-x---, que peuvent faire les « autres » ?
Le dernier trio est --- : aucun droit.
3. À quoi correspond chmod 644 ?
6 = 4+2 (rw-), 4 = r--, 4 = r--.
4. Sur un dossier, que permet le droit x ?
Sans x, impossible de faire cd dans le dossier ou d'ouvrir ses fichiers.
5. Pour ajouter user au groupe docker sans perdre ses autres groupes :
Sans -a, -G remplace tous les groupes secondaires, y compris sudo.
6. Quel mot de passe sudo demande-t-il ?
sudo vérifie que c'est bien toi, puis consulte ses règles. Sur Ubuntu, root n'a même pas de mot de passe par défaut.
7. Pourquoi passwd peut-il modifier /etc/shadow, réservé à root ?
-rwsr-xr-x : le s fait tourner le programme avec les droits de son propriétaire, root.
8. Avec un umask de 0022, quels droits a un nouveau fichier ?
666 − 022 = 644. Les fichiers ne reçoivent jamais x par défaut.
Réponds aux questions pour voir ton score.

🚀 Mission pratique

À faire dans la machine virtuelle

Coche chaque étape une fois faite : sa correction s'affiche juste en dessous.

  • ✅ Correction
    $ id
    uid=1000(user) gid=1000(user) groupes=1000(user),4(adm),27(sudo),...
    $ grep user /etc/passwd
    user:x:1000:1000:user,,,:/home/user:/bin/bash

    grep filtre les lignes contenant un mot : on le détaillera au module 05.

  • ✅ Correction
    $ less /etc/passwd
    $ wc -l /etc/passwd
    37 /etc/passwd

    Presque toutes les lignes sauf root et user sont des comptes système, avec /usr/sbin/nologin ou /bin/false en dernier champ. Le nombre exact dépend des paquets installés.

  • ✅ Correction
    $ cat /etc/shadow
    cat: /etc/shadow: Permission non accordée
    $ sudo cat /etc/shadow
    root:*:...
    user:$y$j9T$...:20384:0:99999:7:::

    Le long texte après user: est le hachage du mot de passe, pas le mot de passe lui-même. Le * de root signifie : pas de mot de passe, connexion directe impossible.

  • ✅ Correction
    $ sudo adduser alice
    $ sudo addgroup projet
    $ sudo usermod -aG projet alice
    $ sudo usermod -aG projet $USER
    $ groups alice
    alice : alice projet

    Pour que ton appartenance au groupe soit active, déconnecte-toi puis reconnecte-toi (ou ouvre un shell avec su - $USER).

  • ✅ Correction
    $ su - alice
    alice$ whoami
    alice
    alice$ ls /home/user
    ls: impossible d'ouvrir le répertoire '/home/user': Permission non accordée
    alice$ exit

    Sur Ubuntu 24.04, les dossiers personnels sont en 750 (drwxr-x---) : les autres utilisateurs n'y entrent pas.

  • ✅ Correction
    $ echo 'echo "Bonjour $USER"' > bonjour.sh
    $ ./bonjour.sh
    bash: ./bonjour.sh: Permission non accordée
    $ chmod u+x bonjour.sh
    $ ./bonjour.sh
    Bonjour user
  • ✅ Correction
    $ echo "code 1234" > secret.txt
    $ chmod 600 secret.txt
    $ ls -l secret.txt
    -rw------- 1 user user 10 ... secret.txt

    Alice ne pourrait de toute façon pas atteindre ton dossier (étape 5). Pour tester sur un fichier qu'elle peut atteindre, place-le dans /tmp.

  • ✅ Correction
    $ sudo mkdir /srv/projet
    $ sudo chown root:projet /srv/projet
    $ sudo chmod 2775 /srv/projet
    $ ls -ld /srv/projet
    drwxrwsr-x 2 root projet 4096 ... /srv/projet
    $ touch /srv/projet/test && ls -l /srv/projet
    -rw-rw-r-- 1 user projet 0 ... test

    Grâce au SGID (s), le fichier créé hérite du groupe projet. Il faut être dans le groupe (reconnecté) pour y écrire.

  • ✅ Correction
    $ ls -l /usr/bin/passwd
    -rwsr-xr-x 1 root root ... /usr/bin/passwd
    $ ls -ld /tmp
    drwxrwxrwt ... /tmp
    $ umask
    0002
  • ✅ Correction
    $ sudo apt install acl
    $ echo "pour alice" > /tmp/partage.txt && chmod 600 /tmp/partage.txt
    $ setfacl -m u:alice:r /tmp/partage.txt
    $ getfacl /tmp/partage.txt
    user::rw-
    user:alice:r--
    $ sudo deluser --remove-home alice

    ls -l affiche alors -rw-r-----+ : le + signale une ACL.

💬 Questions fréquentes

Les questions qui reviennent le plus souvent sur ce module, avec leurs réponses.

Quel est le mot de passe de root sur Ubuntu ?

Il n'y en a pas : le compte root est verrouillé (le * dans /etc/shadow). On passe par sudo, avec son propre mot de passe. C'est plus sûr : chaque action d'administration est attribuée à une personne et journalisée. (Exception : l'installation automatique de VirtualBox définit parfois un mot de passe root, voir le module 00.)

J'ai ajouté mon compte à un groupe, mais id ne le montre pas

Les groupes sont lus à l'ouverture de session. Déconnecte-toi et reconnecte-toi. Pour tester sans fermer la session : su - $USER, ou newgrp projet dans le terminal courant.

« sudo: unable to resolve host … »

Le nom de la machine (hostname) ne figure pas dans /etc/hosts, souvent après un changement de nom. Ajoute la ligne 127.0.1.1 nom-de-la-machine dans /etc/hosts avec sudo nano /etc/hosts. C'est un avertissement : la commande s'exécute quand même.