Ansible Playbook 실습 - 취약점 분석 점검 항목 - root 계정 원격 접속 제한 - 설계 2 > Ansible 자료실

본문 바로가기
사이트 내 전체검색

Ansible 자료실

실습 Ansible Playbook 실습 - 취약점 분석 점검 항목 - root 계정 원격 접속 제한 - 설계 2

페이지 정보

profile_image
작성자 꿈꾸는여행자
댓글 0건 조회 2,885회 작성일 25-02-14 13:24

본문

안녕하세요.

 

꿈꾸는여행자입니다.

 

 

Ansible을 통한 Playbook을 활용 분야에는 Unix 취약점 분석 점검 항목이 있습니다.  

 

다음 kisa에서 제공된 주요정보통신기반시설 기술적 취약점 분석 평가 상세 가이드 를 

기준으로 Playbook을 작성해 보고자합니다. 

https://www.kisa.or.kr/2060204/form?postSeq=12&lang_type=KO&page=1

 

해당 항목들을 설계 및 구현 해보는 과정을 진행하고자 합니다. 

 

이번 항목에서는 다음 내용을 기준으로 

설계해 보겠습니다. 

 

0. 인벤토리 관리 

    - Inventory 정보를 그룹화 

 

감사합니다. 

 

> 아래 

 


다음은 요청하신 **SOLARIS, AIX, HP-UX, RHEL5, RHEL7, Rocky8, Ubuntu22** 기준으로 OS별 그룹을 나누어 Ansible Role을 활용하여 자동으로 그룹을 생성하는 Playbook 구성입니다.


---


## ** 1. 디렉토리 구조 (OS별 그룹 자동 생성 포함)**

```

ansible-security/

├── inventory/

│   ├── production                  # IP만 있는 인벤토리

├── group_vars/                      # OS별 변수 관리

│   ├── solaris.yml

│   ├── aix.yml

│   ├── hpux.yml

│   ├── rhel5.yml

│   ├── rhel7.yml

│   ├── rocky8.yml

│   ├── ubuntu22.yml

├── playbooks/

│   ├── compliance.yml               # 보안 점검 Playbook

│   ├── hardening.yml                # 보안 조치 Playbook

│   ├── generate_inventory.yml        # OS별 그룹 자동 생성 Playbook

├── roles/

│   ├── inventory_generator/          # OS별 그룹 자동 생성 역할

│   │   ├── tasks/

│   │   │   ├── main.yml              # 메인 Task (check & generate 실행)

│   │   │   ├── check.yml             # 점검 Task (OS 확인)

│   │   │   ├── generate.yml          # OS별 그룹 생성

│   │   ├── defaults/

│   │   │   ├── main.yml              # 기본 변수 설정

│   │   ├── templates/

│   │   │   ├── inventory_os_group.j2 # 동적으로 생성할 인벤토리 템플릿

│   │   ├── handlers/

│   │   │   ├── main.yml              # 핸들러

├── site.yml

```


---


## ** 2. `roles/inventory_generator` Role 구성**

###  **1) OS별 그룹 점검 (`check.yml`)**

이 Task는 대상 서버의 OS 정보를 확인하여 Ansible Facts를 가져옵니다.


####  `roles/inventory_generator/tasks/check.yml`

```yaml

---

- name: Gather OS distribution and family

  set_fact:

    os_group: >-

      {% if ansible_distribution == "Solaris" %}

      solaris

      {% elif ansible_distribution == "AIX" %}

      aix

      {% elif ansible_distribution == "HP-UX" %}

      hpux

      {% elif ansible_distribution == "RedHat" and ansible_distribution_version is version('6.0', '<') %}

      rhel5

      {% elif ansible_distribution == "RedHat" and ansible_distribution_version is version('6.0', '>=') and ansible_distribution_version is version('8.0', '<') %}

      rhel7

      {% elif ansible_distribution == "Rocky" %}

      rocky8

      {% elif ansible_distribution == "Ubuntu" and ansible_distribution_version is version('22.04', '>=') %}

      ubuntu22

      {% else %}

      unknown

      {% endif %}


- name: Display detected OS Group

  debug:

    msg: "Host {{ inventory_hostname }} belongs to OS Group: {{ os_group }}"

```

 **설명**

- `ansible_distribution` 값과 `ansible_distribution_version`을 활용하여 OS 그룹을 설정.

- `rhel5`, `rhel7`, `rocky8`, `ubuntu22`, `aix`, `hpux`, `solaris` 그룹을 자동 생성.


---


###  **2) OS별 그룹을 Inventory에 추가 (`generate.yml`)**

이 Task는 OS 그룹을 동적으로 Inventory에 추가합니다.


