Linux — utilisation avancée et administration · Étape 25

Réalise le projet final d’administration Linux

Mobilise système, permissions, processus, paquets, systemd, journaux, traitement de texte et Bash dans une recette technique complète.

Durée indicative · ~4 hNiveau intermédiairePrérequis conseillé · Leçons 1 à 24Pratique · TP
L’idée reçue

« 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"
Livrable
Contenu minimal
Preuve
Inventaire
système, stockage, processus, réseau
sorties horodatées
Contrôles d’accès
owner, group, mode, ACL si utilisée
stat, getfacl
Service
définition, état, journal, rollback
systemctl show, journal
Analyse
HTTP, SSH, lignes malformées
résultats reproductibles
Automatisation
script, tests, exit codes
acceptance tests

02Cré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.

Évaluation finale

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.

Ta progression

Chargement de l’état… Se connecter pour synchroniser.