Automatizar Configurações de Segurança em Nós Gerenciados

AnsibleBeginner
Pratique Agora

Introdução

A automação de segurança geralmente foca em contas, propriedade, permissões e evidências. Um bom playbook aplica essas configurações sem enfraquecer o acesso do usuário de gerenciamento.

Neste laboratório, você criará uma conta de sistema bloqueada, implantará arquivos de política de segurança de propriedade do root, coletará evidências do modo SELinux e provará que o playbook é idempotente.

Criar um Projeto de Automação de Segurança

Nesta etapa, você criará um projeto para uma linha de base de segurança segura que evita alterar o acesso SSH ou sudo do 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

Este laboratório evita deliberadamente alterar a conta labex, o serviço SSH ou o acesso sudo. A conta gerenciada e os arquivos de política são alvos de prática isolados.

Definir Variáveis da Linha de Base de Segurança

Nesta etapa, você definirá a conta, o diretório e o arquivo de política que o playbook irá gerenciar. Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.

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

As variáveis nomeiam a conta de serviço e o caminho da política de propriedade do root. Mantê-las em variáveis torna a linha de base de segurança mais fácil de auditar antes que ela altere o estado do sistema.

cat inventory/group_vars/managed.yml

Escrever o Playbook da Linha de Base de Segurança

Nesta etapa, você escreverá um playbook que cria uma conta de sistema bloqueada, um diretório de propriedade do root, um arquivo de política com modo 0600 e um relatório de evidências no espaço de trabalho. Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo quando o LabEx executa cada etapa separadamente.

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

O playbook combina aplicação e evidência. Ele cria uma conta de sistema bloqueada, grava arquivos de política acessíveis apenas pelo root, lê o modo SELinux sem marcar a tarefa como alterada e grava um relatório legível pelo aluno de volta no projeto.

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

Revise os valores sensíveis à segurança antes de executar: shell: /sbin/nologin, password_lock: true, propriedade do root e modo 0600 no arquivo de política.

Executar e Inspecionar a Linha de Base de Segurança

Nesta etapa, você aplicará a linha de base e inspecionará a conta, as permissões de arquivo e o relatório de evidências.

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

A primeira execução deve criar a conta e o diretório de política. As verificações abaixo confirmam o estado do sistema diretamente, em vez de confiar apenas na saída do playbook.

getent passwd rhce_audit

A entrada da conta deve terminar com /sbin/nologin, mostrando que não se destina ao acesso interativo via shell.

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

O arquivo de política deve ser de propriedade de root:root e usar o modo 600, o que é apropriado para conteúdo de política acessível apenas pelo root.

cat reports/security-report.txt

O relatório registra a conta gerenciada, o modo de política esperado e o modo SELinux observado para revisão rápida.

Confirmar a Idempotência da Linha de Base de Segurança

Nesta etapa, você executará a linha de base de segurança novamente. O estado seguro existente não deve precisar de mais alterações.

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

A segunda execução verifica se a linha de base de segurança converge. Se ela relatar alterações novamente, inspecione qual tarefa foi alterada, pois isso significa que um estado desejado não estava estável.

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

Resumo

Você automatizou uma conta de serviço bloqueada, arquivos de política de segurança de propriedade do root, coleta de evidências do SELinux e validação de idempotência sem alterar o caminho de acesso do LabEx.