Comprendre l'Arborescence (FHS)
Le Filesystem Hierarchy Standard (FHS) définit la structure des répertoires sous Linux. Comprendre cette structure est essentiel pour localiser les fichiers, les binaires et les configurations.
[Image d'un diagramme de l'arborescence des fichiers Linux]| Répertoire | Description |
|---|---|
/ |
La racine (root) du système de fichiers. Tout part d'ici. |
/bin |
Binaires essentiels pour tous les utilisateurs (ex: ls, cp, mount). |
/sbin |
Binaires système essentiels, principalement pour l'administrateur (ex: fdisk, reboot). |
/etc |
Fichiers de configuration spécifiques à la machine (ex: /etc/passwd, /etc/fstab). |
/home |
Répertoires personnels des utilisateurs (ex: /home/utilisateur). |
/root |
Répertoire personnel de l'utilisateur root. |
/var |
Fichiers variables, tels que les logs (/var/log), les spools (/var/spool/mail). |
/tmp |
Fichiers temporaires. Souvent vidé au redémarrage. |
/usr |
Données utilisateur secondaires (binaires, bibliothèques, documentation). /usr/bin, /usr/lib. |
/mnt & /media |
Points de montage pour les systèmes de fichiers temporaires (clés USB, CD-ROMs). |
Navigation et Manipulation de Fichiers
Un ensemble de commandes de base vous permet d'interagir avec le système de fichiers.
Navigation et Information
# Lister les fichiers et répertoires (format long, tout afficher, taille lisible)
ls -lha
# Changer de répertoire (ex: aller dans le dossier de logs)
cd /var/log
# Revenir au répertoire précédent
cd -
# Aller au répertoire personnel
cd
# Afficher le répertoire courant (Print Working Directory)
pwd
Création et Suppression
# Créer un fichier vide ou mettre à jour son horodatage
touch nom_du_fichier.txt
# Créer un nouveau répertoire
mkdir mon_dossier
# Créer une arborescence de répertoires
mkdir -p projet/src/main
# Supprimer un fichier (demande confirmation)
rm fichier_a_supprimer.txt
# Supprimer un fichier (forcer la suppression, sans confirmation)
rm -f fichier_a_supprimer.txt
# Supprimer un répertoire vide
rmdir dossier_vide
# Supprimer un répertoire et tout son contenu (Récursif + Forcer)
# ATTENTION: Commande très dangereuse.
rm -rf dossier_a_supprimer
Copie et Déplacement
# Copier un fichier
cp source.txt destination.txt
# Copier un fichier dans un répertoire
cp mon_fichier.txt /home/utilisateur/documents/
# Copier un répertoire et son contenu (Récursif)
cp -r mon_dossier /backup/
# Déplacer un fichier (sert aussi à renommer)
mv ancien_nom.txt nouveau_nom.txt
# Déplacer un fichier dans un autre répertoire
mv mon_fichier.txt /tmp/
Gestion des Permissions et de la Propriété
Chaque fichier et répertoire sous Linux a des permissions qui déterminent qui peut le lire, l'écrire ou l'exécuter.
Comprendre la sortie de ls -l
La commande ls -l affiche les permissions en détail :
-rwxr-xr-- 1 utilisateur groupe 4096 Oct 25 15:00 script.sh
d-rwx--r-- 1 admin admin 4096 Oct 25 14:00 dossier_prive
Décomposons la première ligne :
-: Type de fichier.-est un fichier régulier,dest un répertoire (directory),lest un lien symbolique.rwx: Permissions pour le Propriétaire (User). (Lire, Écrire, Exécuter)r-x: Permissions pour le Groupe (Group). (Lire, pas Écrire, Exécuter)r--: Permissions pour les Autres (Others). (Lire, pas Écrire, pas Exécuter)utilisateur: Le propriétaire du fichier.groupe: Le groupe propriétaire du fichier.
Modifier les Permissions (chmod)
La commande chmod (change mode) modifie les permissions.
Méthode Symbolique (Relative)
# Ajouter (u=user, g=group, o=other, a=all)
# (r=read, w=write, x=execute)
# Ajouter l'exécution pour l'utilisateur
chmod u+x script.sh
# Retirer l'écriture pour le groupe
chmod g-w config.txt
# Définir les droits des autres à lecture seulement
chmod o=r rapport.pdf
# Ajouter la lecture pour tout le monde
chmod a+r fichier_public.txt
Méthode Octale (Absolue)
C'est la méthode la plus rapide. Chaque permission a une valeur numérique :
4= Lire (Read)2= Écrire (Write)1= Exécuter (Execute)
On additionne les valeurs pour chaque catégorie (User, Group, Other).
7= 4+2+1 (rwx)6= 4+2 (rw-)5= 4+1 (r-x)4= 4 (r--)0= 0 (---)
# Mettre les droits à rwxr-xr-x (755) - typique pour un script ou un dossier
chmod 755 mon_script.sh
# Mettre les droits à rw-r--r-- (644) - typique pour un fichier de données
chmod 644 config.ini
# Mettre les droits à rw------- (600) - typique pour un fichier privé (ex: clé SSH)
chmod 600 ~/.ssh/id_rsa
Modifier la Propriété (chown / chgrp)
La commande chown (change owner) modifie le propriétaire et/ou le groupe.
# Changer le propriétaire
chown nouvel_utilisateur rapport.pdf
# Changer le groupe
chgrp nouveau_groupe rapport.pdf
# Changer le propriétaire et le groupe en une seule commande
chown utilisateur:groupe fichier.txt
# Changer récursivement la propriété d'un dossier et de son contenu
chown -R utilisateur:groupe /var/www/mon_site
Permissions Spéciales (SUID, SGID, Sticky Bit)
Au-delà des permissions de base (lire, écrire, exécuter), il existe trois permissions spéciales qui gèrent des scénarios avancés de sécurité et de collaboration. Elles s'appliquent en ajoutant un préfixe au mode octal (ex: `4755`) ou en utilisant des lettres (`u+s`) en mode symbolique.
1. SUID (Set User ID)
Utilité principale : L'élévation de privilèges contrôlée.
Permet à un utilisateur d'exécuter un programme avec les permissions du propriétaire du fichier, et non avec ses propres permissions.
-
Comment le voir : Un `s` à la place du `x` pour le propriétaire.
(Un `S` majuscule signifie que le SUID est activé mais que le fichier n'est pas exécutable, ce qui est généralement une erreur.)-rwsr-xr-x 1 root root ... /usr/bin/passwd -
Cas d'usage concret : La commande `passwd`
- Vous (utilisateur standard) voulez changer votre mot de passe.
- L'information est stockée dans `/etc/shadow`, qui appartient à `root` et que vous ne pouvez pas modifier.
- La commande `/usr/bin/passwd` appartient à `root` et a le bit SUID.
- Quand vous lancez `passwd`, le système voit le SUID et exécute la commande en tant que `root`.
- Le programme peut alors modifier `/etc/shadow` en votre nom, de manière sécurisée et limitée.
- Une fois le programme terminé, vous revenez à vos droits normaux.
-
Comment l'appliquer :
# Méthode Symbolique chmod u+s executable.bin # Méthode Octale (4 + 755) chmod 4755 executable.bin
2. SGID (Set Group ID)
Utilité principale : Le partage de fichiers en équipe.
A deux effets : sur un fichier, il s'exécute avec les droits du groupe. Sur un répertoire, il force tous les nouveaux fichiers à hériter du groupe du répertoire.
-
Comment le voir : Un `s` à la place du `x` pour le groupe.
drwxr-s--- 1 admin www-data ... /var/www/projet -
Cas d'usage concret (sur un répertoire) : Le dossier de projet web
- Le dossier `/var/www/projet` appartient au groupe `www-data` (le serveur web).
- Les développeurs `alice` et `bob` font partie du groupe `www-data`.
- Problème : Quand `alice` crée un fichier, il appartient à `alice:alice`. Le serveur (`www-data`) ne peut pas le lire.
- Solution : On applique le SGID sur le dossier parent : `chmod g+s /var/www/projet`.
- Maintenant, quand `alice` crée `index.html`, le fichier appartient à `alice:www-data`.
- Quand `bob` crée `style.css`, il appartient à `bob:www-data`.
- Le serveur `www-data` peut lire tous les fichiers car ils appartiennent au bon groupe.
-
Comment l'appliquer :
# Méthode Symbolique (pour un dossier) chmod g+s /chemin/vers/dossier_partage # Méthode Octale (2 + 775) - Droits courants pour un dossier partagé chmod 2775 /chemin/vers/dossier_partage
3. Sticky Bit
Utilité principale : La protection anti-suppression.
Sur un répertoire, il empêche les utilisateurs de supprimer les fichiers des autres.
-
Comment le voir : Un `t` à la place du `x` pour les autres.
drwxrwxrwt 1 root root ... /tmp -
Cas d'usage concret : Le répertoire `/tmp`
- Le dossier `/tmp` est public, tout le monde a les droits `rwx` (lire, écrire, exécuter).
- Problème : Sans Sticky Bit, n'importe quel utilisateur pourrait supprimer les fichiers temporaires d'un autre utilisateur ou d'un service, causant des plantages.
- Solution : Le Sticky Bit est activé.
- Maintenant, `alice` peut créer un fichier, `bob` peut en créer un autre.
- `alice` ne peut pas supprimer le fichier de `bob`. Seul `bob` (le propriétaire du fichier) ou `root` le peut.
-
Comment l'appliquer :
# Méthode Symbolique chmod +t /chemin/vers/dossier_public # Méthode Octale (1 + 777) - Droits typiques pour /tmp chmod 1777 /chemin/vers/dossier_public
4. Le Umask (User Mask)
Utilité principale : Définir les permissions par défaut.
Le `umask` n'est pas une permission *sur* un fichier, mais un masque appliqué par votre session shell qui retire des permissions lors de la création d'un nouveau fichier ou dossier.
-
Comprendre le calcul :
- Les dossiers sont créés avec une base de `777` (
rwxrwxrwx). - Les fichiers sont créés avec une base de `666` (
rw-rw-rw-) (pas d'exécution par défaut pour la sécurité). - Le `umask` est soustrait (techniquement, c'est un `AND` binaire avec le complément) de cette base.
- Les dossiers sont créés avec une base de `777` (
-
Cas d'usage courant : `umask 0022` (le plus commun)
# Pour un NOUVEAU DOSSIER : # 777 (base) # - 022 (umask) # = 755 (rwxr-xr-x) <- Vous avez le contrôle total, les autres peuvent lire/voir. # Pour un NOUVEAU FICHIER : # 666 (base) # - 022 (umask) # = 644 (rw-r--r--) <- Vous pouvez lire/écrire, les autres peuvent lire. -
Cas d'usage sécurisé : `umask 0077` (très privé)
# Pour un NOUVEAU DOSSIER : # 777 (base) # - 077 (umask) # = 700 (rwx------) <- Seul vous pouvez accéder au dossier. # Pour un NOUVEAU FICHIER : # 666 (base) # - 077 (umask) # = 600 (rw-------) <- Seul vous pouvez lire/écrire le fichier. -
Comment le gérer :
# Afficher le umask actuel (peut s'afficher en symbolique ou octal) umask # Définir le umask pour la session actuelle umask 0022 # Pour le définir de manière permanente, modifiez des fichiers comme # /etc/profile, /etc/login.defs, ou ~/.bashrc
TP : Scénarios Pratiques
Mettons en pratique les concepts de permissions et de propriété. Ouvrez un terminal et suivez ces étapes (il est préférable d'être `root` ou d'utiliser `sudo` pour créer des groupes et changer la propriété).
Exercice 1 : Création et Permissions de Base
Créer un environnement de projet simple.
# 1. Créez un dossier de base à la racine
sudo mkdir /projets
# 2. Créez un dossier pour un projet spécifique
sudo mkdir /projets/projet_alpha
# 3. Créez un fichier de rapport
sudo touch /projets/projet_alpha/rapport.txt
# 4. Définissez des permissions saines
# - Le dossier projet doit être accessible (r-x) par tout le monde, mais modifiable (w) que par vous.
sudo chmod 755 /projets/projet_alpha
# - Le rapport doit être lisible (r--) par tout le monde, mais modifiable (w) que par vous.
sudo chmod 644 /projets/projet_alpha/rapport.txt
# 5. Vérifiez votre travail
ls -ld /projets/projet_alpha
# Attendu : drwxr-xr-x ...
ls -l /projets/projet_alpha/rapport.txt
# Attendu : -rw-r--r-- ...
Exercice 2 : Dossier Collaboratif (SGID)
Mettre en place un dossier partagé pour une équipe où tous les nouveaux fichiers appartiennent au groupe de l'équipe.
# 1. Créez un nouveau groupe pour votre équipe
sudo groupadd devops
# 2. Créez le dossier de partage
sudo mkdir /projets/partage_devops
# 3. Changez le groupe propriétaire du dossier
sudo chgrp devops /projets/partage_devops
# 4. Appliquez le SGID et les bonnes permissions
# - 2 = SGID (force l'héritage du groupe)
# - 7 = Propriétaire (rwx)
# - 7 = Groupe (rwx) - Important pour que l'équipe puisse travailler
# - 5 = Autres (r-x)
sudo chmod 2775 /projets/partage_devops
# 5. Vérifiez la permission SGID (notez le 's')
ls -ld /projets/partage_devops
# Attendu : drwxrwsr-x ... root devops ...
# 6. Testez l'héritage (en tant qu'utilisateur qui est dans le groupe 'devops')
# (Ajoutez votre utilisateur au groupe : sudo usermod -aG devops $USER)
# (Vous devrez peut-être vous déconnecter/reconnecter)
touch /projets/partage_devops/test.txt
# 7. Vérifiez le propriétaire du nouveau fichier
ls -l /projets/partage_devops/test.txt
# Attendu : -rw-r--r-- ... votre_user devops ... (Le groupe est 'devops', pas votre groupe principal !)
Exercice 3 : Dossier de Dépôt Public (Sticky Bit)
Mettre en place un dossier "public" où tout le monde peut déposer des fichiers, mais personne ne peut supprimer les fichiers des autres (comme /tmp).
# 1. Créez le dossier public
sudo mkdir /projets/depot_public
# 2. Donnez à tout le monde les droits de lecture, écriture et exécution
sudo chmod 777 /projets/depot_public
# 3. Ajoutez le Sticky Bit
# - 1 = Sticky Bit
# - 7 = Propriétaire (rwx)
# - 7 = Groupe (rwx)
# - 7 = Autres (rwx)
sudo chmod 1777 /projets/depot_public
# 4. Vérifiez les permissions (notez le 't')
ls -ld /projets/depot_public
# Attendu : drwxrwxrwt ...
# 5. Concept :
# - Si 'alice' crée un fichier ici, 'bob' peut le lire (et l'écrire si 777),
# - mais 'bob' NE PEUT PAS le supprimer car il n'est pas le propriétaire.
Exercice 4 : Gérer le Umask
Comprendre comment le `umask` affecte les permissions par défaut des nouveaux fichiers et dossiers.
# 1. Allez dans un répertoire de test (ex: votre dossier personnel)
cd ~
mkdir test_umask
cd test_umask
# 2. Affichez votre umask actuel
umask
# (La sortie est probablement 0022 ou 0002)
# 3. Créez un fichier et un dossier avec le umask par défaut
touch fichier_defaut.txt
mkdir dossier_defaut
ls -l fichier_defaut.txt # Devrait être -rw-r--r-- (644) ou similaire
ls -ld dossier_defaut # Devrait être drwxr-xr-x (755) ou similaire
# 4. Définissez un umask très restrictif pour la session
umask 0077
# 5. Vérifiez que le umask a changé
umask
# Attendu : 0077
# 6. Créez un nouveau fichier et un nouveau dossier
touch fichier_prive.txt
mkdir dossier_prive
# 7. Vérifiez les permissions (le umask 077 a été appliqué)
ls -l fichier_prive.txt
# Attendu : -rw------- (Base 666 - 077 = 600)
ls -ld dossier_prive
# Attendu : drwx------ (Base 777 - 077 = 700)
# 8. Remettez le umask à sa valeur par défaut
umask 0022
# 9. (Pour info) Le umask est réinitialisé à la prochaine connexion.
# Vous pouvez le définir de manière permanente dans ~/.bashrc ou /etc/profile.