« Un projet d’administration est terminé dès que les commandes fonctionnent. »
Une livraison exploitable inclut état initial, changements, preuves, tests, incident, correction, rollback et documentation suffisamment précise pour une autre personne.
01Cadre la mission
Tu prépares le dossier d’exploitation d’un petit serveur SORIA. Le laboratoire fournit des données HTTP, SSH, inventaire, états de services, un générateur de rapport et une recette.
export LAB="/tmp/soria-linux-text-$USER"
cat "$LAB/project/README.md"
cat "$LAB/project/acceptance-checklist.md"
mkdir -p "$LAB/project/evidence" "$LAB/project/runbook"
stat, getfaclsystemctl show, journal02Crée l’état initial
{
date -u +%FT%TZ
uname -a
cat /etc/os-release
df -hT
free -h
ps -eo pid,ppid,stat,ni,comm --sort=pid | sed -n '1,40p'
systemctl --failed 2>/dev/null || true
} > "$LAB/project/evidence/01-initial-state.txt"
wc -l "$LAB/project/evidence/01-initial-state.txt"
sed -n '1,40p' "$LAB/project/evidence/01-initial-state.txt"
Chaque preuve commence par un horodatage UTC. Les commandes qui dépendent de systemd peuvent être indisponibles dans un conteneur ; le runbook doit le signaler.
03Vérifie un espace partagé
shared="$LAB/project/shared"
mkdir -p "$shared"
printf 'rapport exploitation
' > "$shared/report.txt"
chmod 2770 "$shared"
chmod 0660 "$shared/report.txt"
stat -c '%a %A %U:%G %n' "$shared" "$shared/report.txt" | tee "$LAB/project/evidence/02-permissions.txt"
Explique le setgid du répertoire, les droits du fichier et le comportement attendu pour les futurs objets. N’ajoute pas une ACL sans besoin identifié.
04Analyse les événements HTTP et SSH
{
printf '%s
' 'HTTP errors:'
grep -nE 'status=(4|5)[0-9]{2}' "$LAB/data/access.log"
printf '%s
' 'SSH failures:'
grep -n 'Failed password' "$LAB/data/auth.log"
printf '%s
' 'SSH success:'
grep -n 'Accepted publickey' "$LAB/data/auth.log"
} > "$LAB/project/evidence/03-events.txt"
cat "$LAB/project/evidence/03-events.txt"
Ajoute dans le runbook les regex utilisées, un exemple positif et un exemple négatif, ainsi que la ligne malformée du log HTTP.
05Produis les indicateurs
awk -F, '
NR == 1 { next }
{ hosts[$7]++; ram[$7] += $6 }
END {
for (owner in hosts)
printf "owner=%s hosts=%d ram_mb=%d
", owner, hosts[owner], ram[owner]
}
' "$LAB/data/inventory.csv" | LC_ALL=C sort > "$LAB/project/evidence/04-inventory-summary.txt"
cat "$LAB/project/evidence/04-inventory-summary.txt"
06Implémente et teste le rapport
cp "$LAB/bin/report-starter.sh" "$LAB/project/soria-report.sh"
chmod +x "$LAB/project/soria-report.sh"
# Implémente le contrat étudié dans la leçon 24, puis lance :
"$LAB/tests/test-report.sh" "$LAB" "$LAB/project/soria-report.sh"
Le script doit produire exactement le rapport attendu, refuser une entrée absente, conserver la destination précédente en cas d’échec et nettoyer ses fichiers temporaires.
07Provoque un incident contrôlé
Crée une copie du log avec une valeur de durée non numérique. Le script doit compter cette ligne comme malformée sans modifier les données originales.
cp "$LAB/data/access.log" "$LAB/tmp/access-incident.log"
printf '%s
' '2026-08-04T07:00:00Z method=GET path=/incident status=503 bytes=80 duration_ms=slow client=10.20.0.99' >> "$LAB/tmp/access-incident.log"
"$LAB/project/soria-report.sh" "$LAB/tmp/access-incident.log" "$LAB/project/evidence/05-incident-report.txt"
grep -E 'malformed_lines|http_5xx' "$LAB/project/evidence/05-incident-report.txt"
Documente symptôme, hypothèse, ligne responsable, comportement du script, correction possible et raison pour laquelle l’entrée est rejetée.
08Écris le runbook
cat > "$LAB/project/runbook/operations.md" <<'EOF'
# Runbook Linux SORIA
## Périmètre
## Prérequis
## État initial
## Permissions
## Analyse HTTP et SSH
## Génération du rapport
## Codes de sortie
## Incident volontaire
## Rollback
## Nettoyage
## Résultats de recette
EOF
sed -n '1,120p' "$LAB/project/runbook/operations.md"
Complète chaque section avec les commandes exactes, les chemins, le résultat attendu et la preuve correspondante.
09Exécute la recette finale
./module5-text-automation-lab.sh validate
"$LAB/tests/test-report.sh" "$LAB" "$LAB/project/soria-report.sh"
test -s "$LAB/project/evidence/01-initial-state.txt"
test -s "$LAB/project/evidence/03-events.txt"
test -s "$LAB/project/evidence/04-inventory-summary.txt"
test -s "$LAB/project/runbook/operations.md"
printf 'final acceptance passed
'
10Prépare rollback et nettoyage
find "$LAB/project" -maxdepth 3 -type f -printf '%p
' | sort
cp -a "$LAB/project" "$HOME/soria-linux-final-project"
./module5-text-automation-lab.sh reset
La copie vers le HOME conserve les livrables avant suppression du laboratoire temporaire. Vérifie son contenu avant le reset.
Critères de réussite
Le projet est réussi lorsque les preuves sont reproductibles, le script passe les tests, l’incident est expliqué, les sorties partielles sont évitées, le rollback est documenté et le laboratoire peut être nettoyé sans toucher au système hôte.
✓Matière terminée
Tu as parcouru le shell, les fichiers, permissions, processus, paquets, boot, systemd, journaux, expressions rationnelles, traitement de texte et automatisation. La compétence finale consiste à relier ces outils dans une exploitation documentée, testée et réversible.