Files
ansible-mln/hardening/playbook-cron-packages-hardening.yml
T
2026-07-22 21:01:19 +02:00

97 lines
3.5 KiB
YAML

---
# Durcissement CIS Ubuntu 24.04 — retrait rsync/telnet/ftp + permissions cron + cron.allow/at.allow
# (checks 35573, 35585, 35587, 35594-35601)
#
# IMPORTANT :
# - rsync/telnet/ftp verifies avant retrait sur cette infra : aucun daemon actif, aucun cron/script
# n'en dependait (grep sur les crontabs + scripts de backup). Purge sans risque constate.
# - Le paquet 'at' n'est PAS installe sur cette infra et ce playbook ne l'installe PAS : ajouter un
# service juste pour le verrouiller ensuite serait contre-productif (surface d'attaque en plus
# pour un compliance-checkbox). /etc/at.allow est quand meme cree en defense en profondeur, mais
# le check CIS 35601 restera en echec par ce choix assume tant que 'at' n'est pas installe.
# - /etc/cron.allow doit avoir owner:group EXACTEMENT root:root pour satisfaire le check automatise
# 35600 — la documentation CIS mentionne le groupe "crontab" comme alternative acceptable, mais la
# regex du check SCA (`r:^root root$`) n'accepte que root:root en pratique (verifie empiriquement).
#
# `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-cron-packages-hardening.yml --limit pre-prod-uber
- name: Durcissement cron/at + retrait paquets insecurises (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: Purger rsync, telnet et ftp (clients/services insecurises)
ansible.builtin.apt:
name:
- rsync
- telnet
- inetutils-telnet
- ftp
- tnftp
state: absent
purge: true
- name: Permissions /etc/crontab (0600 root:root)
ansible.builtin.file:
path: /etc/crontab
owner: root
group: root
mode: "0600"
- name: Permissions repertoires cron (0700 root:root)
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: root
group: root
mode: "0700"
loop:
- /etc/cron.hourly
- /etc/cron.daily
- /etc/cron.weekly
- /etc/cron.monthly
- /etc/cron.d
- name: Verifier si /etc/cron.deny existe
ansible.builtin.stat:
path: /etc/cron.deny
register: cron_deny
- name: Creer /etc/cron.allow (crontab restreint aux utilisateurs autorises)
ansible.builtin.file:
path: /etc/cron.allow
state: touch
owner: root
group: root
mode: "0640"
access_time: preserve
modification_time: preserve
when: not cron_deny.stat.exists
- name: Permissions /etc/cron.deny si present
ansible.builtin.file:
path: /etc/cron.deny
owner: root
group: root
mode: "0640"
when: cron_deny.stat.exists
- name: Creer /etc/at.allow (defense en profondeur, meme si 'at' non installe)
ansible.builtin.file:
path: /etc/at.allow
state: touch
owner: root
group: daemon
mode: "0640"
access_time: preserve
modification_time: preserve
- name: Confirmer le succes pour cet host
ansible.builtin.debug:
msg: "✅ Durcissement cron/paquets appliqué sur {{ inventory_hostname }}"