ssh : retirer les drop-ins d'une nomenclature abandonnee
Mesure sur forge-01 (par l'agent invite, sans dependre du reseau) : quatre drop-ins SSH coexistent la ou il devrait y en avoir deux. Les roles se sont appeles `chezlepro` avant de porter le nom du moteur ; le renommage a change le fichier DEPOSE sans retirer le precedent. Et les paires divergent : MaxSessions 2 contre 10, MaxStartups 5:30:20 contre 10:30:60. sshd retient la PREMIERE valeur rencontree pour chaque mot-cle et lit les drop-ins dans l'ordre lexical — c'est donc l'ANCIEN fichier qui gagne. Une configuration qu'on croit avoir remplacee reste aux commandes, en silence. ssh_baseline et ssh_hardening retirent chacun le fichier de la nomenclature qu'ils ont abandonnee, AVANT de deposer le leur, et notifient la meme validation. La liste est declarative et ne contient que des noms reellement deposes un jour : supprimer un fichier qu'on n'a jamais ecrit serait effacer la configuration d'un autre. PAS ENCORE EPROUVE : les seules machines portant les anciens fichiers sont celles de patient 0, hors d'atteinte depuis le poste. Ecrit, linte, reste a le voir agir. 42 preuves vertes, ansible-lint profil production. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
6715f0d5c5
commit
0b6c036f8c
5 changed files with 83 additions and 0 deletions
31
CHANGELOG.md
31
CHANGELOG.md
|
|
@ -1,5 +1,36 @@
|
||||||
# CHANGELOG — Set-OPS
|
# CHANGELOG — Set-OPS
|
||||||
|
|
||||||
|
## 2026-08-25 — Un renommage de rôle laissait son ancien fichier aux commandes
|
||||||
|
|
||||||
|
Mesuré sur `forge-01`, par l'agent invité — donc sans dépendre du réseau. Quatre
|
||||||
|
drop-ins SSH coexistent là où il devrait y en avoir deux :
|
||||||
|
|
||||||
|
```
|
||||||
|
10-chezlepro.conf 10-setops.conf
|
||||||
|
20-chezlepro-hardening.conf 20-setops-hardening.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Les rôles se sont appelés `chezlepro` avant de porter le nom du moteur. Le renommage a
|
||||||
|
changé le fichier **déposé** sans retirer le précédent. Et les paires ne disent pas la même
|
||||||
|
chose : `MaxSessions 2` contre `10`, `MaxStartups 5:30:20` contre `10:30:60`.
|
||||||
|
|
||||||
|
**C'est l'ancien qui gagne.** `sshd` retient la *première* valeur rencontrée pour chaque
|
||||||
|
mot-clé, et lit les drop-ins dans l'ordre lexical : `20-chezlepro-hardening.conf` passe
|
||||||
|
avant `20-setops-hardening.conf`. Une configuration qu'on croit avoir remplacée reste donc
|
||||||
|
aux commandes, en silence — et sa trace se lirait un jour comme une lenteur inexplicable
|
||||||
|
pendant un déploiement parallèle, cherchée partout sauf là.
|
||||||
|
|
||||||
|
`ssh_baseline` et `ssh_hardening` retirent désormais chacun le fichier de la nomenclature
|
||||||
|
qu'il a abandonnée, **avant** de déposer le sien, et notifient la même validation. La liste
|
||||||
|
est déclarative (`ssh_baseline_fichiers_perimes`, `ssh_hardening_fichiers_perimes`) et ne
|
||||||
|
contient que des noms qu'on a réellement déposés un jour : supprimer un fichier qu'on n'a
|
||||||
|
jamais écrit serait effacer la configuration de quelqu'un d'autre.
|
||||||
|
|
||||||
|
**Pas encore éprouvé.** Les seules machines portant les anciens fichiers sont celles de
|
||||||
|
patient 0, actuellement hors d'atteinte depuis le poste — leur écosystème est sain, c'est
|
||||||
|
le chemin d'entrée qui est coupé. Le correctif est écrit et validé, il reste à le voir
|
||||||
|
retirer un fichier pour de vrai.
|
||||||
|
|
||||||
## 2026-08-25 — Le clonage inter-nœuds : quatre défauts que la première VM ailleurs a révélés
|
## 2026-08-25 — Le clonage inter-nœuds : quatre défauts que la première VM ailleurs a révélés
|
||||||
|
|
||||||
Toutes les VM naissaient jusqu'ici sur le nœud du gabarit, puis migraient. `site-cache-01`
|
Toutes les VM naissaient jusqu'ici sur le nœud du gabarit, puis migraient. `site-cache-01`
|
||||||
|
|
|
||||||
|
|
@ -26,3 +26,16 @@ ssh_baseline_pubkey_authentication: "yes"
|
||||||
# etat: present # `absent` pour revoquer
|
# etat: present # `absent` pour revoquer
|
||||||
ssh_baseline_admin_user: "{{ sudo_ansible_admin_user | default('ansible') }}"
|
ssh_baseline_admin_user: "{{ sudo_ansible_admin_user | default('ansible') }}"
|
||||||
ssh_baseline_cles_admin: []
|
ssh_baseline_cles_admin: []
|
||||||
|
|
||||||
|
# LES FICHIERS QU'UNE NOMENCLATURE ABANDONNEE A LAISSES DERRIERE ELLE.
|
||||||
|
#
|
||||||
|
# Ce role a porte le nom `chezlepro` avant de porter celui du moteur. Le renommage a
|
||||||
|
# change le fichier DEPOSE sans retirer le precedent : les deux coexistent sur toute
|
||||||
|
# machine anterieure au changement, et sshd retient la PREMIERE valeur qu'il rencontre —
|
||||||
|
# donc l'ancienne, l'ordre lexical la placant devant.
|
||||||
|
#
|
||||||
|
# Cette liste est le registre de ces mues. On n'y ajoute que des noms qu'on a REELLEMENT
|
||||||
|
# deposes un jour : retirer un fichier qu'on n'a jamais ecrit serait s'arroger le droit de
|
||||||
|
# supprimer la configuration de quelqu'un d'autre.
|
||||||
|
ssh_baseline_fichiers_perimes:
|
||||||
|
- 10-chezlepro.conf
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,25 @@
|
||||||
group: root
|
group: root
|
||||||
mode: "0755"
|
mode: "0755"
|
||||||
|
|
||||||
|
# UN RENOMMAGE DE ROLE LAISSE SON ANCIEN FICHIER EN VIGUEUR (2026-08-25).
|
||||||
|
#
|
||||||
|
# Ce role s'appelait `chezlepro` et deposait `10-chezlepro.conf`. Renomme en `setops`, il
|
||||||
|
# depose `10-setops.conf` — et l'ancien EST RESTE. Mesure sur forge-01 : les deux paires
|
||||||
|
# coexistent, et elles ne disent pas la meme chose (`MaxSessions 2` contre `10`).
|
||||||
|
#
|
||||||
|
# sshd retient LA PREMIERE valeur rencontree pour chaque mot-cle, et lit les drop-ins dans
|
||||||
|
# l'ordre lexical : c'est donc l'ANCIEN fichier qui gagne. Une configuration qu'on croit
|
||||||
|
# avoir remplacee reste aux commandes, en silence, et sa trace se lira un jour comme une
|
||||||
|
# lenteur inexplicable pendant un deploiement parallele.
|
||||||
|
#
|
||||||
|
# Retirer un fichier qu'on ne depose plus fait partie du travail de le deposer.
|
||||||
|
- name: Retirer les configurations SSH d'une nomenclature abandonnee
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "/etc/ssh/sshd_config.d/{{ item }}"
|
||||||
|
state: absent
|
||||||
|
loop: "{{ ssh_baseline_fichiers_perimes }}"
|
||||||
|
notify: Validate and reload ssh
|
||||||
|
|
||||||
- name: Déployer la configuration SSH Set-OPS
|
- name: Déployer la configuration SSH Set-OPS
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: 10-setops.conf.j2
|
src: 10-setops.conf.j2
|
||||||
|
|
|
||||||
|
|
@ -28,3 +28,13 @@ ssh_hardening_login_grace_time: "20s"
|
||||||
# dans `ansible.cfg`) : ces valeurs sont la marge, pas la contrainte.
|
# dans `ansible.cfg`) : ces valeurs sont la marge, pas la contrainte.
|
||||||
ssh_hardening_max_startups: "10:30:60"
|
ssh_hardening_max_startups: "10:30:60"
|
||||||
ssh_hardening_max_sessions: 10
|
ssh_hardening_max_sessions: 10
|
||||||
|
|
||||||
|
# MEME MUE, MEME DETTE : ce role a depose `20-chezlepro-hardening.conf` avant de porter le
|
||||||
|
# nom du moteur. L'ancien fichier survit au renommage et, l'ordre lexical le placant
|
||||||
|
# devant, c'est LUI que sshd retient pour chaque mot-cle en double. Mesure sur forge-01 :
|
||||||
|
# `MaxSessions 2` (ancien) l'emportait sur `MaxSessions 10` (courant).
|
||||||
|
#
|
||||||
|
# On n'y liste que des noms qu'on a reellement deposes : supprimer un fichier qu'on n'a
|
||||||
|
# jamais ecrit serait effacer la configuration d'un autre.
|
||||||
|
ssh_hardening_fichiers_perimes:
|
||||||
|
- 20-chezlepro-hardening.conf
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,14 @@
|
||||||
---
|
---
|
||||||
|
# VOIR defaults/main.yml : un renommage de role laisse son ancien fichier EN VIGUEUR, et
|
||||||
|
# l'ordre lexical le place devant le nouveau. Retirer ce qu'on ne depose plus fait partie
|
||||||
|
# du travail de deposer.
|
||||||
|
- name: Retirer le hardening SSH d'une nomenclature abandonnee
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "/etc/ssh/sshd_config.d/{{ item }}"
|
||||||
|
state: absent
|
||||||
|
loop: "{{ ssh_hardening_fichiers_perimes }}"
|
||||||
|
notify: Validate and reload ssh
|
||||||
|
|
||||||
- name: Déployer le hardening SSH additionnel
|
- name: Déployer le hardening SSH additionnel
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
src: 20-setops-hardening.conf.j2
|
src: 20-setops-hardening.conf.j2
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue