Aller au contenu

Soluce Exercice Librairie

Exercice interactif : Système de gestion d’une Librairie

Section intitulée « Exercice interactif : Système de gestion d’une Librairie »

Félicitations ! Vous venez d’être embauché(e) comme administrateur système d’une librairie numérique innovante. Votre mission : mettre en place un système de permissions sécurisé pour gérer les différents acteurs de la librairie.

Votre équipe :

  • Alice, Bob, Charlie : lecteurs passionnés qui adorent découvrir de nouveaux livres
  • Victor Hugo, Jules Verne, George Sand : auteurs prestigieux qui travaillent sur leurs manuscrits
  • Le bibliothécaire et le gestionnaire : ils s’occupent de la gestion quotidienne

Avant de commencer, réfléchissez : Dans une vraie librairie, qui devrait avoir accès à quoi ? Listez 3 règles de sécurité importantes selon vous.

Votre réponse :

1. ________________________________
2. ________________________________
3. ________________________________
Fenêtre de terminal
# Créer les trois groupes principaux
sudo groupadd lecteurs
sudo groupadd auteurs
sudo groupadd libraires
# Vérifier la création
getent group | grep -E "(lecteurs|auteurs|libraires)"

Question : Que fait la commande getent group ? Pourquoi utilise-t-on grep après ?

💡 Cliquez pour voir la réponse

getent group affiche tous les groupes du système. grep -E filtre uniquement les lignes contenant “lecteurs”, “auteurs” ou “libraires” pour vérifier que nos groupes ont bien été créés.

Fenêtre de terminal
sudo useradd -m -s /bin/bash -G lecteurs alice
sudo useradd -m -s /bin/bash -G lecteurs bob
sudo useradd -m -s /bin/bash -G lecteurs charlie
# Définir les mots de passe
sudo passwd alice
sudo passwd bob
sudo passwd charlie

Regardez la commande useradd. Que signifient les options -m, -s /bin/bash, et -G lecteurs ?

💡 Voir la réponse
  • -m : crée le répertoire home de l’utilisateur
  • -s /bin/bash : définit bash comme shell par défaut
  • -G lecteurs : ajoute l’utilisateur au groupe “lecteurs”

🎯 Mission : Créer les auteurs (avec une particularité)

Section intitulée « 🎯 Mission : Créer les auteurs (avec une particularité) »
Fenêtre de terminal
sudo useradd -m -s /bin/bash -G auteurs,lecteurs victor_hugo
sudo useradd -m -s /bin/bash -G auteurs,lecteurs jules_verne
sudo useradd -m -s /bin/bash -G auteurs,lecteurs george_sand
# Mots de passe
sudo passwd victor_hugo
sudo passwd jules_verne
sudo passwd george_sand

Pourquoi les auteurs sont-ils AUSSI dans le groupe “lecteurs” ? Donnez 2 raisons pratiques.

Votre réponse :

Raison 1: ________________________________
Raison 2: ________________________________
💡 Voir la réponse suggérée
  1. Les auteurs ont besoin de consulter le catalogue pour voir les autres livres
  2. Ils doivent pouvoir lire les œuvres de leurs collègues pour s’inspirer ou collaborer

🎯 Mission : Créer les libraires (super-utilisateurs)

Section intitulée « 🎯 Mission : Créer les libraires (super-utilisateurs) »
Fenêtre de terminal
sudo useradd -m -s /bin/bash -G libraires,auteurs,lecteurs bibliothecaire
sudo useradd -m -s /bin/bash -G libraires,auteurs,lecteurs gestionnaire
# Mots de passe
sudo passwd bibliothecaire
sudo passwd gestionnaire

Exercice pratique : Vérifiez que victor_hugo appartient bien à tous ses groupes :

Fenêtre de terminal
groups victor_hugo
id victor_hugo

Question : Combien de groupes devez-vous voir ? Lesquels ?

Essayez de créer la structure suivante SANS regarder la solution. Utilisez la syntaxe avec les accolades {} :

librairie/
├── catalogue/
│ ├── romans/
│ ├── poesie/
│ └── theatre/
├── auteurs/
│ ├── victor_hugo/
│ ├── jules_verne/
│ └── george_sand/
└── administration/
├── rapports/
└── gestion/

Votre tentative :

Fenêtre de terminal
# Écrivez votre commande ici :
💡 Solution
Fenêtre de terminal
mkdir -p librairie/{catalogue,auteurs,administration}
mkdir -p librairie/catalogue/{romans,poesie,theatre}
mkdir -p librairie/auteurs/{victor_hugo,jules_verne,george_sand}
mkdir -p librairie/administration/{rapports,gestion}

