Automatiser les paramètres de sécurité sur les nœuds gérés

AnsibleBeginner
Pratiquer maintenant

Introduction

L'automatisation de la sécurité se concentre souvent sur les comptes, la propriété, les permissions et les preuves. Un bon playbook applique ces paramètres sans affaiblir l'accès de l'utilisateur de gestion.

Dans ce laboratoire, vous allez créer un compte système verrouillé, déployer des fichiers de politique de sécurité appartenant à root, collecter des preuves sur le mode SELinux et prouver que le playbook est idempotent.

Créer un projet d'automatisation de la sécurité

Dans cette étape, vous allez créer un projet pour une base de référence de sécurité sécurisée qui évite de modifier l'accès SSH ou sudo de LabEx.

cd /home/labex/project
mkdir -p rhce-ansible/{inventory,playbooks,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF

Ce laboratoire évite délibérément de modifier le compte labex, le service SSH ou l'accès sudo. Le compte géré et les fichiers de politique sont des cibles d'entraînement isolées.

Définir les variables de la base de référence de sécurité

Dans cette étape, vous allez définir le compte, le répertoire et le fichier de politique que le playbook devra gérer. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible. Cela garantit la stabilité des commandes, même si LabEx exécute chaque étape séparément.

cd /home/labex/project/rhce-ansible
mkdir -p inventory/group_vars
cat > inventory/group_vars/managed.yml <<'EOF'
audit_user: rhce_audit
security_dir: /etc/rhce-security
security_policy: /etc/rhce-security/policy.conf
EOF

Les variables nomment le compte de service et le chemin de la politique appartenant à root. Les conserver dans des variables rend la base de référence de sécurité plus facile à auditer avant qu'elle ne modifie l'état du système.

cat inventory/group_vars/managed.yml

Rédiger le playbook de la base de référence de sécurité

Dans cette étape, vous allez rédiger un playbook qui crée un compte système verrouillé, un répertoire appartenant à root, un fichier de politique en mode 0600 et un rapport de preuves dans l'espace de travail. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.

cd /home/labex/project/rhce-ansible
cat > playbooks/security-baseline.yml <<'EOF'
---
- name: Apply safe security baseline
  hosts: managed
  become: true
  gather_facts: true
  tasks:
    - name: Ensure locked audit service account exists
      ansible.builtin.user:
        name: "{{ audit_user }}"
        system: true
        shell: /sbin/nologin
        create_home: false
        password_lock: true
        state: present

    - name: Ensure root-owned security directory exists
      ansible.builtin.file:
        path: "{{ security_dir }}"
        state: directory
        owner: root
        group: root
        mode: '0750'

    - name: Deploy root-only security policy
      ansible.builtin.copy:
        dest: "{{ security_policy }}"
        owner: root
        group: root
        mode: '0600'
        content: |
          managed_by=ansible
          selinux_status={{ ansible_selinux.status | default('unknown') }}

    - name: Check current SELinux mode
      ansible.builtin.command: getenforce
      register: selinux_mode
      changed_when: false
      failed_when: false

    - name: Write learner-readable security report
      ansible.builtin.copy:
        dest: /home/labex/project/rhce-ansible/reports/security-report.txt
        owner: labex
        group: labex
        mode: '0640'
        content: |
          audit_user={{ audit_user }}
          policy_mode=0600
          selinux_mode={{ selinux_mode.stdout | default('unknown') }}
EOF

Le playbook combine application des règles et collecte de preuves. Il crée un compte système verrouillé, écrit des fichiers de politique accessibles uniquement par root, lit le mode SELinux sans marquer la tâche comme modifiée, et écrit un rapport lisible par l'apprenant dans le projet.

ansible-playbook playbooks/security-baseline.yml --syntax-check

Vérifiez les valeurs sensibles à la sécurité avant l'exécution : shell: /sbin/nologin, password_lock: true, la propriété root et le mode 0600 sur le fichier de politique.

Exécuter et inspecter la base de référence de sécurité

Dans cette étape, vous allez appliquer la base de référence et inspecter le compte, les permissions des fichiers et le rapport de preuves.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/security-baseline.yml | tee reports/security-first.txt

La première exécution doit créer le compte et le répertoire de politique. Les vérifications ci-dessous confirment directement l'état du système au lieu de se fier uniquement à la sortie du playbook.

getent passwd rhce_audit

L'entrée du compte doit se terminer par /sbin/nologin, indiquant qu'il n'est pas destiné à un accès shell interactif.

sudo stat -c "%U:%G %a %n" /etc/rhce-security /etc/rhce-security/policy.conf

Le fichier de politique doit appartenir à root:root et utiliser le mode 600, ce qui est approprié pour un contenu de politique réservé à root.

cat reports/security-report.txt

Le rapport enregistre le compte géré, le mode de politique attendu et le mode SELinux observé pour une révision rapide.

Confirmer l'idempotence de la base de référence de sécurité

Dans cette étape, vous allez exécuter à nouveau la base de référence de sécurité. L'état sécurisé existant ne devrait nécessiter aucune modification supplémentaire.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/security-baseline.yml | tee reports/security-second.txt

La deuxième exécution vérifie que la base de référence de sécurité converge. Si elle signale à nouveau des changements, inspectez quelle tâche a été modifiée, car cela signifie qu'un état souhaité n'était pas stable.

grep -E 'host.*changed=0' reports/security-second.txt

Résumé

Vous avez automatisé la création d'un compte de service verrouillé, de fichiers de politique de sécurité appartenant à root, la collecte de preuves SELinux et la validation de l'idempotence, sans modifier le chemin d'accès LabEx.