2026-06-24 20:17:46 -04:00
|
|
|
---
|
|
|
|
|
- name: Appliquer le groupe serveur_durci
|
|
|
|
|
hosts: serveur_durci
|
|
|
|
|
become: true
|
empreintes muettes, courses de premier demarrage, collision de noms
Quatre meta/empreinte.yml declaraient leurs valeurs A LA RACINE, sans la cle
`setops_empreinte:` : collabora, nextcloud, web_dorsal, web_frontal. Le lecteur
les voyait vides et rendait {0,0,0} — en silence. collab-01 s'est retrouvee avec
1 coeur / 1 Go pour porter Nextcloud ET Collabora, et a cesse de repondre en SSH
faute de memoire. Corrigee : 4c/5632Mo. Une garde refuse desormais cette forme.
Un fichier qui existe mais ne dit rien est pire qu'un fichier absent : le repli
aurait donne des valeurs sensees.
Deux courses de premier demarrage :
- le clone rend la main avant que son .conf existe -> attente active sur l'API ;
- le verrou dpkg frappait hors de `common_packages` -> `lock_timeout` pose en
module_defaults sur les 30 playbooks de groupe, une declaration au lieu de 30.
Au passage, j'ai failli livrer pire que le defaut : une URL coupee avec `>-`
inserait une ESPACE en son milieu. Le lint passait, la requete non.
Enfin : `proxmox_kvm` identifie une VM par son NOM. Une VM heritee homonyme lui
a fait rapporter `ok` sans rien cloner — un deploiement peut donc PARAITRE
reussi alors qu'aucune VM n'existe. Touche D-37 directement.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 16:22:38 -04:00
|
|
|
# Le verrou dpkg est tenu par les maj automatiques de Debian, par vagues, plusieurs
|
|
|
|
|
# minutes apres le premier demarrage. Pose ICI plutot que dans chaque role : toute
|
|
|
|
|
# tache apt du play en herite, y compris celles des roles inclus.
|
|
|
|
|
module_defaults:
|
|
|
|
|
ansible.builtin.apt:
|
|
|
|
|
lock_timeout: 300
|
|
|
|
|
|
2026-06-24 20:17:46 -04:00
|
|
|
gather_facts: true
|
|
|
|
|
|
|
|
|
|
pre_tasks:
|
|
|
|
|
- name: Vérifier que la cible est Debian
|
|
|
|
|
ansible.builtin.assert:
|
|
|
|
|
that:
|
|
|
|
|
- ansible_facts.distribution == "Debian"
|
|
|
|
|
fail_msg: "Ce playbook est prévu pour Debian."
|
|
|
|
|
|
|
|
|
|
roles:
|
|
|
|
|
- hardening_packages
|
|
|
|
|
- sysctl_hardening
|
|
|
|
|
- core_dumps
|
|
|
|
|
- unattended_upgrades
|
|
|
|
|
- apparmor
|
|
|
|
|
- auditd
|
|
|
|
|
- fail2ban_ssh
|
|
|
|
|
- journald
|
|
|
|
|
- ssh_hardening
|
|
|
|
|
- nftables_baseline
|
durcissement : cloud-init nait avec la VM et ne lui survit pas
cloud-init n est pas un logiciel d installation : c est une SOURCE DE
VERITE EXTERNE. Il se reveille a chaque demarrage et relit le lecteur
attache par l hyperviseur, qui peut redefinir comptes, cles SSH, mots de
passe et reseau. Sur une machine que le plan possede, c est un second
maitre — que le plan ne decrit pas, que make valider ne mesure pas, et
qui parle en premier.
Sa tache est finie a la premiere seconde : c est parce qu il a REUSSI a
poser l adresse et les cles qu Ansible a pu entrer.
TROIS MOITIES, ET ELLES SE DEFONT SEPAREMENT.
- le GABARIT le garde : sans lui un clone n a ni adresse ni nom ;
- le SOCLE ne l installe plus : le garder produisait un va-et-vient a
chaque deploiement, deux changed par passage, idempotence perdue ;
- le DURCISSEMENT le retire (roles/cloud_init_retrait, en dernier).
P63 garde les trois, plus le CONTENU du role : une coquille vide passerait
les trois premiers controles sans rien fermer. Quatre controles negatifs
rejoues.
CE QUI REND LE RETRAIT SUR EST MESURE, PAS SUPPOSE (obs-01, 2026-09-09) :
/etc/network/interfaces.d/50-cloud-init n appartient a aucun paquet — dpkg
-S ne le trouve pas — et le postrm ne le nomme jamais, meme en purge.
L adresse survit. Le role le verifie quand meme, avant et apres, et n
accuse que si le retrait l a emporte : une VM qui perd ce fichier ne se
plaint pas, elle repart sans adresse et plus personne ne peut entrer.
DEUX CHOIX DITS FRANCHEMENT. cloud-guest-utils reste (growpart : ni
service, ni port, ni source de donnees). Les ~29 paquets orphelins ne sont
pas retires par defaut : autoremove deciderait a partir des drapeaux dpkg,
et un durcissement ne doit pas pouvoir surprendre.
NON DEPLOYE : le code est ecrit, valide et prouve ; il n a pas ete
applique a la flotte. Essai a blanc sur obs-01 : cloud-init a retirer,
configuration reseau intacte.
make prouver : CONFORME, 62 OK, 0 echec, 1 saute (63 preuves).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-09 09:25:42 -04:00
|
|
|
# EN DERNIER, ET C'EST LE POINT. cloud-init a donne a la VM son adresse, son nom et
|
|
|
|
|
# ses cles d'hote a la premiere seconde ; c'est parce qu'il a REUSSI qu'Ansible a pu
|
|
|
|
|
# entrer. Mais il se reveille a CHAQUE demarrage et relit le lecteur attache par
|
|
|
|
|
# l'hyperviseur, qui peut redefinir comptes, cles SSH, mots de passe et reseau. Sur
|
|
|
|
|
# une machine que le plan possede desormais, c'est un second maitre — que le plan ne
|
|
|
|
|
# decrit pas, et qui parle en premier.
|
|
|
|
|
#
|
|
|
|
|
# Il est retire ICI et pas ailleurs : apres que tout le reste soit pose, pour que la
|
|
|
|
|
# machine ne depende plus de rien qu'il aurait fourni.
|
|
|
|
|
- cloud_init_retrait
|