Avant de configurer, réfléchissez : quelle devrait être la permission numérique (ex: 755) pour :

  • Un dossier personnel d’auteur ?
  • Le dossier administration ?
  • Le catalogue public ?

Vos prédictions :

Dossier auteur: _____ (justification: _________________)
Administration: _____ (justification: _________________)
Catalogue: _____ (justification: ___________________)
Fenêtre de terminal
# Dossier racine librairie
sudo chown root:libraires librairie
sudo chmod 755 librairie

Analysez la ligne sudo chown root:libraires librairie. Qui devient propriétaire ? Qui devient groupe propriétaire ? Pourquoi ce choix ?

Fenêtre de terminal
# Catalogue (lecture publique)
sudo chown root:lecteurs librairie/catalogue
sudo chmod 755 librairie/catalogue
# Dossiers auteurs (spécifiques à chaque auteur)
sudo chown victor_hugo:auteurs librairie/auteurs/victor_hugo
sudo chown jules_verne:auteurs librairie/auteurs/jules_verne
sudo chown george_sand:auteurs librairie/auteurs/george_sand
sudo chmod 750 librairie/auteurs/*

Exercice : Décryptez chmod 750 pour un dossier d’auteur :

  • Propriétaire (l’auteur) peut : ________________
  • Groupe (auteurs) peut : ____________________
  • Autres peuvent : ___________________________

Imaginez : Victor Hugo veut créer un nouveau chapitre dans son dossier, tandis que Jules Verne souhaite juste consulter le travail de Victor. Avec les permissions actuelles (750), que peut faire chacun ?

Fenêtre de terminal
# Administration (libraires seulement)
sudo chown root:libraires librairie/administration
sudo chmod 770 librairie/administration

Pourquoi 770 pour l’administration et non 755 ? Quel est le risque avec 755 ?


Nous allons créer du contenu pour tester nos permissions. Vous allez jouer le rôle d’un libraire et remplir le catalogue !

Fenêtre de terminal
# Romans - Créons Les Misérables
sudo tee librairie/catalogue/romans/les_miserables.txt << 'EOF'
Les Misérables - Victor Hugo
Tome I : Fantine
Tant qu'il existera, par le fait des lois et des mœurs,
une damnation sociale créant artificiellement, en pleine civilisation,
des enfers, et compliquant d'une fatalité humaine la destinée qui est divine...
EOF

À vous ! Créez le fichier “Vingt mille lieues sous les mers” dans le dossier romans. Inventez un petit extrait du chapitre 1.

Votre commande :

Fenêtre de terminal
# Écrivez votre commande tee ici :
Fenêtre de terminal
# Théâtre
sudo tee librairie/catalogue/theatre/hernani.txt << 'EOF'
Hernani - Victor Hugo
Acte I, Scène I
Serait-ce déjà lui ? C'est bien à l'escalier
Dérobé... Vite, ouvrons !
EOF
# Poésie
sudo tee librairie/catalogue/poesie/contemplations.txt << 'EOF'
Les Contemplations - Victor Hugo
Elle était déchaussée, elle était décoiffée,
Assise, les pieds nus, parmi les joncs penchants...
EOF

Maintenant, incarnez Victor Hugo ! Connectez-vous en tant que lui et créez son manuscrit personnel.

Fenêtre de terminal
# Devenez Victor Hugo
su - victor_hugo
# Créez votre œuvre en cours
tee librairie/auteurs/victor_hugo/nouveau_roman.txt << 'EOF'
Nouveau projet de roman - Brouillon
Titre provisoire : "L'Homme qui rit"
Notes d'écriture :
- Personnage principal : Gwynplaine
- Époque : Angleterre, fin XVIIe siècle
EOF
# Revenez à votre session normale
exit

Que remarquez-vous de différent entre la commande pour Victor Hugo et celles d’avant ? Pourquoi ne met-on plus sudo ?

💡 Suggestion de réponse
  • On s’est connecté en tant que Victor Hugo avec su - victor_hugo
  • On opère maintenant depuis son compte, pas depuis le compte administrateur
  • Victor Hugo a les droits nécessaires dans son propre dossier

Créez maintenant les manuscrits des autres auteurs. Attention : chacun doit créer SON fichier dans SON dossier !

💡 Commandes pour Jules Verne
Fenêtre de terminal
sudo -u jules_verne tee librairie/auteurs/jules_verne/projet_scientifique.txt << 'EOF'
Nouveau projet - Roman d'aventures scientifiques
Titre : "De la Terre à la Lune"
Concept : Voyage spatial grâce à un canon géant
Lieu : Baltimore, États-Unis
EOF

Les permissions Unix classiques (rwx pour user/group/other) ne suffisent plus ! Nous avons 3 groupes différents qui ont besoin de permissions spécifiques sur les mêmes fichiers.

Avec les permissions Unix classiques seulement, quel problème rencontrerait-on pour donner :

  • Lecture seule aux lecteurs sur le catalogue
  • Lecture seule aux auteurs sur le catalogue
  • Accès total aux libraires sur le catalogue

Indice : pensez au fait qu’il n’y a qu’UN seul “groupe propriétaire” possible…

Étape 4.1 : Catalogue (lecture pour tous, gestion pour libraires)

Section intitulée « Étape 4.1 : Catalogue (lecture pour tous, gestion pour libraires) »
Fenêtre de terminal
# Tous les groupes peuvent lire le catalogue, mais seuls les libraires modifient
sudo setfacl -R -m g:lecteurs:r-x librairie/catalogue
sudo setfacl -R -m g:auteurs:r-x librairie/catalogue
sudo setfacl -R -m g:libraires:rwx librairie/catalogue

Exercice : Que signifie setfacl -R -m g:lecteurs:r-x ?

  • setfacl : ___________________________
  • -R : ________________________________
  • -m : ________________________________
  • g:lecteurs:r-x : ____________________
Réponse 🔧 Décomposition complète
  • setfacl : Set File Access Control Lists = Définir/modifier les listes de contrôle d’accès (permissions étendues)
  • R : Récursif = Appliquer la commande à tous les sous-dossiers et fichiers contenus dans le répertoire cible
  • m : Modify = Modifier/ajouter une règle ACL sans supprimer les permissions existantes
  • g:lecteurs:r-x :
    • g: = concerne un groupe (group)
    • lecteurs = nom du groupe cible
    • r-x = permissions accordées :
      • r = read (lecture)
      • = pas de write (écriture interdite)
      • x = execute (exécution/navigation pour dossiers)

Vérifiez l’effet de vos ACL :

Fenêtre de terminal
ls -la librairie/catalogue/romans/
# Que remarquez-vous après "les_miserables.txt" ?
getfacl librairie/catalogue/romans/les_miserables.txt
# Combien de lignes group: voyez-vous ?
Fenêtre de terminal
# Pour que les NOUVEAUX fichiers héritent automatiquement des bonnes permissions
sudo setfacl -d -m g:lecteurs:r-x librairie/catalogue
sudo setfacl -d -m g:auteurs:r-x librairie/catalogue
sudo setfacl -d -m g:libraires:rwx librairie/catalogue

Quelle est la différence entre setfacl -m et setfacl -d -m ? Pourquoi a-t-on besoin des deux ?

Réponse

🔧 Fonctionnement de chaque commande

  • setfacl -m : Applique les ACL aux fichiers et dossiers EXISTANTS uniquement
  • setfacl -d -m : Définit les ACL par DÉFAUT pour les NOUVEAUX fichiers/dossiers qui seront créés dans ce dossier

Étape 4.2 : Dossiers auteurs (accès restreint et personnel)

Section intitulée « Étape 4.2 : Dossiers auteurs (accès restreint et personnel) »
Fenêtre de terminal
# Victor Hugo : accès total à son dossier, lecture pour collègues auteurs, interdit aux lecteurs
sudo setfacl -R -m u:victor_hugo:rwx librairie/auteurs/victor_hugo
sudo setfacl -R -m g:libraires:rwx librairie/auteurs/victor_hugo
sudo setfacl -R -m g:auteurs:r-x librairie/auteurs/victor_hugo
sudo setfacl -R -m g:lecteurs:--- librairie/auteurs/victor_hugo

Imaginez cette situation : Alice (lectrice) tente d’espionner le manuscrit de Victor Hugo, tandis que Jules Verne (auteur) veut juste s’inspirer de son travail. Que va-t-il se passer ?

Prédiction pour Alice : _________________________ Prédiction pour Jules Verne : ___________________

Au lieu de réécrire 3 fois les mêmes commandes, utilisez une boucle !

Fenêtre de terminal
# Boucle pour tous les auteurs
for auteur in jules_verne george_sand; do
sudo setfacl -R -m u:$auteur:rwx librairie/auteurs/$auteur
sudo setfacl -R -m g:libraires:rwx librairie/auteurs/$auteur
sudo setfacl -R -m g:auteurs:r-x librairie/auteurs/$auteur
sudo setfacl -R -m g:lecteurs:--- librairie/auteurs/$auteur
done
# Bloquer l'accès au dossier parent pour les lecteurs
sudo setfacl -m g:lecteurs:--- librairie/auteurs
Fenêtre de terminal
sudo setfacl -R -m g:libraires:rwx librairie/administration
sudo setfacl -R -m g:auteurs:--- librairie/administration
sudo setfacl -R -m g:lecteurs:--- librairie/administration

Fenêtre de terminal
# Devenez Alice
su - alice
# Mission d'Alice : Explorer la librairie
echo "=== Je suis Alice, une lectrice passionnée ==="
cd librairie/catalogue # Essai 1
echo "✅ J'accède au catalogue !"
ls romans/ # Essai 2
echo "✅ Je vois la liste des romans !"
cat romans/les_miserables.txt # Essai 3
echo "✅ Je peux lire Les Misérables !"
# Maintenant Alice devient curieuse...
echo "=== Voyons ce que font les auteurs... ==="
cd ../auteurs # Essai 4 - Que va-t-il se passer ?

Avant d’exécuter le test d’Alice, que pensez-vous qu’il va se passer à l’étape “Essai 4” ? Pourquoi ?

Votre prédiction : ______________________________

Fenêtre de terminal
# Alice essaie de tricher...
echo "test" > ../catalogue/romans/alice_etait_la.txt # Essai 5
ls ../administration # Essai 6
# Retour au mode normal
exit
Fenêtre de terminal
# Devenez Victor Hugo
su - victor_hugo
echo "=== Je suis Victor Hugo, auteur prestigieux ==="
cd librairie/auteurs/victor_hugo # Navigation dans son royaume
echo "✅ J'accède à mon atelier d'écriture !"
echo "Nouveau chapitre génial !" >> nouveau_roman.txt # Écriture créative
echo "✅ J'enrichis mon œuvre !"
# Victor veut voir le travail de ses collègues
cd ../jules_verne # Visite chez un collègue
cat projet_scientifique.txt # Lecture du travail d'autrui
echo "✅ Je m'inspire du travail de Jules !"
# Victor essaie d'être vilain...
echo "Victor était là" > sabotage.txt # Tentative de sabotage

Qu’est-ce qui devrait empêcher Victor de créer le fichier “sabotage.txt” chez Jules Verne ?

Votre analyse :

Mécanisme de protection : _______________________
Permission manquante : __________________________
Principe de sécurité appliqué : __________________
💡 Analyse de sécurité

Mécanisme de protection : ACL sur le dossier /librairie/auteurs/jules_verne

Permission manquante : Permission d’écriture (w) sur le dossier de Jules Verne

  • Victor a g:auteurs:r-x (lecture + navigation) mais PAS w (écriture)
  • Pour créer un fichier, il faut la permission w sur le dossier parent

Principe de sécurité appliqué :

  • Propriété exclusive : Chaque auteur contrôle totalement son espace de travail
  • Collaboration en lecture seule : Les auteurs peuvent s’inspirer mutuellement sans risque de sabotage
  • Séparation des responsabilités : Consultation ≠ Modification

Résultat : Message “Permission denied” quand Victor essaie de créer sabotage.txt

Fenêtre de terminal
# Devenez le bibliothécaire
su - bibliothecaire
echo "=== Je suis le bibliothécaire, maître de la librairie ==="
cd librairie/administration
echo "Rapport mensuel - Janvier 2025" > rapports/janvier.txt
echo "✅ Je gère l'administration !"
echo "Nouveau livre ajouté au catalogue" > catalogue/romans/acquisition.txt
echo "✅ J'enrichis le catalogue !"
cd auteurs/victor_hugo
echo "Note de l'éditeur" >> nouveau_roman.txt
echo "✅ Je supervise le travail des auteurs !"
exit

  • Ajouter des quotas de stockage par auteur avec setquota
  • Configurer des logs d’audit avec auditd pour tracer les accès
  • Intégrer avec un serveur web Apache pour publier le catalogue
  • Mettre en place des sauvegardes automatiques avec conservation des ACL
  • Implémenter SELinux ou AppArmor pour un contrôle d’accès obligatoire
  • Configurer des sessions temporaires pour les comptes auteurs
  • Ajouter une authentification à deux facteurs
  • Mettre en place un chiffrement des manuscrits sensibles
  • Concevoir une structure pour 1000+ auteurs avec sous-groupes par genre
  • Intégrer avec un annuaire LDAP pour la gestion centralisée
  • Automatiser avec Ansible ou Puppet pour le déploiement multi-serveurs
  • Monitoring avec Nagios pour surveiller les permissions

Bravo ! Vous maîtrisez maintenant les permissions Linux comme un vrai administrateur système ! 🎉