« Moins de paquets signifie automatiquement plus de sécurité. »
Retirer une dépendance nécessaire dégrade la mission. La réduction doit distinguer l’inutile du requis et vérifier le résultat fonctionnel.
01Construis l’inventaire de décision
Chaque paquet ou service possède :
hôte
état source
état cible
caractère requis
justification
propriétaire
test fonctionnel
rollback
L’inventaire ne se limite pas au nom et à la version.
02Manipule les plans de réduction
lab=/tmp/soria-hardening-linux-$USER
bash module3-linux-hardening.sh setup "$lab"
bash module3-linux-hardening.sh run "$lab"
column -s, -t "$lab/output/package-reduction-plan.csv"
column -s, -t "$lab/output/service-reduction-plan.csv"
column -s, -t "$lab/output/execution-privilege-review.csv"
Le lab ne lance aucun gestionnaire de paquets et ne contacte aucun service manager.
03Observe les retraits proposés
telnet installed → absent
ftp installed → absent
avahi-daemon enabled → disabled
rpcbind enabled → disabled
Chaque retrait est relié à un rôle où la fonction n’est pas requise.
04Observe ce qui doit rester
web nginx et service nginx
bastion openssh-server et sshd
database postgresql et service postgresql
backup backup-agent et service backup-agent
Le validateur refuse toute cible qui retire un élément requis.
05Teste négativement un retrait fonctionnel
Une variante marque nginx comme absent alors que FUNC-WEB l’exige. Elle doit échouer avec :
required package or service removed
Le test empêche une réduction de surface qui détruit la mission représentée.
06Réduis les capabilities
Le dossier représente :
CAP_NET_RAW retirée de soria-health
CAP_NET_BIND_SERVICE conservée pour soria-bind
CAP_DAC_READ_SEARCH retirée du helper de sauvegarde
Une capability conservée doit avoir un besoin explicite. Une capability dangereuse n’est pas justifiée par la seule commodité.
07Durcis l’identité du service
État source :
soria-web.service User=root
soria-backup.service User=root
Cible :
User=soria-web
User=soria-backup
NoNewPrivileges=yes
ProtectSystem=strict ou full
Le lab vérifie la cohérence des colonnes. Il ne charge aucune unité systemd.
08Observe le test négatif d’exécution
Une variante conserve CAP_NET_RAW alors que le besoin est no. Elle doit être rejetée avec :
execution privilege remains excessive
Le même validateur bloque une unité requise encore exécutée par root sans protection représentée.
09Prépare les tests fonctionnels
Après un changement réel autorisé, il faudrait vérifier :
portail disponible
connexion applicative à la base
login administratif via bastion
écriture et lecture du dépôt de sauvegarde
journaux sans refus inattendu
redémarrage après reboot de test
Le lab représente ces fonctions dans functional-test-report.csv sans les exécuter.
10Prépare le retour arrière
Le rollback doit connaître :
- paquet ou service à restaurer ;
- état précédent ;
- fichier de configuration associé ;
- utilisateur et droits précédents ;
- test fonctionnel à rejouer ;
- condition qui impose l’arrêt.
Réinstaller un paquet sans restaurer sa configuration ne suffit pas.
11Respecte la limite de preuve
Le rapport ne démontre pas :
- qu’un paquet a été supprimé ;
- qu’un port n’écoute plus ;
- qu’une capability a été retirée ;
- qu’une unité systemd accepte les options ;
- qu’un service survit au redémarrage.
Décide KEEP, REMOVE ou REDUCE
Analyse deux paquets, deux services et deux privilèges d’exécution. Pour chaque élément, fournis besoin, cible, test fonctionnel, test négatif, rollback et limite. Toute décision de retrait doit préserver la mission.
✓À retenir
Réduire la surface d’exécution signifie supprimer l’inutile, borner le nécessaire et prouver que les fonctions requises restent disponibles.