97 lines
3.5 KiB
YAML
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 }}"
|