// NSI — Terminale — TP Linux  ·  github.com/babash/TP-commandes-hacker

Opération MIRAGE PROF v11.1

15 missions · 5 phases · Vérification par Qn · Indices progressifs · JSLinux Alpine
00 — Présentation

TP de terminal Linux pour Terminale NSI sur JSLinux Alpine. 15 missions indépendantes en 5 phases progressives. Les notions avancées (options, pipe) sont placées en fin de parcours — l'élève est d'abord à l'aise avec la navigation et la manipulation de fichiers avant de les aborder.

CritèreDétail
NiveauTerminale NSI
Durée1h30 – 2h
EnvironnementJSLinux Alpine x86 — bellard.org/jslinux
Commandes élèveMISSION · Q1..Q15 · STATUT
ValidationQuand l'élève tape Qn, une fois la tâche faite : rien ne valide en arrière-plan
VérificationHistorique : Q1 · état du système : Q3, Q5–Q10 · question : Q2, Q4, Q11–Q15
Indices3 niveaux par mission, un de plus à chaque échec ; la solution au 3e
PersistanceProgression sauvegardée dans ~/.mirage_save/
01 — Installation

1. Ouvrir bellard.org/jslinux/vm.html?url=alpine-x86.cfg&mem=192

2. Télécharger tp_infiltration.sh depuis GitHub sur la machine locale

3. Cliquer sur ↑ sous le terminal JSLinux pour importer

4. Lancer : . ~/tp_infiltration.sh (point, pas source)

⚠ Ctrl+V inopérant dans JSLinux — coller via clic droit → Paste.

