Einführung
Bei der Sicherheitsautomatisierung stehen häufig Benutzerkonten, Dateibesitz, Berechtigungen und die Dokumentation von Nachweisen im Mittelpunkt. Ein gut durchdachtes Playbook wendet diese Einstellungen an, ohne den Zugriff für den Administrator zu beeinträchtigen.
In diesem Lab erstellen Sie ein gesperrtes Systemkonto, stellen Sicherheitsrichtliniendateien im Besitz von root bereit, sammeln Nachweise über den SELinux-Modus und belegen die Idempotenz Ihres Playbooks.
Ein Projekt für die Sicherheitsautomatisierung erstellen
In diesem Schritt erstellen Sie ein Projekt für eine sichere Basis-Konfiguration (Security Baseline), bei der der SSH- oder sudo-Zugriff von LabEx nicht verändert wird.
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
Dieses Lab vermeidet bewusst Änderungen am labex-Konto, dem SSH-Dienst oder dem sudo-Zugriff. Das verwaltete Konto und die Richtliniendateien dienen lediglich als isolierte Übungsziele.
Variablen für die Sicherheits-Baseline definieren
In diesem Schritt definieren Sie das Konto, das Verzeichnis und die Richtliniendatei, die vom Playbook verwaltet werden sollen. Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück. Dies stellt sicher, dass die Befehle auch dann stabil funktionieren, wenn LabEx die Schritte einzeln ausführt.
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
Die Variablen benennen das Dienstkonto und den Pfad zur Richtliniendatei im Besitz von root. Durch die Verwendung von Variablen lässt sich die Sicherheits-Baseline leichter überprüfen, bevor sie den Systemzustand ändert.
cat inventory/group_vars/managed.yml
Das Playbook für die Sicherheits-Baseline schreiben
In diesem Schritt schreiben Sie ein Playbook, das ein gesperrtes Systemkonto, ein Verzeichnis im Besitz von root, eine Richtliniendatei mit dem Modus 0600 sowie einen Arbeitsbereichsbericht erstellt.
Bevor Sie die Befehle in diesem Schritt ausführen, kehren Sie in das Ansible-Projektverzeichnis zurück.
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
Das Playbook kombiniert Durchsetzung und Nachweisführung. Es erstellt ein gesperrtes Systemkonto, schreibt Richtliniendateien, auf die nur root zugreifen kann, liest den SELinux-Modus aus (ohne die Aufgabe als "geändert" zu markieren) und schreibt einen für den Lernenden lesbaren Bericht in das Projektverzeichnis.
ansible-playbook playbooks/security-baseline.yml --syntax-check
Überprüfen Sie die sicherheitsrelevanten Werte vor der Ausführung: shell: /sbin/nologin, password_lock: true, den Besitz durch root und den Modus 0600 für die Richtliniendatei.
Die Sicherheits-Baseline ausführen und überprüfen
In diesem Schritt wenden Sie die Baseline an und überprüfen das Konto, die Dateiberechtigungen sowie den Nachweisbericht.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/security-baseline.yml | tee reports/security-first.txt
Der erste Durchlauf sollte das Konto und das Richtlinienverzeichnis erstellen. Die folgenden Prüfungen bestätigen den Systemzustand direkt, anstatt sich nur auf die Ausgabe des Playbooks zu verlassen.
getent passwd rhce_audit
Der Kontoeintrag sollte mit /sbin/nologin enden, was darauf hinweist, dass es nicht für interaktive Shell-Zugriffe vorgesehen ist.
sudo stat -c "%U:%G %a %n" /etc/rhce-security /etc/rhce-security/policy.conf
Die Richtliniendatei sollte sich im Besitz von root:root befinden und den Modus 600 aufweisen, was für Richtlinieninhalte, die nur für root bestimmt sind, angemessen ist.
cat reports/security-report.txt
Der Bericht protokolliert das verwaltete Konto, den erwarteten Richtlinienmodus und den beobachteten SELinux-Modus zur schnellen Überprüfung.
Idempotenz der Sicherheits-Baseline bestätigen
In diesem Schritt führen Sie die Sicherheits-Baseline erneut aus. Der bereits bestehende sichere Zustand sollte keine weiteren Änderungen erfordern.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/security-baseline.yml | tee reports/security-second.txt
Der zweite Durchlauf bestätigt, dass die Sicherheits-Baseline konvergiert. Sollten erneut Änderungen gemeldet werden, untersuchen Sie, welche Aufgabe diese ausgelöst hat, da dies bedeutet, dass ein gewünschter Zustand nicht stabil erreicht wurde.
grep -E 'host.*changed=0' reports/security-second.txt
Zusammenfassung
Sie haben die Erstellung eines gesperrten Dienstkontos, von Sicherheitsrichtliniendateien im Besitz von root, die Erfassung von SELinux-Nachweisen sowie die Validierung der Idempotenz automatisiert, ohne dabei den Zugriffspfad von LabEx zu verändern.


