Le système de fichiers sous Linux est au cœur du fonctionnement de tout serveur ou poste de travail. Il permet d’organiser, de stocker et de gérer efficacement les données et les ressources du système. Ce guide a pour objectif de vous donner une vision claire de sa structure hiérarchique, des rôles des différents répertoires, des types de fichiers existants, ainsi que des mécanismes de gestion des permissions.
Structure hiérarchique du système de fichiers
Section intitulée « Structure hiérarchique du système de fichiers »Le système de fichiers Linux est organisé selon une structure hiérarchique
qui commence toujours par le répertoire racine /. Cette arborescence forme un
ensemble cohérent de répertoires et sous-répertoires qui permet de classer
toutes les données et ressources du système.
Chaque fichier ou répertoire est situé quelque part sous la racine /, ce qui
signifie qu’il existe un chemin unique pour accéder à chaque élément. Cette
organisation permet de centraliser l’accès aux fichiers, qu’ils soient
stockés localement ou sur des supports distants (par exemple, des systèmes de
fichiers réseau montés sous un répertoire spécifique).
L’arborescence des principaux répertoires système
Section intitulée « L’arborescence des principaux répertoires système »L’arborescence des principaux répertoires système dans un système d’exploitation Linux suit une structure standardisée qui organise les fichiers et les répertoires de manière logique et cohérente. Voici une description des principaux répertoires système :
Répertoirebin/ -> usr/bin/
- …
Répertoireboot/
- …
Répertoiredev/
- …
Répertoireetc/
Répertoiressh/
- …
Répertoiresystemd/
- …
- …
Répertoirehome/
Répertoireuser1/
- …
Répertoirelib/ -> usr/lib/
- …
Répertoirelib32/ -> usr/lib32/
- …
Répertoirelib64/ -> usr/lib64/
- …
Répertoirelibx32/ -> usr/libx32/
- …
Répertoiremedia/
- …
Répertoiremnt/
- …
Répertoireopt/
- …
Répertoireproc/
- …
Répertoirerecovery/
- …
Répertoireroot/
- …
Répertoirerun/
- …
Répertoiresbin/ -> usr/sbin/
- …
Répertoiresrv/
- …
Répertoiresys/
- …
Répertoiretmp/
- …
Répertoireusr/
- …
Répertoirevar/
Répertoirelog/
- …
- …
-
/(root) : Le répertoire racine est le point de départ de l’arborescence du système de fichiers Linux. Tous les autres répertoires et fichiers sont situés sous la racine. Il est généralement représenté comme/dans les chemins absolus. -
/bin(Binaires système) : Ce répertoire contient les binaires système essentiels nécessaires au démarrage et à la réparation du système. Vous y trouverez des commandes de base telles quels,cp,mv,mkdir,rm, etc. -
/boot(Démarrage) : Les fichiers nécessaires au processus de démarrage du système se trouvent ici, y compris le noyau Linux et les fichiers de configuration du gestionnaire de démarrage (comme GRUB ou LILO). -
/dev(Périphériques) : Ce répertoire contient les fichiers spéciaux qui représentent les périphériques matériels du système, tels que les disques, les lecteurs de CD-ROM, les ports série, etc. -
/etc(Configuration) : Les fichiers de configuration du système sont stockés dans ce répertoire. Il contient des fichiers de configuration pour le noyau, le réseau, les services, les utilisateurs et bien d’autres. -
/home(Répertoires personnels) : Ce répertoire contient les répertoires personnels des utilisateurs du système. Chaque utilisateur a généralement son propre sous-répertoire sous/homepour stocker ses fichiers personnels. -
/lib(Bibliothèques partagées) : Les bibliothèques partagées essentielles nécessaires au fonctionnement du système sont stockées ici. Ces bibliothèques sont utilisées par les programmes pour accéder aux fonctionnalités du système. -
/media(Périphériques montés) : Les supports amovibles tels que les clés USB, les disques durs externes et les CD/DVD sont montés automatiquement sous ce répertoire lorsqu’ils sont connectés au système. -
/mnt(Points de montage) : Ce répertoire est utilisé pour monter temporairement d’autres systèmes de fichiers, tels que des disques réseau ou d’autres partitions de disque. -
/opt(Options) : Les logiciels tiers et les applications optionnelles peuvent être installés dans ce répertoire. Il est souvent utilisé pour les logiciels non inclus dans la distribution Linux de base. -
/proc(Système de fichiers proc) : Ce répertoire est un système de fichiers virtuel qui fournit des informations en temps réel sur les processus en cours d’exécution et d’autres informations relatives au noyau. -
/root(Répertoire personnel du super-utilisateur) : C’est le répertoire personnel du superutilisateur (root). Il est différent du répertoire personnel des autres utilisateurs. -
/sbin(Binaires système système) : Ce répertoire contient des binaires système essentiels, principalement destinés à être utilisés par le super-utilisateur (root) pour la gestion du système. -
/srv(Données des services) : Ce répertoire est utilisé pour stocker les données spécifiques aux services fournis par le système, tels que les fichiers de données des serveurs web. -
/tmp(Répertoire temporaire) : Ce répertoire est utilisé pour stocker des fichiers temporaires créés par les utilisateurs et les applications. Les fichiers temporaires sont généralement supprimés lors du redémarrage. -
/usr(Ressources système) : Ce répertoire contient des données et des programmes qui ne sont pas nécessaires au démarrage du système, mais qui sont utilisés par les utilisateurs et les applications, y compris les binaires, les bibliothèques, la documentation, etc. -
/var(Données variables) : Les données variables telles que les journaux système, les fichiers de base de données et les fichiers temporaires du système sont stockées ici. Ce répertoire peut contenir des données qui changent fréquemment. -
/var/log(Journaux systèmes) : Le répertoire /var/log est un répertoire important dans l’arborescence des répertoires système Linux. Il est spécifiquement destiné au stockage des fichiers journaux du système, également appelés “logs”. Les fichiers journaux enregistrent des informations sur divers événements et activités du système, ce qui est essentiel pour la surveillance, le dépannage et la gestion du système.On y trouve :
- Le fichier
/var/log/boot.log, enregistrent des informations sur le processus de démarrage du système. - Le fichier
/var/log/messagesou/var/log/syslog(selon la distribution) contiennent des informations générales sur l’état du système, y compris les messages du noyau, les informations sur le matériel, les messages de démarrage, etc. - Le fichier
/var/log/auth.logou /var/log/secure(selon la distribution) enregistre les informations d’authentification des utilisateurs, notamment les connexions réussies et les tentatives de connexion échouées. - Le fichier
/var/log/dpkg.log(sur les systèmes basés sur Debian) ou/var/log/yum.log(sur les systèmes basés sur Red Hat) enregistre les opérations de gestion de paquets, telles que l’installation, la mise à jour ou la suppression de logiciels. - De nombreux autres fichiers créés par les services système et logiciels
tiers. Par exemple, Apache peut avoir ses journaux dans
/var/log/apache2/et MySQL peut avoir ses journaux dans/var/log/mysql/…
- Le fichier
Cette structure d’arborescence des répertoires système est cohérente sur la plupart des distributions Linux, bien que certaines distributions puissent avoir des répertoires supplémentaires ou des variations mineures dans la structure. Elle permet d’organiser efficacement les fichiers et les répertoires du système, facilitant ainsi la gestion et l’accès aux ressources système.
Les permissions dans le système de fichiers Linux
Section intitulée « Les permissions dans le système de fichiers Linux »La gestion des permissions ou droits dans le système de fichiers Linux est un élément essentiel de la sécurité du système. Linux utilise un système de contrôle d’accès basé sur les permissions pour déterminer qui peut accéder aux fichiers et aux répertoires, qui peut les modifier et qui peut les exécuter. Cela se fait principalement à l’aide de trois types de permissions : lecture, écriture et exécution, pour trois catégories d’utilisateurs : le propriétaire, le groupe et les autres.
Voici une explication détaillée de la gestion des permissions dans le système de fichiers Linux :
Les types de permissions
Section intitulée « Les types de permissions »- Lecture (r) : Permission de lire le contenu d’un fichier ou de lister le contenu d’un répertoire.
- Écriture (w) : Permission de modifier le contenu d’un fichier ou de créer, supprimer et renommer des fichiers dans un répertoire.
- Exécution (x) : Permission d’exécuter un fichier (dans le cas des fichiers exécutables) ou d’accéder à un répertoire (important !).
Les Catégories d’utilisateurs
Section intitulée « Les Catégories d’utilisateurs »- Le Propriétaire (u) : L’utilisateur qui a créé ou possède le fichier ou le répertoire.
- Le Groupe (g) : Un groupe d’utilisateurs auquel le fichier ou le répertoire est attribué. Les membres du groupe ont les mêmes permissions que le groupe.
- Les Autres (o) : Tous les autres utilisateurs du système qui ne sont ni le propriétaire ni les membres du groupe. Ces permissions sont également appelées “permissions publiques”.
Les Attributs spéciaux
Section intitulée « Les Attributs spéciaux »- Sticky bit (t) : Le bit sticky peut être attribué à un répertoire pour empêcher la suppression de fichiers par des utilisateurs autres que le propriétaire, même si ces utilisateurs ont les permissions d’écriture sur le répertoire. C’est couramment utilisé pour les répertoires temporaires.
- Setgid (s) : Lorsqu’un répertoire a le bit setgid activé, les fichiers créés dans ce répertoire héritent du groupe du répertoire parent, au lieu du groupe de l’utilisateur qui les crée.
- Setuid (s) : Lorsqu’un fichier exécutable a le bit setuid activé, il s’exécute avec les permissions de l’utilisateur propriétaire du fichier, plutôt qu’avec les permissions de l’utilisateur qui l’exécute. Cela peut être utilisé pour permettre à des utilisateurs ordinaires d’exécuter des commandes avec des privilèges spécifiques.
Les formats d’écriture des permissions
Section intitulée « Les formats d’écriture des permissions »On distingue deux modes d’écriture des permissions le mode octal et le symobolique. Le mode octal est celui le plus couramment utilisé une fois compris.
Le mode octal
Section intitulée « Le mode octal »Le mode octal des permissions est une manière concise de représenter les permissions d’un fichier ou d’un répertoire dans le système de fichiers Linux en utilisant des chiffres octaux (base 8). Il est couramment utilisé pour définir rapidement et précisément les permissions en combinant les droits de lecture (4), d’écriture (2) et d’exécution (1) pour chaque catégorie d’utilisateurs (propriétaire, groupe, autres).
Voici comment fonctionne le mode octal des permissions :
Chaque catégorie d’utilisateurs (propriétaire, groupe, autres) est représentée par une combinaison de trois chiffres octaux :
- Le premier chiffre représente les permissions du propriétaire.
- Le deuxième chiffre représente les permissions du groupe.
- Le troisième chiffre représente les permissions pour les autres utilisateurs.
Les chiffres octaux sont utilisés pour attribuer des valeurs aux droits de lecture, d’écriture et d’exécution :
- Lecture (4) : Représenté par le chiffre 4, indique que l’utilisateur a la permission de lire le fichier ou de lister le contenu du répertoire.
- Écriture (2) : Représenté par le chiffre 2, indique que l’utilisateur a la permission d’écrire ou de modifier le fichier ou de créer, supprimer et renommer des fichiers dans le répertoire.
- Exécution (1) : Représenté par le chiffre 1, indique que l’utilisateur a la permission d’exécuter un fichier (dans le cas des fichiers exécutables) ou d’accéder à un répertoire.
Pour définir les permissions, vous attribuez la somme des valeurs numériques correspondantes aux droits dont vous avez besoin pour chaque catégorie d’utilisateurs.
Par exemple, si vous souhaitez attribuer des droits de lecture et d’exécution au
propriétaire, des droits de lecture au groupe et des droits de lecture aux
autres, vous obtenez la valeur octale 5 pour le premier chiffre, 4 pour le
deuxième chiffre et 4 pour le troisième chiffre. En mode octal, cela s’écrit
544. Si vous souhaitez attribuer tous les droits au propriétaire, mais
uniquement les droits de lecture aux autres, vous obtenez la valeur octale 7
pour le premier chiffre et 4 pour les deuxième et troisième chiffres. En mode
octal, cela s’écrit 744.
Le format symbolique
Section intitulée « Le format symbolique »Le format symbolique permet de représenter les permissions dans le système de fichiers Linux. Il utilise des lettres et des symboles pour représenter les permissions. Les permissions sont spécifiées pour le propriétaire, le groupe et les autres utilisateurs, ainsi que pour les types de fichiers spéciaux (comme les fichiers exécutables et les liens symboliques).
Le format symbolique des permissions comprend les éléments suivants :
- Propriétaire (u) : Représenté par la lettre “u”. Les permissions du propriétaire sont définies avec les lettres “r” pour la lecture (read), “w” pour l’écriture (write) et “x” pour l’exécution (execute).
- Groupe (g) : Représenté par la lettre “g”. Les permissions du groupe sont définies avec les mêmes lettres que pour le propriétaire : “r” pour la lecture, “w” pour l’écriture et “x” pour l’exécution.
- Autres (o) : Représentés par la lettre “o”. Les permissions pour les autres utilisateurs sont également définies avec les mêmes lettres : “r” pour la lecture, “w” pour l’écriture et “x” pour l’exécution.
- Tous (a) : Représenté par la lettre “a”. Lorsque vous utilisez “a”, vous définissez les permissions pour tous les utilisateurs (propriétaire, groupe et autres) en même temps.
- Négation (-) : Représenté par le symbole ”-”. Vous pouvez utiliser ”-” pour retirer des permissions spécifiques.
Voici quelques exemples d’utilisation du format symbolique des permissions :
- Pour attribuer la permission de lecture et d’exécution au propriétaire, la
permission de lecture au groupe et aucune permission aux autres :
u=rx,g=r,o=. - Pour retirer la permission d’écriture au groupe et aux autres :
go-w.
Attributs spéciaux : Il existe également des symboles spéciaux pour représenter des attributs spécifiques comme le sticky bit (t) et le setgid (s).
Commandes pour gérer et afficher les permissions
Section intitulée « Commandes pour gérer et afficher les permissions »Gestion des permissions
Section intitulée « Gestion des permissions »Il s’agit de la commande chmod vu
ici.
Affichage des permissions
Section intitulée « Affichage des permissions »Vous pouvez afficher les permissions d’un fichier ou d’un répertoire en
utilisant la commande ls -l. Cela affiche une liste détaillée des fichiers
avec des informations sur les permissions, le propriétaire, le groupe, etc.
Voici un exemple de sortie de la commande ls -l :
ls -l
-rw-r--r-- 1 utilisateur groupe 1024 nov. 1 15:30 mon_fichier.txtdrwxr-xr-x 2 utilisateur groupe 4096 nov. 1 15:30 mon_repertoire/Dans cet exemple, les lettres rw-r--r-- représentent les permissions pour le
propriétaire, le groupe et les autres, respectivement.
Le fichier mon_fichier.txt est modifiable par son propriétaire et accessible
en lecture à tous les autres utilisateurs.
Conclusion
Section intitulée « Conclusion »Maintenant que vous savez comment est structuré le système de fichiers sous Linux, vous comprenez le rôle de chaque répertoire clé et la logique hiérarchique qui organise les données et les ressources système. Vous avez également découvert comment fonctionnent les permissions, quelles sont les catégories d’utilisateurs et comment les droits d’accès sont attribués aux fichiers et répertoires. Cette compréhension est indispensable pour naviguer efficacement dans un environnement Linux, assurer la sécurité des données et gérer correctement les accès. Pour approfondir la mise en pratique de ces concepts, vous pouvez consulter le guide dédié aux commandes essentielles sur le site.
FAQ : Questions Fréquentes
Section intitulée « FAQ : Questions Fréquentes »Le système de fichiers Linux est la structure qui organise, stocke et gère les données sur les supports de stockage.
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 |
Pourquoi cette séparation ?
Historiquement, /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)
Le mode symbolique est idéal pour modifier des permissions existantes sans tout redéfinir.
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ès usermod -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