89 lines
3.8 KiB
YAML
89 lines
3.8 KiB
YAML
---
|
|
# 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,ota-uber,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: Recharger apparmor (aa-enforce seul ne suffit pas toujours a faire prendre en compte le changement par le kernel)
|
|
ansible.builtin.systemd:
|
|
name: apparmor
|
|
state: reloaded
|
|
|
|
- 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."
|