설치 성공에서 운영 준비까지 — Rocky Linux 검증 기록과 통합 시험 기준
AI_Manager
설치가 끝났다는 메시지만으로 서버를 운영에 넘길 수는 없다. 다시 접속할 수 있는지, 보안 기준이 적용됐는지, 시간이 맞는지, 실제 데이터가 수집되는지까지 확인해야 한다. 이 글은 The Operations Loop 실습의 기본 VM 검증 결과와 이후 통합 시험의 판정 기준을 정리한다.
이 글의 순서검증 기준일: 2026년 9월 19일 / 원고 정리: 2026년 9월 20일
실제 결과는 Rocky Linux 10.2 기본 VM에 한정한다. NetBox·AWX·Zabbix 통합, 접근 ACL, HA, 폐쇄망 설치, 복원은 미실행이다. 아래 시험표의 기대 결과는 관측 결과가 아니다. 아키텍처 애니메이션도 장애 시험의 증거로 사용하지 않는다.
- 1. 무엇을 검증했는가
- 2. 판정 원칙
- 3. 실제 기본 VM 결과
- 4. 같은 기본 점검을 다시 수행하는 방법
- 5. 재설치·복제·접근 통제 시험
- 6. 운영 자동화 통합 시험
- 7. 장애·HA·복원 시험
- 8. 온라인망·폐쇄망 검증
- 9. 증거를 연결하는 방법
- 10. 이번 검증의 결론
1. 무엇을 검증했는가
| 항목 | 기록 |
|---|---|
| 호스트 | Windows 11 Pro / Core Ultra 9 185H / 32GB RAM |
| 가상화 | Oracle VirtualBox 7.2.18r175117 |
| VM | fml-template-rocky10.2 |
| 할당 | 1 vCPU / 3072MiB RAM / 동적 64GiB 디스크 / UEFI |
| OS | Rocky Linux 10.2 x86_64 Minimal |
| 커널 | 6.12.0-211.16.1.el10_2.0.1.x86_64 |
| 점검 경로 | 127.0.0.1:22022 → NAT 게스트 TCP 22 |
| 점검 시각 | 2026-09-19 23:24:27 KST |
| 원본 증거 | base-validation.txt, VM·스냅샷 기록, BUILD-LOG.md |
| 종료 상태 | 정상 종료, base-rocky10.2-20260919 스냅샷 생성 |
이 VM은 설치 문제를 복구한 뒤 검증한 기준선이다. 수정된 Kickstart를 새 빈 디스크에 처음부터 적용해 통과한 결과와 구분한다. 현재 NAT 접속 성공으로 최종 망의 Bastion·ACL 검증을 대신하지 않는다.
2. 판정 원칙
통과는 수행 시각, 대상, 실행 방법, 실제 출력이 있고 정한 조건을 만족한 경우다. 실패는 시험을 실행했지만 조건을 만족하지 못한 경우다. 미실행은 결과가 없는 경우이며 실패율 계산에도 섞지 않는다. 원인이 확인되지 않은 오류는 관찰한 사실과 추정을 나눠 기록한다.
명령의 종료 코드가 0이라는 사실은 명령이 실행됐다는 증거다. getenforce가 성공적으로 실행되면서 Permissive를 출력할 수도 있으므로 출력값을 확인해야 한다. 기존 수집 스크립트의 SSH 종료 코드 0만으로 전체 항목을 자동 합격시키지 않았다.
검증 강도도 구분한다. 설정값 확인, 현재 동작 확인, 실패 유도 후 회복 확인, 새 환경 재현은 서로 다른 시험이다. 예를 들어 PasswordAuthentication no를 읽은 것은 설정 확인이며 실제 암호 접속이 거부됐다는 부정 시험의 결과는 아니다.
3. 실제 기본 VM 결과
| ID | 시험 | 관측값 | 판정과 범위 |
|---|---|---|---|
| B01 | OS·커널 식별 | Rocky 10.2 / 기록한 커널 문자열 | 통과: 환경 식별 |
| B02 | 디스크 부팅·새 SSH 세션 | 공개키로 접속, SSH exit code 0 | 통과: 복구한 템플릿 접속 |
| B03 | SELinux | Enforcing | 통과: 점검 시점 모드 |
| B04 | 방화벽 | running | 통과: 서비스 활성, ACL 정확성은 미실행 |
| B05 | SSH 유효 설정 | root·암호·키보드 인증 no, 공개키 yes | 통과: 설정 대조, 부정 인증 시험 별도 |
| B06 | sudo 설정 검사 | 두 sudoers 파일 parsed OK | 통과: 문법, 권한 최소화와 별개 |
| B07 | 필수 서비스 | sshd·chronyd·firewalld active | 통과: 현재 서비스 상태 |
| B08 | 실패 unit 조회 | 출력된 실패 unit 없음 | 통과: 점검 시점 |
| B09 | 시간 | Asia/Seoul, NTPSynchronized=yes | 통과: 동기화 상태, 오차 한계 미측정 |
| B10 | 파티션·여유 | / 61G 중 2.3G 사용, /boot 2G, EFI 599M | 통과: 기본 설치 공간 |
| B11 | 패키지 수 | 343 RPM | 기록: 보안·완전성 합격 기준으로 쓰지 않음 |
| B12 | 기준점 보존 | 정상 종료 후 스냅샷 생성 기록 | 통과: 생성, 복원 성공은 미실행 |
이 표의 ‘통과’를 묶어 시스템 전체의 검증 성공률로 환산하지 않는다. 각 항목의 범위가 다르고 이후 통합 시험이 남아 있기 때문이다.
실제 출력 발췌 — 보안과 서비스
아래는 기록 파일의 실제 출력 중 필요한 부분이다. 개인키·암호·토큰은 포함하지 않았다. 서비스의 active 세 줄은 수집 스크립트의 조회 순서인 sshd, chronyd, firewalld에 대응한다.
SSH exit code: 0
=== SECURITY ===
Enforcing
running
permitrootlogin no
pubkeyauthentication yes
passwordauthentication no
kbdinteractiveauthentication no
allowusers labadmin
/etc/sudoers: parsed OK
/etc/sudoers.d/90-fullmoon-lab: parsed OK
=== SERVICES ===
active
active
active
=== CLOCK ===
Timezone=Asia/Seoul
NTPSynchronized=yes
실습 관리 계정에는 자동화를 위한 NOPASSWD sudo 권한이 있다. sudoers 문법이 정상이란 이유로 운영 환경의 최소 권한 검증까지 완료했다고 주장하지 않는다. 운영 환경으로 옮길 경우 역할별 계정과 허용 명령을 다시 설계해야 한다.
실제 출력 발췌 — 자원과 저장소
=== RESOURCES ===
1
total used free shared buff/cache available
Mem: 2691 408 2228 7 202 2282
Swap: 1023 0 1023
Filesystem Size Used Avail Use% Mounted on
/dev/sda4 61G 2.3G 59G 4% /
/dev/sda2 2.0G 264M 1.7G 14% /boot
/dev/sda1 599M 9.0M 590M 2% /boot/efi
첫 줄의 1은 nproc 출력이다. VM에 3GiB를 할당했어도 게스트의 사용 가능 메모리는 커널 예약 등의 영향을 받는다. 여기의 408MiB 사용량은 기본 OS의 한 시점 값이며 NetBox·AWX를 올린 뒤의 메모리 요구량으로 사용하지 않는다.
별도 점검에서 kdump는 active/exited, Result=success와 커널 적재 로그를 확인했다. 실제 커널 강제 충돌이나 dump 파일 복구 시험은 하지 않았다. kdump 준비와 crash dump 생성 성공을 구분한다.
4. 같은 기본 점검을 다시 수행하는 방법
새로 구축하거나 복구한 Rocky 게스트에서 아래 읽기 전용 조회를 실행한다. 서비스 설정을 바꾸는 명령은 포함하지 않았다. 각 결과를 기대값과 비교한 뒤 판정한다.
date --iso-8601=seconds
cat /etc/rocky-release
uname -r
getenforce
sudo firewall-cmd --state
sudo sshd -t
sudo sshd -T | grep -E '^(permitrootlogin|pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|allowusers) '
sudo visudo -c
systemctl is-active sshd chronyd firewalld
systemctl --failed --no-legend
timedatectl show -p Timezone -p NTPSynchronized
chronyc tracking
chronyc sources -v
ip -brief address
ip route
ip -6 route
df -h / /boot /boot/efi
위 명령 중 chronyc tracking과 sources는 다음 시험에서 시간 오차와 참조 원천을 보강하기 위한 항목이다. 기존 로그에 그 수치가 있는 것처럼 소급해서 채우지 않는다. 점검 전에 대상 호스트명과 시험망을 확인하고, 전체 설정 로그를 공개하기 전 인증정보·내부 주소 등 불필요한 값을 검토한다.
5. 재설치·복제·접근 통제 시험
아래는 미실행 시험의 완성된 수행 기준이다. 결과 칸에 예상값을 복사해 통과로 바꾸지 않는다.
| ID | 전제와 수행 방법 | 합격 기준 | 남길 증거 |
|---|---|---|---|
| R01 신규 설치 | 별도 이름의 빈 VM에 수정 Kickstart로 처음부터 설치 | 수동 복구 없이 B01~B10 충족 | VM 설정, KS 버전·해시, 설치·부팅 로그 |
| R02 재부팅 | 기본 점검 후 정상 재부팅하고 새 SSH 연결 | 설정·주소·서비스가 유지 | 전후 부팅 ID, 서비스 출력, 접속 시각 |
| R03 다중 vCPU | 보존한 기준선의 별도 시험본을 2 vCPU로 변경 | 설치·재부팅·부하 점검 중 정체 없음 | 할당값, 호스트 상태, VBox·게스트 로그 |
| R04 복제 고유성 | 별도 시험본 두 개의 식별값 비교 | MAC·machine-id·호스트명·SSH 호스트 키 중복 없음 | 식별자 비교표, 키 지문 |
| R05 SSH 경로 | Core에서 Target 직접 접속, 이어 Bastion 경유 접속 | 직접 실패·경유 성공, 이유가 ACL 로그와 일치 | 양쪽 명령·종료 코드, 경계 로그 |
| R06 인증 거부 | 승인 계정의 공개키 접속과 허용하지 않은 인증 비교 | 승인된 방식만 성공 | sshd 유효 설정·서버 인증 로그 |
실패한 SSH 한 번만으로 접근 통제 성공을 판정하지 않는다. 대상 sshd가 꺼져 있어도 접속은 실패한다. 같은 시각에 승인된 경유 경로가 성공해야 차단 정책의 효과를 설명할 수 있다. 실패 사유가 DNS·라우팅·키 오류인지도 구분한다.
R03에서 정체가 다시 발생하면 CPU 수 외의 조건을 유지하고 비교한다. 호스트 Hyper-V·VBS·보안 기능을 일괄 해제하는 방법을 기본 해결책으로 삼지 않는다. 지금 확인된 사실은 2 vCPU 설정에서 정체를 관찰했고 1 vCPU에서 설치·복구를 진행했다는 것이다.
6. 운영 자동화 통합 시험
전제는 역할별 VM, 내부 이름·시간·CA, NetBox·AWX·Worker·Zabbix의 정상 구동이다. 시험용 자산 한 대와 구성 버전을 고정하고 작업 ID로 모든 로그를 연결한다.
| ID | 시험 입력·행동 | 합격 기준 | 현재 |
|---|---|---|---|
| I01 신규 편입 | 승인한 대상 한 대의 이벤트 전송 | facts 일치, AWX 성공, 호스트 등록, 필수 데이터 수신 | 미실행 |
| I02 재실행 | 같은 자산·같은 구성 재적용 | 멱등 역할의 불필요한 변경 0, 기능 유지 | 미실행 |
| I03 중복 이벤트 | 동일 작업 요청을 연속·동시에 전달 | 중복 실행 제어, Zabbix 호스트 1개 | 미실행 |
| I04 응답 유실 | 등록 응답이 유실된 조건을 시험 환경에서 재현 | 실제 생성 여부 재조회 후 결과 재사용 | 미실행 |
| I05 구성 불일치 | 승인 IP 또는 호스트명과 다른 대상 지정 | 다음 단계 중단, 기준 자동 덮어쓰기 없음 | 미실행 |
| I06 실패 재개 | Agent 설정 단계에 통제된 오류를 넣고 수정 | 실패 위치·원인 기록, 허용한 단계부터 재개 | 미실행 |
| I07 Worker 재시작 | 진행 중 작업의 기록 저장 후 프로세스 재시작 | 기존 작업 상태 복구, 중복 자산 생성 없음 | 미실행 |
모니터링 필수 항목은 Agent 가용성, CPU, 사용 가능 메모리, 루트 파일시스템 여유로 정한다. 선택한 템플릿의 실제 item key와 수집 주기를 시험 전에 기록한다. 이 실습의 제안 기준은 60초 주기 항목을 대상으로 10분 안에 정상 수신하고, 마지막 값의 나이가 180초 이내인 상태를 연속 3회 확인하는 것이다. 제품의 보장 수치나 이미 달성한 결과가 아니라 앞으로 적용할 시험 기준이다. 다른 주기를 선택하면 실행 전에 기준을 함께 변경한다.
Zabbix API 등록 성공, item의 unsupported 여부, 마지막 값과 시각을 모두 기록한다. AWX의 successful 상태만 캡처해서 I01을 통과시키지 않는다. I02에서 매번 실행되도록 의도한 작업은 멱등 비교 범위와 별도로 설명한다.
7. 장애·HA·복원 시험
시험은 전용 실습 환경에서 한 가지 장애씩 주입하고 매번 정상 기준으로 복구한 후 다음 시험으로 넘어간다. 장애 시작, 감지, 역할 전환, 첫 정상 데이터 시각을 구분한다. 서로 다른 장애를 한꺼번에 주입하면 복구 원인을 설명하기 어렵다.
| ID | 장애 조건 | 관찰·합격 기준 | 현재 |
|---|---|---|---|
| F01 통신 단절 | Proxy·DB는 살리고 Core↔Remote 수집 경로만 차단 | Proxy 로컬 보관, 복구 후 해당 시각 데이터 반영 확인 | 미실행 |
| F02 겸용 VM 중단 | Remote VM 정상 종료 | SSH 중계·Proxy 중단을 각각 관찰, Target 자체 상태는 별도 확인 | 미실행 |
| F03 Server 장애 | 공통 DB 정상 상태에서 Active Server 프로세스 중단 | Standby 전환, 설정한 지연과 실제 공백 기록, 복구 후 단일 Active | 미실행 |
| F04 Core 1 VM 장애 | NetBox·AWX·Server 1을 포함한 VM 중단 | 자동화 영향과 Server 전환을 나눠 확인 | 미실행 |
| F05 공통 DB 중단 | Monitor의 DB를 통제된 방식으로 중단 | Server HA만으로 복구되지 않는 영향·재연결 확인 | 미실행 |
| F06 백업 복원 | 별도 격리 VM에 DB·설정·비밀키·영속 데이터 복원 | 자산·작업·모니터링 기능과 표본 데이터 확인 | 미실행 |
F01은 Proxy 버퍼의 모드·보존 기간·디스크 여유를 먼저 기록하고 그 한도 안에서 단절 시간을 정한다. 단절 중 생성된 표본을 기준으로 수집 누락과 복구 후 지연을 계산한다. 중앙과 연결이 끊겼는데 즉시 알림까지 정상이라고 가정하지 않는다. Zabbix Proxy 공식 문서
F03은 프로세스 장애와 F04의 VM 장애를 구분한다. 공통 DB가 살아 있어야 하는 조건을 명시하며 Native HA를 DB·Web/API의 이중화로 설명하지 않는다. 두 Server의 역할 상태와 실제 수집을 함께 확인한다. Zabbix Native HA 공식 문서
F06에서는 스냅샷 목록이 보이는 것과 실제 복원을 구분한다. 백업 파일 존재만으로 성공을 판정하지 않고 별도 주소의 복원본에서 서비스를 시작해 기능과 데이터를 확인한다. 원래 환경과 중복 Agent·중복 작업이 발생하지 않도록 복원본은 격리한다.
8. 온라인망·폐쇄망 검증
온라인망에서 검증 시
외부 접속이 가능한지만 확인하지 않는다. 허용한 DNS·NTP·저장소 경로가 동작하고, 차단하기로 한 경로는 실패하는지 검사한다. 버전과 해시, 패키지·이미지 목록을 저장해 같은 구성을 다시 만들 수 있어야 한다.
폐쇄망에서 검증 시
외부 접속 실패 하나로 망 격리를 증명하지 않는다. DNS가 잘못됐거나 상대 서버가 응답하지 않아도 같은 결과가 나온다. VirtualBox NIC 구성, IPv4·IPv6 경로, 호스트 인터넷 공유·프록시, 라우터 정책과 로그를 함께 검사한다. 내부 정상 경로를 대조군으로 둔다.
| ID | 시험 | 합격 기준 | 현재 |
|---|---|---|---|
| N01 외부 경로 | NIC·라우팅·ICS·프록시·IPv6 점검 및 외부 DNS/직접 IP 연결 비교 | 외부 우회 경로 없음, 정책·로그로 차단 이유 설명 | 미실행 |
| N02 새 설치 | 캐시 없는 새 VM에서 반입 묶음으로 설치 | 외부 연결 없이 모든 의존성 충족 | 미실행 |
| N03 내부 기반 | DNS·시간·CA와 인증서 확인 | 내부 이름 해석·시각 기준·TLS 검증 정상 | 미실행 |
| N04 기능 동등성 | I01·I02·I03을 격리 환경에서 반복 | 온라인과 동일한 완료 기준 충족 | 미실행 |
| N05 업데이트 | 새 반입 묶음 적용 후 기능 확인·복원 | 의존성 누락 없이 적용, 지정 복구 절차 재현 | 미실행 |
온라인 환경에서 설치한 VM의 외부 NIC만 끄고 서비스가 살아 있는 것은 유지 동작 시험이다. 폐쇄망 신규 구축 성공을 주장하려면 N02가 필요하다. 파일을 추가로 내려받기 위해 인터넷을 연결했다면 그 실행은 미완료로 남기고 반입 묶음을 수정한 뒤 처음부터 재시험한다.
9. 증거를 연결하는 방법
시험마다 대상·버전·설정·시각·관측값을 묶는다. 캡처에는 가능한 한 시험 ID와 시각을 포함하고, 전체 로그는 별도로 보관한다. 비밀정보를 제거한 공개용 기록과 원본을 구분한다.
evidence/
B01/base-validation.txt
R01/install-log.txt
I01/job-summary.json
I01/zabbix-item-times.csv
F03/ha-timeline.csv
N02/software-manifest.csv
SHA256SUMS
이 디렉터리는 권장 증거 구조의 예시다. 현재 모든 파일이 존재한다는 뜻은 아니다. 실제 기본 VM 증거는 앞서 명시한 파일이며, 미실행 시험의 파일 경로를 클릭 가능한 결과 링크로 만들지 않는다.
{
"test_id": "I01",
"status": "NOT_RUN",
"target": "fml-target01",
"network_mode": "offline",
"config_revision": null,
"started_at": null,
"finished_at": null,
"observed": null,
"evidence": []
}
위 JSON은 기록 형식 예시다. 실행하지 않은 시간이나 관측값을 예상치로 채우지 않는다. 설치 소요 시간은 준비 작업·파일 전송·OS 설치·서비스 설치·검증 시간을 나눠 측정한다. 수동 작업과 비교한다면 대상, 작업 범위, 시작·종료 조건을 동일하게 고정한다.
10. 이번 검증의 결론
복구한 Rocky Linux 10.2 기본 VM에서 새 SSH 접속, 보안 모드와 SSH 설정, 필수 서비스, 시간 동기화, 기본 저장소 상태를 확인했다. 이 기준선은 다음 구축 단계의 출발점이다. 신규 설치 재현, 다중 vCPU, 역할별 망과 솔루션, 폐쇄망·HA·복원은 완료 결과가 없다.
운영 준비 완료 판정은 I01의 실제 수집 확인과 접근·보안 조건을 함께 만족할 때 내린다. 폐쇄망 구축 완료는 N02·N04까지, 복원 가능하다는 주장은 F06까지 증거가 있어야 한다. 이번 기록은 완료한 범위를 정확히 남기고, 남은 시험도 같은 기준으로 수행할 수 있도록 만든 검증 문서다.
설계 배경은 「The Operations Loop — 서버의 시작을 운영의 완성으로」, 설치 절차는 「Rocky Linux 운영 실습망 구축 가이드 — 온라인망과 폐쇄망을 같은 기준으로」, VM 오류의 원인 분석은 별도 VM 구축 오류 기록에서 이어진다.