관리형 노드 전반의 보안 설정 자동화

AnsibleBeginner
지금 연습하기

소개

보안 자동화는 종종 계정, 소유권, 권한 및 증거 수집에 중점을 둡니다. 잘 작성된 플레이북은 관리자 계정에 대한 접근 권한을 약화시키지 않으면서 이러한 설정을 적용합니다.

이 실습에서는 잠긴 시스템 계정을 생성하고, 루트 소유의 보안 정책 파일을 배포하며, SELinux 모드에 대한 증거를 수집하고, 플레이북의 멱등성 (idempotence) 을 검증합니다.

보안 자동화 프로젝트 생성

이 단계에서는 LabEx 의 SSH 또는 sudo 접근 권한을 변경하지 않고 안전한 보안 기준을 적용하기 위한 프로젝트를 생성합니다.

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

이 변수들은 서비스 계정 이름과 루트 소유의 정책 경로를 지정합니다. 변수를 사용하면 시스템 상태를 변경하기 전에 보안 기준을 더 쉽게 감사할 수 있습니다.

cat inventory/group_vars/managed.yml

보안 기준 플레이북 작성

이 단계에서는 잠긴 시스템 계정, 루트 소유의 디렉토리, 모드 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

이 플레이북은 적용과 증거 수집을 결합합니다. 잠긴 시스템 계정을 생성하고, 루트 전용 정책 파일을 작성하며, 작업 변경으로 표시하지 않고 SELinux 모드를 읽어 프로젝트 내에 학습자가 읽을 수 있는 보고서를 작성합니다.

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

실행하기 전에 보안에 민감한 값들 (shell: /sbin/nologin, password_lock: true, 루트 소유권, 정책 파일의 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 모드를 사용해야 합니다.

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

요약

LabEx 접근 경로를 변경하지 않고 잠긴 서비스 계정, 루트 소유의 보안 정책 파일, SELinux 증거 수집 및 멱등성 검증을 자동화했습니다.