Exercice 03 : Permissions et Propriété des Fichiers
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Lire et interpréter les permissions affichées par
ls -l - ✅ Modifier les permissions en notation numérique (755, 644...)
- ✅ Modifier les permissions en notation symbolique (u+x, g-w...)
- ✅ Changer le propriétaire et le groupe d'un fichier
- ✅ Comprendre les implications de sécurité des permissions
Durée estimée : 20 minutes
Difficulté : ⭐⭐☆☆☆ (Débutant+)
Prérequis :
- Avoir complété les exercices 01 et 02
- Un terminal Linux avec accès
sudo
📖 Contexte
Les permissions sont le système de sécurité fondamental de Linux. Elles déterminent qui peut lire, modifier ou exécuter chaque fichier. En DevOps, mal configurer les permissions peut :
- Rendre un site web inaccessible
- Exposer des données sensibles (clés SSH, mots de passe)
- Empêcher un script de s'exécuter
Ce n'est pas un détail : c'est critique.
📋 Énoncé
Vous êtes administrateur d'un serveur web. Vous devez configurer correctement les permissions des fichiers du site, des scripts de déploiement et des clés d'accès pour que chaque utilisateur ait exactement les droits nécessaires - ni plus, ni moins.
🧭 Déroulement de l'exercice
Voici les grandes étapes à réaliser dans l'ordre. Chaque étape décrit ce que vous devez accomplir - à vous de trouver la commande. La solution complète est disponible si vous êtes bloqué.
Tâche 1 : Préparer l'environnement
Créez la structure suivante dans votre home : un dossier exercice-permissions/ contenant 3 sous-dossiers site-web/, scripts/, secrets/. Dans chacun, créez des fichiers représentatifs (fichiers HTML/CSS, un script shell, des fichiers de credentials).
Indice : Utilisez
mkdir -ppour créer les dossiers en une fois. Le contenu exact des fichiers importe peu - l'important est qu'ils existent.
Vérification : ls -la exercice-permissions/ doit lister les 3 sous-dossiers et ls -la exercice-permissions/scripts/ doit montrer votre script.
Tâche 2 : Lire et interpréter les permissions
Affichez les permissions détaillées de tous vos fichiers. Analysez chaque colonne de la sortie de ls -l.
Indice : Le format des permissions est
-rwxrwxrwx: le premier caractère est le type (-= fichier,d= répertoire), puis 3 groupes de 3 : propriétaire, groupe, autres.r=lecture,w=écriture,x=exécution.
Question à se poser : Que signifie 644 en notation octale ? Convertissez mentalement : 6=rw-, 4=r--, 4=r--. Qui peut lire ? Qui peut écrire ?
Vérification : Vous devez pouvoir lire les permissions de n'importe quel fichier et savoir qui peut faire quoi.
Tâche 3 : Configurer les permissions du site web
Les fichiers du site (site-web/) doivent être lisibles par tout le monde mais modifiables uniquement par le propriétaire. Utilisez la notation octale : 644 pour les fichiers, 755 pour les répertoires.
Indice :
chmodaccepte deux notations : symbolique (u+x,g-w...) et octale (755,644...). Les 3 chiffres représentent : propriétaire, groupe, autres. Chaque chiffre est la somme de r(4)+w(2)+x(1).
Vérification : ls -l site-web/ doit afficher -rw-r--r-- pour les fichiers.
Tâche 4 : Rendre le script de déploiement exécutable
Le script scripts/deploy.sh doit pouvoir être lancé directement avec ./deploy.sh. Actuellement, le bit d'exécution est absent - ajoutez-le pour le propriétaire uniquement.
Indice : La notation symbolique est pratique ici :
u+xajoute le bit d'exécution pour le propriétaire (user) uniquement.
Vérification : Après modification, ls -l scripts/deploy.sh doit afficher -rwxr--r-- (ou similaire avec x pour le propriétaire). Tentez de lancer ./scripts/deploy.sh.
Tâche 5 : Protéger les fichiers sensibles
Les fichiers dans secrets/ contiennent des mots de passe et des clés API. Ils ne doivent être lisibles et modifiables QUE par le propriétaire - personne d'autre.
Indice : Le code octal pour "propriétaire seul peut lire et écrire, personne d'autre" est
600. Pour "propriétaire seul peut tout faire", c'est700.
Question à se poser : Que se passe-t-il si les permissions d'une clé SSH sont trop permissives ? (Essayez de vous en souvenir ou testez.)
Vérification : ls -l secrets/ doit afficher -rw------- pour chaque fichier. Testez qu'un autre utilisateur ne peut pas les lire.
Tâche 6 : Vérifier la cohérence globale
Passez en revue toutes les permissions. Assurez-vous que chaque fichier a exactement les permissions dont il a besoin - ni plus, ni moins.
Indice : C'est le principe du moindre privilège : donner uniquement les permissions nécessaires à l'usage prévu. C'est un principe fondamental de sécurité.
Vérification : ls -lR exercice-permissions/ doit afficher une liste cohérente où chaque type de fichier a ses permissions appropriées.
� Mini-Projet : Sécuriser un environnement de déploiement
Vous allez configurer les permissions d'un environnement complet comme si vous prépariez un serveur de production.
Scénario : Vous préparez un serveur qui héberge une application web. Plusieurs types d'utilisateurs accèdent au serveur : le développeur (vous), le serveur web (www-data), et le script de déploiement automatisé.
Ce que vous devez réaliser :
- Créez l'arborescence suivante :
secure-deploy/
├── public/ # Servi par le serveur web
│ ├── index.html
│ └── style.css
├── private/ # Données internes
│ └── database.conf
├── scripts/
│ └── deploy.sh
└── logs/
└── app.log- Créez chaque fichier avec du contenu fictif
- Appliquez les permissions suivantes :
public/et ses fichiers : lisibles par tout le monde (755/644)private/database.conf: lisible uniquement par le propriétaire (600)scripts/deploy.sh: exécutable par le propriétaire, lisible par le groupe (750)logs/app.log: modifiable par le propriétaire, lisible par le groupe (640)
- Vérifiez chaque permission avec
ls -l - Tentez de lire
private/database.confavec un compte différent (ou vérifiez que les permissions interdisent la lecture par les "others")
Checkpoints de validation :
ls -l public/affiche-rw-r--r--pourindex.htmletstyle.cssls -l private/database.confaffiche-rw-------ls -l scripts/deploy.shaffiche-rwxr-x---ls -l logs/app.logaffiche-rw-r-----ls -ld public/affichedrwxr-xr-x- Le fichier
private/database.confn'est pas accessible en lecture pour les "others" (les 3 derniers bits de permission sont---)
�📚 Étapes Détaillées
Étape 1 : Préparer l'Environnement
Instructions :
- Créez un espace de travail :
cd ~
mkdir -p exercice-permissions/{site-web,scripts,secrets}
cd exercice-permissions- Créez des fichiers de test :
echo "<h1>Bienvenue</h1>" > site-web/index.html
echo "body { color: #333; }" > site-web/style.css
echo '#!/bin/bash' > scripts/deploy.sh
echo 'echo "Déploiement en cours..."' >> scripts/deploy.sh
echo "DB_PASSWORD=SuperSecret123" > secrets/db-credentials.txt
echo "API_KEY=sk-abcdef123456" > secrets/api-key.txtÉtape 2 : Lire les Permissions
Objectif : Interpréter la sortie de ls -l
Instructions :
- Affichez les permissions de tous les fichiers :
ls -la site-web/
ls -la scripts/
ls -la secrets/- Concentrez-vous sur la première colonne. Prenons un exemple :
-rw-r--r-- 1 alice alice 21 Apr 10 10:00 index.htmlDécomposition :
- rw- r-- r--
│ │ │ └── Autres (o) : lecture seule
│ │ └── Groupe (g) : lecture seule
│ └── Propriétaire (u) : lecture + écriture
└── Type (- = fichier, d = dossier, l = lien)- Convertissez mentalement en notation numérique :
rw- = 4+2+0 = 6
r-- = 4+0+0 = 4
r-- = 4+0+0 = 4
→ 644- Vérifiez avec
statpour voir la notation numérique directement :
stat -c "%a %n" site-web/index.htmlRésultat attendu :
644 site-web/index.htmlÉtape 3 : Modifier les Permissions - Notation Numérique
Objectif : Utiliser chmod avec des chiffres
Instructions :
- Le script de déploiement doit être exécutable par le propriétaire :
ls -l scripts/deploy.sh
chmod 755 scripts/deploy.sh
ls -l scripts/deploy.shRésultat attendu :
-rwxr-xr-x 1 alice alice ... deploy.sh755 signifie :
- Propriétaire : lecture + écriture + exécution (7)
- Groupe : lecture + exécution (5)
- Autres : lecture + exécution (5)
- Testez que le script est bien exécutable :
./scripts/deploy.shRésultat attendu :
Déploiement en cours...- Les fichiers secrets doivent être lisibles uniquement par le propriétaire :
chmod 600 secrets/db-credentials.txt
chmod 600 secrets/api-key.txt
ls -l secrets/Résultat attendu :
-rw------- 1 alice alice ... db-credentials.txt
-rw------- 1 alice alice ... api-key.txt600 signifie : seul le propriétaire peut lire et écrire. Personne d'autre.
- Les fichiers du site web doivent être lisibles par tout le monde mais modifiables seulement par le propriétaire :
chmod 644 site-web/index.html
chmod 644 site-web/style.css
ls -l site-web/Étape 4 : Modifier les Permissions - Notation Symbolique
Objectif : Utiliser chmod avec des lettres
Instructions :
- Créez un nouveau script :
echo '#!/bin/bash' > scripts/backup.sh
echo 'echo "Backup en cours..."' >> scripts/backup.sh- Ajoutez le droit d'exécution pour le propriétaire :
ls -l scripts/backup.sh
chmod u+x scripts/backup.sh
ls -l scripts/backup.shRésultat attendu : Le x apparaît dans les permissions du propriétaire.
- Retirez l'accès en lecture pour les autres :
chmod o-r scripts/backup.sh
ls -l scripts/backup.sh- Donnez la lecture à tout le monde :
chmod a+r scripts/backup.sh
ls -l scripts/backup.shAide-mémoire de la notation symbolique :
| Commande | Signification |
|---|---|
u+x | Ajouter exécution au propriétaire |
g-w | Retirer écriture au groupe |
o-rwx | Retirer tout aux autres |
a+r | Ajouter lecture pour tout le monde |
u=rwx,go=rx | Propriétaire : tout, Groupe et Autres : lecture + exécution |
Étape 5 : Modifier la Propriété
Objectif : Utiliser chown et chgrp
Instructions :
Note :
chownnécessitesudo. Si vous n'avez passudo, lisez les étapes et comprenez les commandes.
- Voir le propriétaire actuel :
ls -l site-web/index.html- Changer le propriétaire (simulation d'un serveur web) :
sudo chown root site-web/index.html
ls -l site-web/index.htmlRésultat attendu : Le propriétaire est maintenant root.
- Changer le propriétaire ET le groupe en une fois :
sudo chown root:root site-web/style.css
ls -l site-web/style.css- Restaurer vos fichiers :
sudo chown -R $USER:$USER site-web/
ls -l site-web/L'option -R applique le changement récursivement à tout le contenu du dossier.
Étape 6 : Permissions sur les Répertoires
Objectif : Comprendre que les permissions fonctionnent différemment sur les dossiers
Instructions :
- Créez un dossier de test :
mkdir test-dossier
echo "fichier secret" > test-dossier/secret.txt- Retirez le droit d'exécution du dossier :
chmod 644 test-dossier
ls test-dossier/Résultat attendu : Une erreur ! Le droit x sur un dossier signifie "pouvoir entrer dedans".
ls: cannot access 'test-dossier/secret.txt': Permission denied- Restaurez le droit :
chmod 755 test-dossier
ls test-dossier/Leçon clé : Sur un dossier, x = droit de traverser (entrer), r = droit de lister, w = droit de créer/supprimer des fichiers.
Étape 7 : Cas Pratiques DevOps
Objectif : Appliquer les permissions dans des scénarios réels
Instructions :
- Clé SSH - doit être
600obligatoirement :
echo "MA_FAUSSE_CLE_PRIVEE" > secrets/id_rsa
chmod 600 secrets/id_rsa
stat -c "%a %n" secrets/id_rsaSSH refusera de fonctionner si votre clé privée a des permissions trop permissives. C'est un contrôle de sécurité.
- Script exécutable -
755:
stat -c "%a %n" scripts/deploy.sh- Fichier de configuration -
644:
stat -c "%a %n" site-web/index.html- Vérifiez toutes les permissions du projet :
find . -type f -exec stat -c "%a %n" {} \;Résultat attendu (résumé) :
644 ./site-web/index.html
644 ./site-web/style.css
755 ./scripts/deploy.sh
7xx ./scripts/backup.sh
600 ./secrets/db-credentials.txt
600 ./secrets/api-key.txt
600 ./secrets/id_rsaÉtape 8 : Nettoyage
cd ~
rm -r exercice-permissions✅ Vérification Finale
- Que signifie
chmod 644? → rw-r--r-- (propriétaire lit/écrit, les autres lisent seulement) - Que signifie le
xsur un dossier ? → Permission d'entrer dans le dossier - Comment rendre un script exécutable ? →
chmod +x script.shouchmod 755 script.sh - Quelle permission pour une clé SSH privée ? →
600 - Comment changer le propriétaire d'un dossier et de son contenu ? →
sudo chown -R user:group dossier/
📖 Pour Aller Plus Loin
- Étudiez le umask :
umaskdétermine les permissions par défaut des nouveaux fichiers. Tapezumaskpour voir le masque actuel. - Étudiez les permissions spéciales : SUID (
chmod u+s), SGID (chmod g+s), Sticky bit (chmod +t). - Consultez
man chmodpour la documentation complète.