LFCS 실습 환경 구성
배포판에 종속되지 않는 1대·2대 VM 토폴로지와 반복 가능한 초기 상태, 보조 디스크·네트워크·snapshot 구성
LFCS는 배포판별 플랫폼을 선택하는 시험이 아니다. 실습에서는 한 환경에 익숙해지되 package manager·network manager·firewall·service 이름을 현재 시스템에서 확인하는 습관을 만든다. 실제 시험 환경과 VM 사양이 같다고 가정하지 않는다.
작성·검증 상태: AI가 구조화와 초안 작성을 보조했다. Hyper-V·Rocky Linux 계열의 일반 절차를 중심으로 작성했으며, hypervisor별 메뉴 이름과 nested virtualization 지원은 설치한 제품 버전에서 다시 확인해야 한다.
학습 환경의 목표
좋은 실습 환경은 다음 조건을 만족한다.
- OS disk와 포맷 가능한 연습용 disk가 분리되어 있다.
- management network를 끊지 않고 route·bridge·bond·firewall을 연습할 수 있다.
- NFS, SSH, proxy, time, LDAP client 같은 client/server 작업을 재현할 수 있다.
- snapshot 또는 checkpoint로 깨끗한 상태를 반복 복원할 수 있다.
- SELinux Enforcing 환경을 실제로 사용할 수 있다.
- libvirt 실습이 필요하면 nested virtualization 지원 여부를 별도로 확인한다.
권장 토폴로지
최소 구성: VM 1대
개념 확인과 다음 작업에 사용할 수 있다.
- local user·group·ACL·profile·limits
- systemd, process, job, package, Git, certificate
- loop device 또는 추가 disk를 이용한 LVM·filesystem·swap
- local container와 SELinux
- network 상태 조회와 제한적인 local firewall 실습
| 항목 | 권장값 |
|---|---|
| vCPU | 2 |
| memory | 4 GiB 이상 |
| OS disk | 30 GiB 이상 |
| 연습 disk | 5 GiB 2개 이상 |
| NIC | management용 1개, 가능하면 실습용 1개 추가 |
전체 구성: VM 2대
공개 문서의 전체 실습에는 2대 구성을 권장한다.
management/NAT network
package 설치·host SSH 접속
│
┌────────────────┴────────────────┐
│ │
lfcs-node1 lfcs-node2
192.168.56.11/24 192.168.56.12/24
+ 빈 disk 2개 + 빈 disk 1개
│ │
└──────── private lab network ────┘
| 역할 | node1 | node2 |
|---|---|---|
| 기본 작업 | client·관리 대상 | server·backend·remote peer |
| storage | LVM·filesystem·initiator | NFS·iSCSI target |
| network | client·router·proxy | backend·SSH server |
| identity | LDAP client | LDAP lab provider |
| web | reverse proxy·load balancer | HTTP backend 1·2 |
192.168.56.0/24는 예시다. host나 기존 VPN과 겹치지 않는 RFC1918 subnet을 사용한다.
NIC를 분리하는 이유
첫 NIC는 package 설치와 host SSH 접속을 위한 management path로 유지한다. 두 번째 NIC나 private network에서 다음을 연습한다.
- static IPv4·IPv6
- static route
- bridge·bond
- forwarding·NAT·port redirection
- packet filtering
현재 SSH가 통과하는 유일한 connection을 수정하면 VM console 없이는 복구하기 어렵다. network 실습 전에는 hypervisor console과 snapshot 복원을 먼저 확인한다.
배포판 선택
주 실습 환경
SELinux가 공식 competency에 포함되므로 SELinux Enforcing을 기본으로 사용할 수 있는 최신 RHEL-compatible distribution을 주 환경으로 두는 것이 편하다. Rocky Linux나 AlmaLinux 같은 선택지가 여기에 해당한다.
보조 실습 환경
Debian/Ubuntu 계열 VM을 하나 더 준비하면 다음 차이를 직접 확인할 수 있다.
| 영역 | RHEL-compatible 예 | Debian/Ubuntu 예 |
|---|---|---|
| package | dnf, RPM | apt, dpkg |
| network | 주로 NetworkManager | NetworkManager, systemd-networkd, netplan 등 |
| firewall | firewalld 또는 nftables | nftables 또는 다른 frontend |
| MAC | SELinux가 주 학습 대상 | AppArmor가 기본인 경우가 많으므로 SELinux 실습을 대체하지 않음 |
| service 이름·설정 | package별 확인 | package별 확인 |
command 이름만 치환하지 않는다. service unit, configuration path, package가 제공하는 example, 적용 command까지 현재 시스템에서 확인한다.
cat /etc/os-release
command -v dnf apt rpm dpkg
command -v nmcli networkctl
command -v firewall-cmd nft
systemctl list-unit-files --type=service | less
VM 생성과 기본 설치
hypervisor는 snapshot·추가 disk·private network·console을 제공하면 된다. 설치 때 최소 환경을 선택해도 되지만 실습에 필요한 man page와 관리 도구를 package repository에서 설치할 수 있어야 한다.
권장 설치 기준:
- hostname:
lfcs-node1,lfcs-node2 - 일반 관리자 계정:
student - 일반 계정은
sudo또는 배포판의 관리자 그룹 사용 - OpenSSH server 활성화
- SELinux 지원 배포판은
Enforcing유지 - firewall은 끄지 않고 현재 backend·zone을 확인
- system locale은 원하는 언어를 사용할 수 있지만 command·log 검색을 위해 영어 출력에도 익숙해질 것
첫 부팅 뒤:
hostnamectl
localectl
cat /etc/os-release
uname -r
id
sudo -l
systemctl is-system-running
systemctl --failed
추가 disk 준비
hypervisor에서 OS disk와 분리된 빈 virtual disk를 연결한다. guest에서 device 이름을 추측하지 말고 크기·serial·현재 filesystem을 확인한다.
lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,FSVER,LABEL,UUID,MOUNTPOINTS,MODEL,SERIAL
findmnt
swapon --show
pvs
vgs
lvs
연습 disk는 다음 조건을 모두 확인한다.
/,/boot,/home, active swap을 포함하지 않는다.- 현재 mount되어 있지 않다.
- 기존 PV·RAID·filesystem signature가 필요한 데이터가 아니다.
- snapshot 복원으로 초기 상태를 되돌릴 수 있다.
wipefs, partition 삭제, pvcreate, mkfs는 대상 확인 뒤 각 storage 실습에서 실행한다. 환경 구성 단계에서 불필요하게 초기화하지 않는다.
private network 준비
hypervisor에 host-only, internal 또는 private switch를 만든다. guest의 두 번째 NIC를 이 network에 연결하고 interface 이름과 MAC address를 기록한다.
ip -brief link
ip -brief address
ip route
nmcli device status 2>/dev/null || true
networkctl list 2>/dev/null || true
private network의 주소 예시:
| node | IPv4 | IPv6 documentation prefix 예시 |
|---|---|---|
| node1 | 192.168.56.11/24 | 2001:db8:56::11/64 |
| node2 | 192.168.56.12/24 | 2001:db8:56::12/64 |
2001:db8::/32는 문서용 prefix이며 공용 인터넷 routing에 사용하지 않는다. private lab 안에서만 사용한다.
주소를 적용한 뒤 양쪽에서 확인한다.
ip -brief address
ip route
ping -c 2 192.168.56.12
getent hosts lfcs-node2
hostname resolution은 처음에는 /etc/hosts로 단순화할 수 있다. DNS 구성 실습에서는 이 entry가 결과를 가리지 않도록 source를 확인한다.
SSH 작업 환경
host terminal에서 일반 계정으로 접속하고 필요한 경우 root shell로 전환한다.
ssh student@NODE_ADDRESS
sudo -i
SSH 접속 전후:
hostname
id
pwd
printf '%s\n' "$SSH_CONNECTION"
network·SSH server·firewall을 변경할 때는 hypervisor console을 열어 둔다. 기존 session 하나를 유지한 채 새 session에서 변경 결과를 시험하면 lockout 위험을 줄일 수 있다.
libvirt와 nested virtualization
guest VM 안에서 libvirt VM을 실제 실행하려면 CPU virtualization extension을 guest에 노출하는 nested virtualization이 필요할 수 있다. hypervisor·CPU·보안 정책에 따라 지원 여부가 다르다.
guest에서 먼저 확인한다.
lscpu | grep -i virtualization
grep -E -m1 '(vmx|svm)' /proc/cpuinfo
virt-host-validate 2>/dev/null || true
지원되지 않는 환경에서 무리하게 kernel module을 조작하지 않는다. 별도의 KVM-capable Linux host를 사용하거나, libvirt XML 정의·조회·storage/network 객체 관리까지 연습하고 실제 guest boot 검증의 한계를 기록한다.
Hyper-V를 사용하는 경우 host 관리자 PowerShell에서 해당 VM의 nested virtualization 지원 방법과 현재 Microsoft 문서를 확인해야 한다. VM이 꺼진 상태에서 변경하며 production VM에 적용하지 않는다.
기준 상태 확인
각 snapshot을 만들기 전에 다음 출력을 저장한다.
cat /etc/os-release
uname -r
hostnamectl
getenforce 2>/dev/null || true
systemctl is-active firewalld 2>/dev/null || true
systemctl --failed
ip -brief link
ip -brief address
ip route
ss -lntup
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
findmnt
swapon --show
pvs 2>/dev/null || true
vgs 2>/dev/null || true
lvs 2>/dev/null || true
전체 출력을 공개 문서에 붙이는 대신 배포판·kernel·interface·disk·SELinux·firewall 상태와 확인 날짜를 실습 기록에 남긴다.
snapshot·checkpoint 전략
| 이름 | 포함 상태 | 사용 전 |
|---|---|---|
00-base | OS, update, SSH, sudo, management NIC | 모든 실습의 최종 복구점 |
10-two-node | private NIC와 node 간 연결 | network·remote service 실습 |
20-storage-blank | 추가 disk가 비어 있음 | LVM·filesystem·swap·iSCSI |
30-services-base | web·container·SELinux 실습 전 | service·proxy·container |
snapshot 생성만으로 복구 가능성을 증명하지 못한다.
- snapshot을 만든다.
- 작은 test file 또는 hostname marker를 만든다.
- snapshot으로 복원한다.
- marker가 사라지고 VM boot·network·SSH가 정상인지 확인한다.
memory state를 포함한 checkpoint는 실행 중 연결·시간 상태까지 되돌릴 수 있다. 가능하면 VM을 정상 종료한 clean snapshot도 별도로 보관한다.
실습마다 기록할 최소 정보
주제:
배포판·버전:
host와 대상 device/interface:
시작 상태:
목표 상태:
사용한 문서·man page:
시작/종료 시각:
최종 검증:
초기화 또는 snapshot 복원 결과:
공개 Docs의 예제 성공 여부와 개인 수행 기록은 분리한다. 다른 사람이 재현할 수 있는 기술 조건만 공개 문서에 반영한다.
시험 환경과 구분할 점
공식 안내상 실제 시험은 제공된 remote desktop과 Linux terminal에서 수행한다. 개인 VM의 hostname·disk·NIC 이름·package·service 이름을 시험에서도 같다고 가정하지 않는다.
연습 때 다음 습관을 만든다.
- 매 task 시작 때 현재 host와 대상 객체를 확인한다.
- 문제에서 제공한 device·interface·path를 그대로 사용한다.
- base system의 session, management network와 요구하지 않은 service를 건드리지 않는다.
- 재부팅이 꼭 필요한지 먼저 판단한다.
- man page,
/usr/share의 배포판 문서와 설치된 package help에서 답을 찾는다. - 마지막에는 요청된 host에서 실제 동작과 영속성을 확인한다.
시험별 보호 대상·금지 port·node 안내는 바뀔 수 있으므로 시작 화면의 현재 지시를 우선한다.
환경 완료 기준
- VM snapshot을 생성하고 실제 복원해 보았다.
- OS disk와 비어 있는 연습 disk를 출력으로 구분한다.
- management NIC와 private lab NIC를 구분한다.
- node1과 node2가 private IPv4로 통신한다.
- SSH 변경 중에도 사용할 hypervisor console이 있다.
- SELinux Enforcing 환경을 사용할 수 있다.
- libvirt 실습의 nested virtualization 지원 여부를 확인했다.