####  `roles/inventory_generator/tasks/generate.yml`

```yaml

---

- name: Add hosts to OS-specific groups dynamically

  add_host:

    name: "{{ inventory_hostname }}"

    groups: "{{ os_group }}"

```

 **설명**

- `add_host` 모듈을 사용하여 현재 호스트를 해당 OS 그룹에 동적으로 추가.


---


###  **3) OS별 그룹을 Inventory 파일에 저장 (`inventory_os_group.j2`)**

OS별 그룹을 **Jinja2 템플릿**을 사용하여 **Inventory 파일로 변환**합니다.


####  `roles/inventory_generator/templates/inventory_os_group.j2`

```jinja

{% for group, hosts in groups.items() %}

[{{ group }}]

{% for host in hosts %}

{{ host }}

{% endfor %}


{% endfor %}

```

 **설명**

- `groups.items()`를 활용하여 Ansible이 감지한 모든 OS 그룹을 반복하여 Inventory 파일 생성.


---


###  **4) OS 그룹 Inventory 파일을 생성 (`main.yml`)**

이 Task는 **OS별 그룹 정보를 Inventory 파일로 저장**합니다.


####  `roles/inventory_generator/tasks/main.yml`

```yaml

---

- import_tasks: check.yml

- import_tasks: generate.yml


- name: Save OS Group Inventory

  template:

    src: inventory_os_group.j2

    dest: inventory/production_os_group.yml

  delegate_to: localhost

```

 **설명**

- OS 정보 확인 → OS 그룹 생성 → OS별 Inventory 파일 저장 (템플릿 사용).


---


## ** 3. `generate_inventory.yml` Playbook**

이 Playbook을 실행하면 **OS별 그룹이 자동으로 생성된 Inventory 파일을 생성**합니다.


####  `playbooks/generate_inventory.yml`

```yaml

---

- name: Generate OS-based Inventory

  hosts: all

  gather_facts: yes

  roles:

    - inventory_generator

```

 **설명**

- `inventory_generator` 역할을 실행하여 OS 그룹을 자동으로 생성.


---


## ** 4. 실행 방법**

###  **1) OS별 그룹을 자동 생성**

```bash

ansible-playbook -i inventory/production playbooks/generate_inventory.yml

```

 **출력 예시**

```

TASK [Gather OS distribution and family] *******************************

ok: [192.168.1.10] => (item=Rocky Linux)

ok: [192.168.1.11] => (item=Ubuntu 22.04)

ok: [192.168.1.12] => (item=RHEL 7)

ok: [192.168.1.20] => (item=AIX 7.2)


TASK [Add hosts to OS-specific groups dynamically] **********************

ok: [192.168.1.10] => (group=rocky8)

ok: [192.168.1.11] => (group=ubuntu22)

ok: [192.168.1.12] => (group=rhel7)

ok: [192.168.1.20] => (group=aix)


TASK [Save OS Group Inventory] *****************************************

ok: [localhost] => (file=inventory/production_os_group.yml)

```

 **결과**

- OS 그룹이 자동으로 생성된 `inventory/production_os_group.yml`이 저장됨.


---


###  **2) 자동 생성된 OS별 그룹으로 보안 점검 실행**

```bash

ansible-playbook -i inventory/production_os_group.yml playbooks/compliance.yml

```

 **출력 예시**

```

TASK [Check if SSH root login is disabled] *******************************

ok: [192.168.1.10] => msg: PermitRootLogin no (Rocky)

ok: [192.168.1.11] => msg: PermitRootLogin yes (Ubuntu 22.04, 취약)

```


---


## ** 5. 결론**

 **Playbook을 활용하여 IP 정보만 있는 Inventory에서도 OS별 그룹을 자동 생성 가능**  

 **OS 그룹(`solaris`, `aix`, `hpux`, `rhel5`, `rhel7`, `rocky8`, `ubuntu22`)을 자동으로 생성**  

 **Playbook 실행 시 OS에 맞는 변수(`group_vars/solaris.yml`, `group_vars/aix.yml` 등) 자동 적용**  

 **운영 환경에서 OS 종류를 자동 감지하여 보안 정책을 쉽게 적용 가능**  

 

 

 

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : (주)리눅스데이타시스템
대표이사 : 정정모
본사 : 강남구 봉은사로 114길 40 홍선빌딩 2층
- tel : 02-6207-1160
대전지사 : 유성구 노은로174 도원프라자 5층
- tel : 042-331-1161

접속자집계

오늘
2,421
어제
2,585
최대
8,445
전체
2,034,631
Copyright © www.linuxdata.org All rights reserved.