--- # Durcissement CIS Ubuntu 24.04 — AppArmor installe, active au boot, tous les profils enforcing # (checks 35536-35539) # # CONTEXTE (verifie manuellement avant deploiement) : sur cette infra, apparmor_status montre # des dizaines de profils en mode "unconfined"/"complain" qui correspondent tous a des paquets # desktop jamais utilises sur des serveurs headless (navigateurs, Discord, Steam, transmission, # runtimes conteneurs standalone comme runc/crun/podman non utilises directement — Docker confine # deja ses containers via le profil "docker-default", separe et deja enforce). Aucun process # reellement actif n'est concerne par le passage en enforce de ces profils inutilises. # # IMPORTANT GRUB : /etc/default/grub contient deja "audit=1 audit_backlog_limit=8192" # (playbook-coredump-auditd-hardening.yml) — ce playbook AJOUTE apparmor=1 security=apparmor # a la suite, ne remplace jamais la ligne existante. # # `aa-enforce /etc/apparmor.d/*` s'applique a chaud (pas de redemarrage necessaire pour le # check CIS lui-meme), mais comme pour audit=1, le parametre GRUB apparmor=1/security=apparmor # necessite un redemarrage pour etre reellement actif au niveau noyau (le check 35537 passe # immediatement car il inspecte /etc/default/grub, pas l'etat runtime). # # `serial: 1` + `any_errors_fatal` : un host a la fois, arret immediat si un host casse. # # Usage recommande : tester sur un host avant le rollout complet : # ansible-playbook hardening/playbook-apparmor-hardening.yml --limit pre-prod-uber - name: Durcissement AppArmor (CIS Ubuntu 24.04) hosts: prod,pre-prod,bdd-redis-prod,replica-prod,infra,infra-runner,infra-utils,load-balancer become: true serial: 1 any_errors_fatal: true tasks: - name: Installer apparmor et apparmor-utils ansible.builtin.apt: name: - apparmor - apparmor-utils state: present update_cache: true cache_valid_time: 3600 - name: Sauvegarder /etc/default/grub avant modification ansible.builtin.copy: src: /etc/default/grub dest: /etc/default/grub.bak-cis-apparmor remote_src: true owner: root group: root mode: "0644" - name: Ajouter apparmor=1 security=apparmor a GRUB_CMDLINE_LINUX (sans ecraser audit=1 existant) ansible.builtin.shell: | set -e if ! grep -q 'apparmor=1' /etc/default/grub; then sed -i 's/^\(GRUB_CMDLINE_LINUX="[^"]*\)"/\1 apparmor=1 security=apparmor"/' /etc/default/grub echo CHANGED fi register: grub_conf changed_when: "'CHANGED' in grub_conf.stdout" - name: Regenerer grub.cfg si la config a change ansible.builtin.command: cmd: update-grub when: grub_conf.changed changed_when: true - name: Forcer tous les profils AppArmor en mode enforce ansible.builtin.command: cmd: aa-enforce /etc/apparmor.d/* changed_when: true - name: Verifier l'etat final (apparmor_status) ansible.builtin.command: cmd: apparmor_status register: aa_status changed_when: false failed_when: > 'profiles are in complain mode' in aa_status.stdout and not (aa_status.stdout | regex_search('^0\s*profiles are in complain mode', multiline=True)) - name: Confirmer le succes pour cet host ansible.builtin.debug: msg: "✅ AppArmor durci sur {{ inventory_hostname }} — reboot requis pour apparmor=1/security=apparmor au niveau noyau."