⚙ Avant la séance
  • Tester le lancement complet sur un poste élève : il se termine par « TP pret ! Tape MISSION pour commencer. »
  • Taper ps : la ligne de espion_mirage doit apparaître (c'est la cible de Q11)
  • La progression est conservée entre les relances dans ~/.mirage_save/
02 — Vérification et indices
Trois méthodes de vérification
  • Historique (Q1) — la commande est cherchée dans les 60 dernières lignes de history. Il faut un shell interactif qui garde un historique (ash de JSLinux, bash) : dash n'en a pas.
  • État du système (Q3, Q5–Q10) — le dossier courant ($PWD), la présence des fichiers et dossiers, les droits (stat -c "%a", [ -x … ]).
  • Question (Q2, Q4, Q11–Q15) — read demande ce que la commande a affiché, et la réponse est comparée à celle attendue. Valide que la commande a réellement été exécutée et lue. Q11 demande d'abord le PID de l'espion, puis se valide quand le processus a disparu de ps.
Indices gradués

Chaque échec fait monter le niveau d'indice de la mission (fichier .hints). Le message d'échec ne donne jamais la réponse.

  • Niveau 1 — l'objectif et la commande
  • Niveau 2 — la structure de la commande, avec des ??? à compléter
  • Niveau 3 — la solution complète ; pour Q2, Q12 et Q14, la réponse attendue aussi. Au-delà, la solution reste affichée à chaque échec.
Le processus espion (Q11)

Au lancement, le script crée /tmp/espion_mirage.sh, une boucle qui ne fait qu'attendre, et le lance en arrière-plan. Il l'exécute directement pour qu'il garde son nom dans ps : sous Debian ou Ubuntu, ps n'affiche que le nom du programme, tronqué à 15 caractères (espion_mirage.s). Si /tmp interdit l'exécution, le script le lance avec sh. Relancer le TP arrête l'ancien espion et en lance un nouveau.

Persistance de la progression

~/.mirage_save/.prog est mis à jour à chaque mission validée. Au lancement, avant le rm -rf $TP_DIR, la progression et les niveaux d'indice sont copiés dans ~/.mirage_save/ ; après le mkdir, ils sont restaurés. L'élève peut relancer le TP sans perdre son score. Si ~/.mirage_save/ a été effacé, rien n'est recopié : c'est la remise à zéro.

rm -rf ~/.mirage_save && . ~/tp_infiltration.sh   # repartir de zéro
03 — Corrigé des 15 missions
Phase 1 — Reconnaissance (Q1–Q4)
Q1

pwd

history

Afficher le répertoire courant. Validation : pattern pwd dans les 60 dernières lignes d'historique.

pwd
Q2

ls — question : quel fichier .txt ?

question interactive

Lister serveur/. L'élève répond le nom du fichier visible. Réponse attendue : acces.txt ou acces.

ls ~/infiltration_mirage/serveur/   # ou ls depuis serveur/

ls accepte trop de formes pour être détecté dans l'history → question sur le résultat. En cas d'erreur, les indices gradués ; la réponse n'apparaît qu'au 3e échec.

Q3

cd — validation par $PWD

état du système

Se déplacer dans serveur/. Validation : $PWD = $TP_DIR/serveur, au moment où l'élève tape Q3.

cd ~/infiltration_mirage/serveur/   # puis Q3
Q4

cat — question : mot de passe

question interactive

Lire message_secret.txt. Réponse attendue : M1r4g3_2024.

cat ~/infiltration_mirage/message_secret.txt
Phase 2 — Manipulation de fichiers (Q5–Q8)
Q5

touch — créer un fichier vide

état du système
touch ~/infiltration_mirage/serveur/agent.log

Q5 valide si serveur/agent.log existe.

Q6

cp — copier un fichier

état du système

Il faut d'abord créer exfiltration/ avec mkdir.

mkdir ~/infiltration_mirage/serveur/exfiltration
cp ~/infiltration_mirage/serveur/confidentiel/rapport.txt \
   ~/infiltration_mirage/serveur/exfiltration/

Q6 valide si exfiltration/rapport.txt existe.

Q7

mv — renommer un fichier

état du système
mv ~/infiltration_mirage/serveur/exfiltration/rapport.txt \
   ~/infiltration_mirage/serveur/exfiltration/rapport_cache.txt

Q7 valide si rapport_cache.txt existe dans exfiltration/.

Q8

mkdir — créer un dossier

état du système
mkdir ~/infiltration_mirage/serveur/archive

Q8 valide si serveur/archive/ existe.

Phase 3 — Droits (Q9–Q10)
Q9

chmod 600 — droits restrictifs

état du systèmedroits
chmod 600 ~/infiltration_mirage/serveur/exfiltration/rapport_cache.txt
# 600 = rw------- : User(6=rw) Group(0) Others(0)

Q9 vérifie avec stat -c "%a" et affiche les droits actuels en cas d'échec. Nécessite Q7 accomplie.

Q10

chmod u+x — rendre exécutable

état du systèmedroits
chmod u+x ~/infiltration_mirage/serveur/effacer_traces.sh
# u=user  +=ajouter  x=execution

Q10 vérifie avec [ -x fichier ].

Phase 4 — Processus (Q11)
Q11

ps + kill — identifier et neutraliser

question interactiveprocessus

Q11 demande d'abord le PID affiché par ps. Si correct, invite à lancer kill. Retaper Q11 après le kill pour valider.

ps                         # repérer espion_mirage et son PID
kill <PID>                 # kill -9 si besoin
Q11                        # retaper pour valider

Si l'espion n'est plus dans ps quand l'élève tape Q11 (déjà arrêté), la mission est validée directement. Au 3e échec, la solution affiche le vrai PID.

Phase 5 — Options et pipe | (Q12–Q15)
Q12

ls --help — trouver l'option -a

question interactive

Q12 demande quelle option affiche les fichiers cachés. Réponse : -a ou a ou --all.

ls --help

Sur JSLinux, man n'est pas installé — --help est l'alternative.

Q13

ls -la — voir les fichiers cachés

question interactive

Q13 demande quel fichier caché apparaît. Réponse : .fichier_cache ou fichier_cache.

ls -la ~/infiltration_mirage/serveur/
Q14

cat | grep — filtrer un journal

question interactivepipe |

Q14 explique le principe du pipe puis demande combien de lignes contenant "Transfert" s'affichent. Réponse : 2 ou deux.

cat ~/infiltration_mirage/serveur/logs/access.log | grep Transfert

Point pédagogique central : le pipe | chaîne deux commandes. Q15 le réutilise sur l'historique (history | grep). En cas d'erreur, les indices gradués ; la réponse n'apparaît qu'au 3e échec.

Q15

history | grep — réutiliser le pipe

question interactivepipe |

Q15 demande quelle commande apparaît en premier dans les résultats de history | grep Q. Réponse acceptée : toute réponse qui commence par Q suivi d'un chiffre (Q1, Q14…), espaces ignorés.

history | grep Q
04 — Conseils pédagogiques
Déroulement recommandé
  • 5 min — introduction + rappel légal + distribution fiche élève
  • 10 min — import JSLinux + lancement (Q1–Q4 se valident en quelques minutes)
  • 65–75 min — travail autonome. Chaque Qn réussie affiche un badge et le score
  • 15 min — correction collective sur chmod (Q9), pipe (Q14), kill (Q11)
Points d'attention
  • Q6 cp : l'élève doit d'abord créer exfiltration/ avec mkdir. L'indice niveau 1 le dit.
  • Q7 mv : erreur classique — utiliser cp au lieu de mv. Q7 attend rapport_cache.txt.
  • Q9 chmod : décomposer 600 = r(4)+w(2) | 0 | 0 si nécessaire.
  • Q11 ps : la colonne PID est la première. Rappeler de lire la ligne espion_mirage.
  • Q12 ls --help : man n'existe pas sur Alpine. --help est universel.
  • Q14 pipe : expliquer la métaphore du tuyau — la sortie de gauche entre dans la droite.
Réinitialiser sans perdre la progression
. ~/tp_infiltration.sh
Repartir de zéro
rm -rf ~/.mirage_save && . ~/tp_infiltration.sh
05 — Structure générée
~/infiltration_mirage/
├── message_secret.txt       # Q4 · cat  (mot de passe : M1r4g3_2024)
├── .prog / .hints           # progression et niveaux d'indice (cachés)
└── serveur/
    ├── acces.txt            # Q2 · ls  (réponse : acces.txt)
    ├── effacer_traces.sh    # Q10 · chmod u+x
    ├── .fichier_cache       # Q13 · ls -la  (réponse : .fichier_cache)
    ├── confidentiel/
    │   └── rapport.txt      # Q6 · cp (source)
    ├── public/index.html
    ├── logs/access.log      # Q14 · cat | grep Transfert (2 lignes)
    ├── agent.log            # créé par l'élève (Q5)
    ├── exfiltration/        # créé par l'élève (Q6)
    │   ├── rapport.txt      # Q6 · cp
    │   └── rapport_cache.txt # Q7 · mv · Q9 · chmod 600
    └── archive/             # Q8 · mkdir

~/.mirage_save/              # progression persistante (.prog, .hints)
/tmp/espion_mirage.sh        # Q11 · ps + kill