Введение
Автоматизация безопасности часто фокусируется на управлении учетными записями, правах владения, разрешениях и сборе доказательств. Хороший плейбук применяет эти настройки, не ослабляя при этом доступ для пользователя, осуществляющего управление.
В этой лабораторной работе вы создадите заблокированную системную учетную запись, развернете файлы политики безопасности, принадлежащие пользователю root, соберете данные о режиме SELinux и докажете идемпотентность плейбука.
Создание проекта автоматизации безопасности
На этом этапе вы создадите проект для безопасной базовой конфигурации, которая не затрагивает SSH-доступ или права sudo в среде 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
Данная лабораторная работа намеренно не затрагивает учетную запись labex, службу SSH или доступ sudo. Управляемая учетная запись и файлы политики являются изолированными объектами для практики.
Определение переменных базовой конфигурации безопасности
На этом этапе вы определите учетную запись, каталог и файл политики, которыми будет управлять плейбук. Перед выполнением команд на этом этапе вернитесь в каталог проекта Ansible. Это обеспечит стабильность команд, даже если LabEx выполняет каждый шаг отдельно.
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
Переменные задают имя сервисной учетной записи и путь к файлу политики, принадлежащему root. Хранение этих данных в переменных упрощает аудит базовой конфигурации безопасности перед применением изменений в системе.
cat inventory/group_vars/managed.yml
Написание плейбука базовой конфигурации безопасности
На этом этапе вы напишете плейбук, который создает заблокированную системную учетную запись, каталог, принадлежащий root, файл политики с правами 0600 и отчет о состоянии в рабочей директории.
Перед выполнением команд на этом этапе вернитесь в каталог проекта 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
Плейбук сочетает в себе принудительное применение настроек и сбор доказательств. Он создает заблокированную системную учетную запись, записывает файлы политики, доступные только пользователю root, считывает режим SELinux (не помечая задачу как измененную) и записывает отчет, доступный для чтения пользователю, обратно в проект.
ansible-playbook playbooks/security-baseline.yml --syntax-check
Проверьте критически важные для безопасности значения перед запуском: shell: /sbin/nologin, password_lock: true, владение root и права 0600 для файла политики.
Запуск и проверка базовой конфигурации безопасности
На этом этапе вы примените базовую конфигурацию и проверите учетную запись, права доступа к файлам и отчет о состоянии.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/security-baseline.yml | tee reports/security-first.txt
Первый запуск должен создать учетную запись и каталог политики. Приведенные ниже проверки подтверждают состояние системы напрямую, а не полагаются только на вывод плейбука.
getent passwd rhce_audit
Запись учетной записи должна заканчиваться на /sbin/nologin, что указывает на отсутствие возможности интерактивного входа в систему.
sudo stat -c "%U:%G %a %n" /etc/rhce-security /etc/rhce-security/policy.conf
Файл политики должен принадлежать root:root и иметь права 600, что является правильным для содержимого политики, доступного только пользователю root.
cat reports/security-report.txt
Отчет содержит информацию об управляемой учетной записи, ожидаемом режиме политики и наблюдаемом режиме SELinux для быстрого ознакомления.
Подтверждение идемпотентности базовой конфигурации безопасности
На этом этапе вы снова запустите плейбук базовой конфигурации безопасности. Существующее безопасное состояние не должно требовать дальнейших изменений.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/security-baseline.yml | tee reports/security-second.txt
Второй запуск подтверждает, что базовая конфигурация безопасности сходится к заданному состоянию. Если снова сообщается об изменениях, проверьте, какая задача была изменена, так как это означает, что желаемое состояние не было стабильным.
grep -E 'host.*changed=0' reports/security-second.txt
Резюме
Вы автоматизировали создание заблокированной сервисной учетной записи, файлов политики безопасности, принадлежащих root, сбор данных SELinux и проверку идемпотентности, не изменяя при этом путь доступа LabEx.


