Set-OPS-Public/roles/auditd/tasks/main.yml
Daniel Allaire af3fb1c0f1 sondes : deux roles ecrivaient dans un repertoire qu ils ne creaient pas
Vingt-trois roles sur vingt-cinq assurent /usr/local/lib/setops/sondes avant d y
deposer quoi que ce soit. auditd et chrony etaient les exceptions, et ils s en
tiraient parce qu un role plus precoce l avait cree.

Une dependance d ordre ecrite nulle part : elle tient tant que la couche complete
passe dans l ordre habituel, et casse des qu on applique un groupe SEUL.
Destination directory does not exist, sur une machine et pas les treize autres.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-13 23:43:46 -04:00

115 lines
4.5 KiB
YAML

---
- name: Installer auditd
ansible.builtin.apt:
name:
- auditd
- audispd-plugins
state: present
# AVANT DE POSER LES NOTRES, RETIRER CELLES D'UNE NOMENCLATURE ABANDONNEE.
#
# `augenrules` concatene tout `rules.d/` : un doublon fait echouer le chargement ENTIER,
# et `auditd` ne demarre pas faute de sa dependance. Voir defaults/main.yml.
- name: Retirer les regles auditd d'une nomenclature abandonnee
ansible.builtin.file:
path: "/etc/audit/rules.d/{{ item }}"
state: absent
loop: "{{ auditd_fichiers_perimes }}"
notify: Restart auditd
when: auditd_enabled | bool
# LA RETENTION EST UN CHOIX, DONC ELLE S'ECRIT (2026-09-11). Voir defaults/main.yml pour
# l'arithmetique : depuis qu'Alloy expedie `audit.log` vers Loki, le local n'est plus
# l'archive mais un TAMPON pour traverser une panne du collecteur.
#
# `lineinfile` plutot qu'un gabarit complet : `auditd.conf` porte une quinzaine de
# reglages que Debian ajuste, et les reecrire tous nous rendrait responsables de choix
# que nous n'avons pas faits.
- name: Fixer la retention locale du journal d'audit
ansible.builtin.lineinfile:
path: /etc/audit/auditd.conf
regexp: "^{{ item.cle }}\\s*="
line: "{{ item.cle }} = {{ item.valeur }}"
owner: root
group: root
mode: "0640"
loop:
- { cle: "max_log_file", valeur: "{{ auditd_max_log_file }}" }
- { cle: "num_logs", valeur: "{{ auditd_num_logs }}" }
loop_control:
label: "{{ item.cle }}"
notify: Restart auditd
when: auditd_enabled | bool
- name: Déployer les règles auditd Set-OPS
ansible.builtin.template:
src: 99-setops.rules.j2
dest: /etc/audit/rules.d/99-setops.rules
owner: root
group: root
mode: "0640"
notify: Restart auditd
when: auditd_enabled | bool
# `failed_when: false` A CACHE LA PANNE PENDANT TOUT UN DEPLOIEMENT (2026-08-30).
#
# Quinze machines rapportaient `failed=0` alors qu'`auditd` etait mort sur les quinze. Un
# service de securite qui ne demarre pas doit se VOIR : c'est precisement le genre de
# panne que personne ne va chercher, puisque rien ne la signale et que `auditctl -l`
# affiche des regles.
#
# On tolere encore l'echec sur les machines ou l'audit n'est pas demande — mais quand il
# l'est, on le dit.
- name: Activer auditd
ansible.builtin.systemd:
name: auditd
enabled: true
state: started
when: auditd_enabled | bool
register: auditd_demarrage
- name: Refuser si l'audit est demande mais ne tourne pas
ansible.builtin.assert:
that:
- auditd_demarrage is not failed
fail_msg: >-
`auditd_enabled` est vrai mais le service n'a pas demarre. Cause la plus frequente :
un doublon dans `/etc/audit/rules.d/` fait echouer `audit-rules.service`, dont
`auditd` depend — verifier `augenrules --check` et `auditd_fichiers_perimes`.
Les regles peuvent etre ARMEES dans le noyau sans que personne ne collecte.
when: auditd_enabled | bool
# LA SONDE MESURE LA COLLECTE, PAS L'ARMEMENT. Voir le gabarit : le 2026-08-30, onze
# regles etaient armees dans le noyau sur quinze machines ou personne ne collectait.
#
# ELLE EST DECLAREE PAR LE GROUPE `serveur_durci` ET DEPOSEE ICI. La derivation de
# supervision ne traverse pas les roles-taches : declaree dans `roles/auditd/meta/`, elle
# serait restee invisible d'Icinga — et le menage de `client_sante` l'aurait effacee au
# passage suivant. Meme lecon que la sonde `correctifs`, le 2026-09-10.
# CE ROLE ECRIVAIT SA SONDE SANS CREER LE REPERTOIRE (2026-09-13). Vingt-trois roles sur
# vingt-cinq l'assurent avant d'y deposer quoi que ce soit ; `auditd` et `chrony` etaient
# les deux exceptions, et ils s'en tiraient parce qu'un role plus precoce l'avait cree.
#
# UNE DEPENDANCE D'ORDRE QUI N'EST ECRITE NULLE PART. Elle tient tant que la couche
# complete passe dans l'ordre habituel, et elle casse des qu'on applique un groupe SEUL :
#
# Destination directory /usr/local/lib/setops/sondes does not exist
#
# Mesure sur une flotte neuve : treize machines l'avaient, une ne l'avait pas. Rien ne
# distinguait la quatorzieme, sinon l'ordre dans lequel les taches l'avaient atteinte.
- name: Assurer le repertoire des sondes de supervision
ansible.builtin.file:
path: /usr/local/lib/setops/sondes
state: directory
owner: root
group: root
mode: "0755"
- name: Deposer la sonde de collecte d'audit
ansible.builtin.template:
src: sonde-audit.sh.j2
dest: /usr/local/lib/setops/sondes/audit.sh
owner: root
group: root
mode: "0750"
when: auditd_enabled | bool