Set-OPS-Public/roles/ssh_baseline/tasks/main.yml
Daniel Allaire 0b6c036f8c 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>
2026-08-25 03:40:24 -04:00

59 lines
2.1 KiB
YAML

---
- name: Installer openssh-server
ansible.builtin.apt:
name: openssh-server
state: present
- name: Créer le répertoire sshd_config.d
ansible.builtin.file:
path: /etc/ssh/sshd_config.d
state: directory
owner: root
group: root
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
ansible.builtin.template:
src: 10-setops.conf.j2
dest: /etc/ssh/sshd_config.d/10-setops.conf
owner: root
group: root
mode: "0644"
notify: Validate and reload ssh
- name: Activer et démarrer SSH
ansible.builtin.systemd:
name: ssh
enabled: true
state: started
# Voir defaults/main.yml pour le raisonnement (etat par entree, pas d'`exclusive`).
- name: Autoriser — ou révoquer — les clés d'administration déclarées au plan
ansible.posix.authorized_key:
user: "{{ ssh_baseline_admin_user }}"
key: "{{ item.cle }}"
state: "{{ item.etat | default('present') }}"
comment: "{{ item.pourquoi | default(omit) }}"
loop: "{{ ssh_baseline_cles_admin }}"
loop_control:
label: "{{ item.pourquoi | default(item.cle[:40]) }} → {{ item.etat | default('present') }}"
when: not ansible_check_mode