Un fichier de configuration a disparu après une mise à jour, un service écrit ses logs dans un endroit inattendu, un disque /var est plein sans raison évidente — ces situations sont quotidiennes en administration Linux. La réponse est presque toujours la même : savoir où Linux range chaque type de fichier.
Le Filesystem Hierarchy Standard (FHS) est la convention qui définit cette organisation. Pensez-y comme le plan d’un immeuble de bureaux : chaque étage a une fonction précise (accueil, archives, bureaux, local technique). Si vous connaissez le plan, vous trouvez immédiatement ce que vous cherchez.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Identifier le rôle de chaque zone fonctionnelle de l’arborescence (
/etc/,/var/,/usr/,/run/…) - Savoir où chercher configuration, journaux, binaires et données d’exécution
- Distinguer les particularités entre distributions (Debian/Ubuntu, RHEL/Rocky, Alpine)
- Diagnostiquer un problème en ciblant le bon répertoire
- Éviter les erreurs classiques de placement de fichiers
Le réflexe admin : où chercher ?
Section intitulée « Le réflexe admin : où chercher ? »Avant d’entrer dans le détail, voici la table de décision qu’un administrateur utilise au quotidien :
| Vous cherchez… | Regardez dans… | Commande rapide |
|---|---|---|
| La configuration d’un service | /etc/ | ls /etc/<service>/ |
| Les journaux d’un service | /var/log/ ou journalctl | journalctl -xeu <service> |
| Un binaire ou une commande | /usr/bin/, /usr/sbin/ | which <commande> |
| L’état d’exécution (PID, socket) | /run/ | ls /run/<service>/ |
| Les données persistantes d’un service | /var/lib/ | ls /var/lib/<service>/ |
| Un fichier temporaire | /tmp/ ou /var/tmp/ | ls /tmp/ |
| Les fichiers d’un utilisateur | /home/<utilisateur>/ | ls -la /home/<user>/ |
| Les fichiers de démarrage | /boot/ | ls /boot/ |
| Un périphérique (disque, partition) | /dev/ | lsblk |
Zone par zone : le détail du FHS
Section intitulée « Zone par zone : le détail du FHS »/etc/ — la configuration du système
Section intitulée « /etc/ — la configuration du système »C’est le répertoire le plus consulté par un administrateur. Chaque service installé y dépose sa configuration sous forme de fichiers texte éditables.
Sous-répertoires courants :
| Chemin | Contenu |
|---|---|
/etc/ssh/ | Configuration du serveur et du client SSH (sshd_config, clés host) |
/etc/systemd/ | Surcharges locales des unités systemd |
/etc/apt/ ou /etc/yum.repos.d/ | Sources de paquets (Debian/Ubuntu ou RHEL/Rocky) |
/etc/netplan/ ou /etc/NetworkManager/ | Configuration réseau persistante |
/etc/fstab | Table des montages persistants |
/etc/passwd, /etc/shadow, /etc/group | Comptes utilisateurs et groupes |
/etc/sudoers, /etc/sudoers.d/ | Règles de délégation de privilèges |
/etc/logrotate.d/ | Règles de rotation des journaux |
/etc/crontab, /etc/cron.d/ | Tâches planifiées système |
# Lister les sous-répertoires de /etc pour voir les services configurésls -d /etc/*/Guides associés : Utilisateurs et groupes, sudo, Montage persistant, systemd.
/var/ — les données variables
Section intitulée « /var/ — les données variables »/var/ stocke tout ce qui change au fil du temps : journaux, caches, files d’attente, bases de données de services.
| Chemin | Contenu | Pourquoi c’est important |
|---|---|---|
/var/log/ | Journaux système et applicatifs | Premier endroit à consulter lors d’un incident |
/var/lib/ | État persistant des services (BDD, paquets) | Ne pas supprimer sans comprendre |
/var/cache/ | Caches des gestionnaires de paquets | Nettoyable pour récupérer de l’espace |
/var/spool/ | Files d’attente (impression, mail, cron) | Rarement modifié manuellement |
/var/tmp/ | Fichiers temporaires persistants entre reboots | Plus durable que /tmp/ |
Focus : /var/log/ — les journaux
Section intitulée « Focus : /var/log/ — les journaux »C’est la mine d’or du diagnostic. Le contenu varie selon la distribution :
| Fichier | Contenu |
|---|---|
/var/log/messages | Messages système généraux |
/var/log/secure | Connexions, authentification, sudo |
/var/log/dnf.log | Installations et mises à jour DNF |
/var/log/boot.log | Messages de démarrage |
/var/log/httpd/ | Logs Apache (si installé) |
# Voir l'espace occupé par les journauxdu -sh /var/log/
# Vérifier l'espace restant sur la partitiondf -h /var
# Lire les dernières entrées du journal systèmejournalctl -n 50 --no-pagerGuides associés : Journaux avec journalctl, Rotation avec logrotate, Contrôler l’espace disque.
/usr/ — binaires, bibliothèques et documentation
Section intitulée « /usr/ — binaires, bibliothèques et documentation »/usr/ contient la majorité des programmes et bibliothèques installés par le gestionnaire de paquets. C’est le cœur applicatif du système.
| Chemin | Contenu |
|---|---|
/usr/bin/ | Commandes utilisateur (ls, grep, systemctl, vim…) |
/usr/sbin/ | Commandes d’administration (fdisk, useradd, iptables…) |
/usr/lib/ | Bibliothèques partagées (.so) et fichiers de support |
/usr/lib/systemd/ | Unités systemd fournies par les paquets (ne pas modifier ici) |
/usr/share/ | Documentation, fichiers indépendants de l’architecture |
/usr/local/ | Logiciels installés manuellement (hors gestionnaire de paquets) |
# Vérifier que /bin est bien un lien vers /usr/binls -ld /bin /sbin
# Trouver où se situe une commandewhich systemctltype -a ls
# Voir les bibliothèques utilisées par un programmeldd /usr/bin/ls/opt/ et /usr/local/ : logiciels hors paquets
Section intitulée « /opt/ et /usr/local/ : logiciels hors paquets »Ces deux répertoires servent aux logiciels installés en dehors du gestionnaire de paquets, mais avec des conventions différentes :
| Répertoire | Usage | Exemple |
|---|---|---|
/opt/<éditeur>/ | Application tierce complète, auto-contenue | /opt/google/chrome/, /opt/jetbrains/ |
/usr/local/bin/ | Binaire compilé ou téléchargé manuellement | Script maison, outil Go/Rust compilé |
Guide associé : Gérer les paquets.
/run/, /proc/, /sys/ — données d’exécution volatiles
Section intitulée « /run/, /proc/, /sys/ — données d’exécution volatiles »Ces trois répertoires ne sont pas sur disque. Leur contenu est généré dynamiquement par le noyau et disparaît au reboot.
| Répertoire | Support | Contenu |
|---|---|---|
/run/ | tmpfs | PID files, sockets, verrous, état runtime des services |
/proc/ | procfs | Vue virtuelle sur les processus et le noyau |
/sys/ | sysfs | Vue virtuelle sur le matériel et les pilotes |
# Voir le PID d'un service via /runcat /run/sshd.pid 2>/dev/null || echo "Fichier PID absent (service arrêté ou géré par systemd)"
# Lire des informations sur le CPU via /proccat /proc/cpuinfo | head -20
# Voir la mémoire totalecat /proc/meminfo | grep MemTotal
# Lire un paramètre noyau via /syscat /sys/block/sda/queue/scheduler 2>/dev/nullGuide associé : Gérer les processus.
/home/, /root/, /srv/ — données utilisateur et services
Section intitulée « /home/, /root/, /srv/ — données utilisateur et services »| Répertoire | Propriétaire | Contenu |
|---|---|---|
/home/<user>/ | L’utilisateur | Fichiers personnels, config locale (~/.bashrc, ~/.ssh/) |
/root/ | root | Le home de root (ne pas confondre avec /) |
/srv/ | Services | Données servies par la machine (sites web, dépôts, partages) |
# Voir l'espace occupé par chaque utilisateurdu -sh /home/*/
# Vérifier les droits du home de rootls -ld /root/Guide associé : Utilisateurs et groupes.
/dev/, /mnt/, /media/ — périphériques et montage
Section intitulée « /dev/, /mnt/, /media/ — périphériques et montage »| Répertoire | Contenu |
|---|---|
/dev/ | Fichiers spéciaux représentant les périphériques (disques, terminaux, null, random) |
/mnt/ | Point de montage temporaire pour l’administrateur |
/media/ | Point de montage automatique pour les supports amovibles (USB, CD) |
Fichiers /dev/ courants :
| Périphérique | Représente |
|---|---|
/dev/sda, /dev/sdb | Disques SATA/SAS |
/dev/nvme0n1 | Disque NVMe |
/dev/vda | Disque virtio (VM KVM) |
/dev/null | Puits sans fond (redirigez-y ce que vous voulez ignorer) |
/dev/zero | Source infinie de zéros |
/dev/random, /dev/urandom | Générateurs de nombres aléatoires |
/dev/tty*, /dev/pts/* | Terminaux |
# Lister les disques et partitionslsblk
# Voir les périphériques bloc disponiblesls -l /dev/sd* /dev/nvme* /dev/vd* 2>/dev/nullGuides associés : Vue d’ensemble du stockage, Identifier les disques, Montage persistant.
/boot/ — fichiers de démarrage
Section intitulée « /boot/ — fichiers de démarrage »/boot/ contient le noyau Linux, l’initramfs et la configuration du chargeur de démarrage. C’est un répertoire critique — une modification maladroite peut empêcher le système de démarrer.
| Fichier | Rôle |
|---|---|
vmlinuz-* | Noyau Linux compressé |
initrd.img-* / initramfs-* | Image du système de fichiers initial (pilotes, LVM, chiffrement) |
grub/ | Configuration du chargeur GRUB2 |
config-* | Options de compilation du noyau |
System.map-* | Table des symboles du noyau (debug) |
# Voir les noyaux installésls -lh /boot/vmlinuz-*
# Voir l'espace occupé par /bootdf -h /bootGuide associé : Démarrage et reboot.
/tmp/ et /var/tmp/ — fichiers temporaires
Section intitulée « /tmp/ et /var/tmp/ — fichiers temporaires »| Répertoire | Durée de vie | Nettoyage |
|---|---|---|
/tmp/ | Jusqu’au prochain reboot (souvent tmpfs en RAM) | Automatique au reboot, ou par systemd-tmpfiles |
/var/tmp/ | Persistant entre reboots | Nettoyé périodiquement (30 jours par défaut) |
# Vérifier si /tmp est en RAM (tmpfs)df -Th /tmp
# Voir les fichiers temporaires les plus volumineuxdu -sh /tmp/* 2>/dev/null | sort -rh | head -10Différences entre distributions
Section intitulée « Différences entre distributions »Le FHS est un standard, mais chaque famille de distributions a ses particularités :
| Aspect | Debian / Ubuntu | RHEL / Rocky / Fedora | Alpine |
|---|---|---|---|
| Journal système | /var/log/syslog | /var/log/messages | /var/log/messages |
| Logs d’authentification | /var/log/auth.log | /var/log/secure | /var/log/messages |
| Logs paquets | /var/log/dpkg.log | /var/log/dnf.log | — |
| Config réseau | /etc/netplan/ | /etc/NetworkManager/ | /etc/network/ |
| Config paquets | /etc/apt/ | /etc/yum.repos.d/ | /etc/apk/ |
| Init (PID 1) | systemd | systemd | OpenRC |
| usr-merge | ✅ (Debian 12+) | ✅ (RHEL 9+) | ❌ (séparé) |
Mini-lab : explorer le FHS sur un système réel
Section intitulée « Mini-lab : explorer le FHS sur un système réel »Ces commandes ne modifient rien. Elles vous aident à vérifier votre compréhension.
-
Repérer les zones fonctionnelles
Fenêtre de terminal # Voir les répertoires racinels -ld /etc /var /usr /run /proc /sys /boot /tmp /home /dev /srv /opt -
Identifier les fichiers de configuration d’un service
Fenêtre de terminal # Exemple avec SSHls -la /etc/ssh/cat /etc/ssh/sshd_config | head -30 -
Trouver où un service stocke ses données
Fenêtre de terminal # Données persistantesls /var/lib/ | head -20# Journauxls /var/log/ | head -20 -
Vérifier les systèmes de fichiers virtuels
Fenêtre de terminal # /proc et /sys ne sont pas sur disquedf -Th /proc /sys /run /tmp -
Confirmer le usr-merge
Fenêtre de terminal # Sur une distribution moderne, /bin est un lienls -ld /bin /sbin /lib
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
No space left on device sur /var | Journaux ou caches trop volumineux | du -sh /var/log/* | sort -rh, puis journalctl --vacuum-size=500M ou apt clean |
| Fichier de config modifié mais pas pris en compte | Édité dans /usr/lib/systemd/ au lieu de /etc/systemd/system/ | Créer une surcharge dans /etc/ et relancer systemctl daemon-reload |
| Commande introuvable après installation manuelle | Binaire placé hors du PATH | Déplacer vers /usr/local/bin/ ou ajouter le chemin au PATH |
/boot plein, impossible de mettre à jour le noyau | Anciens noyaux non purgés | apt autoremove (Debian) ou dnf remove --oldinstallonly (RHEL) |
| Fichier temporaire disparu après reboot | Placé dans /tmp/ (tmpfs, vidé au reboot) | Utiliser /var/tmp/ pour les fichiers qui doivent survivre au reboot |
Permission denied sur un fichier dans /run/ | Fichier PID/socket appartenant à un autre service | Vérifier le propriétaire avec ls -la /run/<fichier> — ne pas modifier les droits manuellement |
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »- Le FHS organise Linux en zones fonctionnelles :
/etc/pour la configuration,/var/pour les données variables,/usr/pour les binaires,/run/pour l’exécution volatile. - Trois réflexes d’administration : config →
/etc/, problème →/var/log/oujournalctl, runtime →/run/. - Ne modifiez jamais les fichiers dans
/usr/lib/: créez une surcharge dans/etc/. /proc/,/sys/et/run/sont virtuels — ne les incluez pas dans vos sauvegardes./tmp/est vidé au reboot. Utilisez/var/tmp/pour les fichiers temporaires persistants.- Les journaux système varient selon la distribution :
syslogetauth.logsur Debian/Ubuntu,messagesetsecuresur RHEL/Rocky.
Prochaines étapes
Section intitulée « Prochaines étapes »FAQ : Questions Fréquentes
Section intitulée « FAQ : Questions Fréquentes »Principe fondamental
Contrairement à Windows qui utilise des lettres de lecteurs (C:, D:), Linux utilise une arborescence unique où tout part de la racine/. Les disques, partitions et périphériques sont "montés" dans cette arborescence.Philosophie Unix : tout est fichier
Sous Linux, tout est représenté comme un fichier :- Fichiers classiques (texte, binaires)
- Répertoires (fichiers spéciaux listant d'autres fichiers)
- Périphériques (
/dev/sda= disque dur) - Processus (
/proc/1234= infos du PID 1234) - Sockets (communication inter-processus)
Caractéristiques importantes
- Sensible à la casse :
Fichier.txt≠fichier.txt - Pas d'extensions obligatoires : le type est déterminé par le contenu
- Permissions granulaires : lecture, écriture, exécution par utilisateur/groupe/autres
Types de systèmes de fichiers
| Type | Usage | Caractéristiques |
|---|---|---|
| ext4 | Standard Linux | Journalisé, fiable, jusqu'à 1 Eo |
| XFS | Serveurs, gros fichiers | Haute performance, scalable |
| Btrfs | Moderne | Snapshots, compression, RAID natif |
| tmpfs | RAM | Ultra-rapide, volatil |
| NFS | Réseau | Partage de fichiers distant |
Commandes de diagnostic
df -hT # Espace disque avec type de FS
lsblk -f # Arborescence des périphériques
blkid # UUID et type des partitions
mount | grep ^/dev # Points de montage actifs
file /bin/ls # Type d'un fichier
Arborescence FHS (Filesystem Hierarchy Standard)
Le FHS est une norme qui définit l'organisation des répertoires. Elle permet aux administrateurs et développeurs de savoir où trouver et placer les fichiers./
├── bin/ → Binaires essentiels (ls, cp, mv)
├── boot/ → Noyau et bootloader (vmlinuz, initrd)
├── dev/ → Périphériques (sda, tty, null, random)
├── etc/ → Configuration système (passwd, fstab)
├── home/ → Répertoires personnels des utilisateurs
├── lib/ → Bibliothèques partagées (.so)
├── media/ → Montage automatique (USB, CD)
├── mnt/ → Montage manuel temporaire
├── opt/ → Applications tierces (Oracle, VMware)
├── proc/ → Pseudo-FS : infos kernel en temps réel
├── root/ → Home du super-utilisateur
├── run/ → Données runtime (PID files, sockets)
├── srv/ → Données des services (web, FTP)
├── sys/ → Pseudo-FS : infos matériel
├── tmp/ → Fichiers temporaires (effacés au reboot)
├── usr/ → Applications et données utilisateur
└── var/ → Données variables (logs, cache, mail)
Détail des répertoires critiques
/etc - Configuration système :/etc/passwd: comptes utilisateurs/etc/shadow: mots de passe hashés/etc/fstab: montages automatiques/etc/hosts: résolution DNS locale
/var - Données variables :/var/log: journaux système/var/cache: cache des applications/var/lib: données persistantes des services
/usr - Hiérarchie secondaire :/usr/bin: commandes utilisateur/usr/lib: bibliothèques/usr/share: données partagées (man, doc)
Commandes utiles
du -sh /var/log # Taille d'un répertoire
tree -L 1 / # Vue arborescente niveau 1
ncdu / # Navigateur d'espace disque
Centre nerveux de la journalisation
/var/log est le répertoire qui centralise tous les fichiers journaux (logs) du système. Ces logs sont essentiels pour :- Diagnostiquer les problèmes
- Auditer les accès et actions
- Surveiller la santé du système
- Analyser les incidents de sécurité
Fichiers de logs importants
| Fichier | Distribution | Contenu |
|---|---|---|
syslog |
Debian/Ubuntu | Logs système généraux |
messages |
RHEL/Rocky | Logs système généraux |
auth.log |
Debian/Ubuntu | Authentification, sudo, SSH |
secure |
RHEL/Rocky | Authentification, sudo, SSH |
kern.log |
Tous | Messages du noyau |
dmesg |
Tous | Boot et détection matériel |
faillog |
Tous | Tentatives de connexion échouées |
lastlog |
Tous | Dernières connexions |
Logs des applications
Chaque service crée souvent son propre sous-répertoire :/var/log/nginx/: access.log, error.log/var/log/apache2/: logs Apache/var/log/mysql/: logs MySQL/var/log/apt/: historique des installations
Lecture des logs
# Méthode traditionnelle
tail -f /var/log/syslog # Suivre en temps réel
tail -100 /var/log/auth.log # 100 dernières lignes
grep -i "error\|fail" /var/log/syslog
less +F /var/log/messages # Mode suivi avec less
# Avec systemd (méthode moderne recommandée)
journalctl -f # Temps réel tous logs
journalctl -u nginx # Logs d'un service
journalctl -u sshd --since "1 hour ago"
journalctl -p err # Uniquement les erreurs
journalctl -b -1 # Boot précédent
journalctl --disk-usage # Espace utilisé
Rotation des logs
Sans rotation, les logs rempliraient le disque. logrotate gère automatiquement :- Compression des anciens logs
- Suppression après X jours
- Notification aux services
cat /etc/logrotate.conf # Configuration globale
ls /etc/logrotate.d/ # Configuration par application
logrotate -d /etc/logrotate.conf # Test (dry-run)
Contexte historique
Cette distinction remonte aux débuts d'Unix quand l'espace disque était limité et coûteux.| Répertoire | Rôle historique | Quand disponible |
|---|---|---|
/bin |
Commandes essentielles au boot | Toujours (partition racine) |
/sbin |
Commandes admin essentielles | Toujours (partition racine) |
/usr/bin |
Applications utilisateur | Après montage de /usr |
/usr/sbin |
Applications admin | Après montage de /usr |
/usr pouvait être sur une partition séparée, montée après le boot. Les commandes nécessaires à la réparation du système devaient donc être dans /bin et /sbin sur la partition racine.Situation actuelle (distributions modernes)
Depuis 2012 environ, la plupart des distributions ont fusionné ces répertoires ("UsrMerge") :ls -la /bin
# lrwxrwxrwx 1 root root 7 /bin -> usr/bin
ls -la /sbin
# lrwxrwxrwx 1 root root 8 /sbin -> usr/sbin
Pourquoi cette fusion ?- Les systèmes modernes ont
/usrsur la même partition - Simplifie la maintenance et les packages
- Évite la duplication de bibliothèques
Vérification sur votre système
which ls # /usr/bin/ls
which mount # /usr/bin/mount (anciennement /bin)
which fdisk # /usr/sbin/fdisk
type -a ls # Tous les emplacements
# Le PATH diffère selon l'utilisateur
echo $PATH
# User normal : /usr/local/bin:/usr/bin:/bin
# Root : /usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
Hiérarchie complète des binaires
| Répertoire | Usage | Priorité PATH |
|---|---|---|
/usr/local/bin |
Compilations manuelles | Haute |
~/.local/bin |
Scripts utilisateur | Haute (si configuré) |
/usr/bin |
Applications système | Standard |
/opt/*/bin |
Applications tierces | À ajouter manuellement |
Un système de fichiers virtuel
/proc est un pseudo-filesystem (procfs) qui n'existe pas sur le disque. Il est généré dynamiquement par le noyau pour exposer des informations système en temps réel.Caractéristiques :- Taille : 0 octets sur le disque
- Contenu : généré à la lecture
- Modifiable : certains fichiers permettent de configurer le kernel
Informations système globales
# Matériel
cat /proc/cpuinfo # Détails CPU (modèle, cache, flags)
cat /proc/meminfo # Mémoire (totale, libre, buffers)
cat /proc/interrupts # IRQ utilisées
cat /proc/ioports # Ports I/O
cat /proc/partitions # Partitions détectées
# Système
cat /proc/version # Version kernel complète
cat /proc/uptime # Secondes depuis boot
cat /proc/loadavg # Charge système 1/5/15 min
cat /proc/filesystems # Systèmes de fichiers supportés
cat /proc/mounts # Points de montage actuels
Informations par processus
Chaque processus a un répertoire/proc/[PID]/ :# $$ = PID du shell courant
ls /proc/$$ # Contenu du répertoire
cat /proc/$$/cmdline # Commande de lancement
cat /proc/$$/status # État détaillé (mémoire, état, threads)
cat /proc/$$/environ # Variables d'environnement
ls -l /proc/$$/fd # Descripteurs de fichiers ouverts
cat /proc/$$/maps # Mapping mémoire
readlink /proc/$$/cwd # Répertoire de travail
readlink /proc/$$/exe # Chemin de l'exécutable
Paramètres kernel modifiables (sysctl)
/proc/sys/ contient des paramètres kernel qu'on peut modifier :# Lecture d'un paramètre
cat /proc/sys/net/ipv4/ip_forward
sysctl net.ipv4.ip_forward
# Modification temporaire (perdu au reboot)
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1
# Modification permanente
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p # Recharger la configuration
Paramètres utiles
| Paramètre | Usage |
|---|---|
net.ipv4.ip_forward |
Routage IP |
vm.swappiness |
Agressivité du swap (0-100) |
fs.file-max |
Nombre max de fichiers ouverts |
kernel.panic |
Reboot auto après panic (secondes) |
Introduction aux bits spéciaux
En plus des permissions classiques (rwx), Linux dispose de 3 bits spéciaux qui modifient le comportement des fichiers et répertoires. Ils sont essentiels pour la sécurité et le travail collaboratif.Tableau récapitulatif
| Bit | Valeur | Sur fichier | Sur répertoire |
|---|---|---|---|
| SUID | 4000 | S'exécute avec les droits du propriétaire | (ignoré) |
| SGID | 2000 | S'exécute avec les droits du groupe | Nouveaux fichiers héritent du groupe |
| Sticky | 1000 | (ignoré) | Seul le propriétaire peut supprimer ses fichiers |
SUID (Set User ID) - Le "s" du propriétaire
Problème : Comment un utilisateur normal peut-il changer son mot de passe alors que/etc/shadow n'est lisible que par root ?Solution : La commande passwd a le bit SUID, elle s'exécute avec les droits de son propriétaire (root).ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root /usr/bin/passwd
# ^-- 's' minuscule = SUID + x
# 'S' majuscule = SUID sans x (erreur probable)
# Activer SUID
chmod u+s programme
chmod 4755 programme # rwsr-xr-x
⚠️ Sécurité : Les fichiers SUID sont des cibles privilégiées pour les attaquants !SGID (Set Group ID) - Le "s" du groupe
Sur un fichier : Le programme s'exécute avec les droits du groupe propriétaire.Sur un répertoire : C'est l'usage le plus courant ! Tous les fichiers créés héritent du groupe du répertoire, pas du groupe primaire de l'utilisateur.# Créer un espace projet partagé
mkdir /projet
chown :devops /projet
chmod 2775 /projet # rwxrwsr-x
# Jean (groupe primaire: jean) crée un fichier
touch /projet/doc.txt
ls -l /projet/doc.txt
# -rw-r--r-- jean devops doc.txt ← groupe hérité !
Sticky Bit - Le "t" de protection
Problème : Dans/tmp, tout le monde peut écrire. Comment empêcher un utilisateur de supprimer les fichiers d'un autre ?Solution : Le sticky bit permet uniquement au propriétaire d'un fichier (ou root) de le supprimer.ls -ld /tmp
# drwxrwxrwt 1 root root /tmp
# ^-- 't' = sticky bit actif
# Activer sur un répertoire partagé
chmod +t /partage
chmod 1777 /partage # rwxrwxrwt
Recherche de sécurité
# Trouver tous les fichiers SUID (audit sécurité)
find / -perm -4000 -type f 2>/dev/null
# Trouver les fichiers SGID
find / -perm -2000 -type f 2>/dev/null
# Les deux
find / -perm /6000 -type f 2>/dev/null
Deux modes pour chmod
chmod accepte deux syntaxes :- Octal :
chmod 755 fichier(rapide mais à mémoriser) - Symbolique :
chmod u+x fichier(lisible et incrémental)
Syntaxe symbolique
chmod [QUI][OPÉRATION][PERMISSION] fichier
QUI - La cible
| Lettre | Signification | Mnémotechnique |
|---|---|---|
u |
User (propriétaire) | User |
g |
Group | Group |
o |
Others (les autres) | Others |
a |
All (tout le monde) | All = u+g+o |
OPÉRATION - L'action
| Symbole | Action | Exemple |
|---|---|---|
+ |
Ajouter une permission | chmod g+w |
- |
Retirer une permission | chmod o-x |
= |
Définir exactement | chmod u=rx |
PERMISSION - Les droits
| Lettre | Valeur | Sur fichier | Sur répertoire |
|---|---|---|---|
r |
4 | Lire le contenu | Lister le contenu (ls) |
w |
2 | Modifier le contenu | Créer/supprimer des fichiers |
x |
1 | Exécuter | Traverser (cd) |
X |
- | x seulement si répertoire ou déjà exécutable | Utile avec -R |
Exemples pratiques commentés
# Rendre un script exécutable par son propriétaire
chmod u+x script.sh
# Retirer l'écriture au groupe et aux autres
chmod go-w fichier.conf
# Rendre lisible par tout le monde
chmod a+r document.pdf
# Définir précisément : rwx pour user, rx pour les autres
chmod u=rwx,go=rx application
# Combiner plusieurs modifications
chmod u+x,g+w,o-r fichier
# Récursif sur un dossier (X = x seulement sur répertoires)
chmod -R u+rwX,go+rX projet/
Équivalences octal ↔ symbolique
| Octal | Symbolique | Résultat | Usage typique |
|---|---|---|---|
| 755 | u=rwx,go=rx | rwxr-xr-x | Scripts, programmes |
| 644 | u=rw,go=r | rw-r--r-- | Fichiers texte |
| 600 | u=rw,go= | rw------- | Fichiers privés |
| 700 | u=rwx,go= | rwx------ | Répertoires privés |
| 775 | u=rwx,g=rwx,o=rx | rwxrwxr-x | Projets partagés |
Astuce : copier les permissions
chmod --reference=fichier_modele fichier_cible
La commande ls -l
La méthode la plus courante pour voir le propriétaire :ls -l fichier.txt
# -rw-r--r-- 1 jean devops 1234 Jan 5 10:00 fichier.txt
Anatomie détaillée de la sortie
-rw-r--r-- 1 jean devops 1234 Jan 5 10:00 fichier.txt
│││││││││ │ │ │ │ │ │
│││││││││ │ │ │ │ │ └─ Nom du fichier
│││││││││ │ │ │ │ └────────────── Date de modification
│││││││││ │ │ │ └─────────────────── Taille en octets
│││││││││ │ │ └────────────────────────── GROUPE propriétaire
│││││││││ │ └─────────────────────────────── UTILISATEUR propriétaire
│││││││││ └────────────────────────────────── Nombre de liens
││││││││└──────────────────────────────────── Autres: x (exécuter)
│││││││└───────────────────────────────────── Autres: w (écrire)
││││││└────────────────────────────────────── Autres: r (lire)
│││││└─────────────────────────────────────── Groupe: x
││││└──────────────────────────────────────── Groupe: w
│││└───────────────────────────────────────── Groupe: r
││└────────────────────────────────────────── User: x
│└─────────────────────────────────────────── User: w
└──────────────────────────────────────────── User: r
└──────────────────────────────────────────── Type de fichier
Types de fichiers (premier caractère)
| Caractère | Type |
|---|---|
- |
Fichier régulier |
d |
Répertoire (directory) |
l |
Lien symbolique |
b |
Périphérique bloc (disque) |
c |
Périphérique caractère (terminal) |
s |
Socket |
p |
Pipe nommé (FIFO) |
La commande stat (informations complètes)
stat fichier.txt
Affiche :- Permissions en octal ET symbolique
- UID et GID numériques + noms
- Dates d'accès, modification, changement
- Numéro d'inode
- Nombre de blocs
Rechercher des fichiers par propriétaire
# Par nom d'utilisateur
find /home -user jean
# Par UID (utile si l'utilisateur a été supprimé)
find /var -uid 1001
# Par groupe
find /projet -group devops
# Fichiers orphelins (utilisateur/groupe n'existe plus)
find / -nouser 2>/dev/null
find / -nogroup 2>/dev/null
# Combinaisons
find /home -user jean -type f -name "*.sh"
Changer le propriétaire
# Changer le propriétaire
chown marie fichier.txt
# Changer propriétaire ET groupe
chown marie:devops fichier.txt
# Changer seulement le groupe
chown :devops fichier.txt
chgrp devops fichier.txt # Alternative
# Récursif
chown -R marie:devops /projet/
Pourquoi les groupes ?
Les groupes Linux permettent de partager des accès entre plusieurs utilisateurs sans donner les permissions à "tout le monde". C'est essentiel pour :- Projets collaboratifs
- Accès à des périphériques (docker, audio, video)
- Délégation de droits (sudo, wheel)
Fichier de configuration
Les groupes sont définis dans/etc/group :cat /etc/group
# devops:x:1001:jean,marie,paul
# │ │ │ └── Membres secondaires
# │ │ └─────── GID (Group ID)
# │ └───────── Mot de passe (obsolète, toujours x)
# └────────────────── Nom du groupe
Créer et gérer les groupes
# Créer un groupe
sudo groupadd devops
sudo groupadd -g 2000 projet # Avec GID spécifique
# Modifier un groupe
sudo groupmod -n nouveaunom anciennom # Renommer
sudo groupmod -g 2001 devops # Changer le GID
# Supprimer un groupe
sudo groupdel devops
# ⚠️ Ne supprime pas les fichiers du groupe !
Gérer les membres d'un groupe
# AJOUTER un utilisateur à un groupe (garder les autres groupes)
sudo usermod -aG docker jean
# ^^ IMPORTANT : -a = append (ajouter)
# Sans -a, TOUS les autres groupes sont supprimés !
# Alternative avec gpasswd
sudo gpasswd -a jean devops # Ajouter
sudo gpasswd -d jean devops # Retirer
# Changer le groupe PRINCIPAL d'un utilisateur
sudo usermod -g devops jean
Consulter les groupes
# Mes propres groupes
groups
# jean docker devops sudo
# Groupes d'un autre utilisateur
groups marie
# Informations complètes (UID, GID, groupes)
id jean
# uid=1000(jean) gid=1000(jean) groups=1000(jean),998(docker),1001(devops)
# Membres d'un groupe spécifique
getent group devops
# devops:x:1001:jean,marie,paul
# Lister tous les groupes
cat /etc/group
getent group # Inclut LDAP/NIS si configuré
Appliquer les changements
Problème : Aprèsusermod -aG, le nouveau groupe n'est pas actif immédiatement.# Solution 1 : Activer le groupe sans déconnexion
newgrp docker
# Ouvre un nouveau shell avec docker comme groupe actif
# Solution 2 : Se déconnecter/reconnecter
logout # ou Ctrl+D
# Solution 3 : Utiliser su
su - jean
# Vérifier
id # Le nouveau groupe doit apparaître
Groupes système importants
| Groupe | Usage |
|---|---|
root |
Super-utilisateur |
sudo / wheel |
Droit d'utiliser sudo |
docker |
Accès au daemon Docker |
www-data |
Serveur web |
audio |
Accès aux périphériques audio |
plugdev |
Périphériques amovibles |
Comportement par défaut de Linux
Contrairement à Windows, Linux n'hérite PAS automatiquement des permissions du répertoire parent. Les permissions des nouveaux fichiers sont déterminées par le umask.Le umask : masque de création
Le umask est un masque qui retire des permissions aux fichiers nouvellement créés.umask
# 0022 (valeur typique)
# Calcul des permissions par défaut :
# Fichiers : 666 - 022 = 644 (rw-r--r--)
# Répertoires : 777 - 022 = 755 (rwxr-xr-x)
| umask | Fichiers | Répertoires | Usage |
|---|---|---|---|
| 022 | 644 | 755 | Standard |
| 027 | 640 | 750 | Plus restrictif |
| 077 | 600 | 700 | Privé |
| 002 | 664 | 775 | Collaboratif |
# Modifier temporairement
umask 027
# Modifier permanemment : ajouter dans ~/.bashrc ou /etc/profile
umask 027
Forcer l'héritage du groupe avec SGID
Le bit SGID sur un répertoire force les nouveaux fichiers à hériter du groupe du répertoire (pas des permissions, juste le groupe).# Créer un espace projet partagé
mkdir /projet
chown :devops /projet # Groupe = devops
chmod 2775 /projet # SGID activé (le 2)
# Jean (groupe primaire: jean) crée un fichier
touch /projet/rapport.txt
ls -l /projet/rapport.txt
# -rw-r--r-- jean devops rapport.txt
# ^^^^^^ groupe hérité du répertoire !
# Sans SGID, le fichier aurait le groupe 'jean'
ACL : contrôle avancé avec héritage complet
Pour un vrai héritage de permissions (pas seulement le groupe), utilisez les ACL (Access Control Lists).# Vérifier si les ACL sont supportées
mount | grep acl # Généralement activé par défaut sur ext4
# Définir des permissions par défaut sur un répertoire
setfacl -d -m u::rwx /projet # Propriétaire
setfacl -d -m g::rwx /projet # Groupe
setfacl -d -m o::r-x /projet # Autres
setfacl -d -m g:devops:rwx /projet # Groupe spécifique
# Vérifier les ACL
getfacl /projet
# # file: projet
# # owner: root
# # group: devops
# default:user::rwx
# default:group::rwx
# default:group:devops:rwx
# default:other::r-x
# Les nouveaux fichiers héritent de ces ACL
touch /projet/nouveau.txt
getfacl /projet/nouveau.txt
Récapitulatif des méthodes
| Méthode | Ce qui est hérité | Configuration |
|---|---|---|
| umask | Rien (définit les permissions par défaut) | Par utilisateur |
| SGID | Le groupe du répertoire | chmod g+s |
| ACL default | Permissions complètes | setfacl -d |
Bonnes pratiques pour un répertoire partagé
# Configuration complète d'un répertoire projet
mkdir /projet
chown root:devops /projet
chmod 2775 /projet # SGID
setfacl -d -m g:devops:rwx /projet # ACL par défaut