Автоматизация настроек безопасности на управляемых узлах

AnsibleBeginner
Практиковаться сейчас

Введение

Автоматизация безопасности часто фокусируется на управлении учетными записями, правах владения, разрешениях и сборе доказательств. Хороший плейбук применяет эти настройки, не ослабляя при этом доступ для пользователя, осуществляющего управление.

В этой лабораторной работе вы создадите заблокированную системную учетную запись, развернете файлы политики безопасности, принадлежащие пользователю 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.