Red Hat Certified System Administrator (RHCSA) #4 부팅과 시스템: systemd, target, GRUB2, password recovery
#3 셸 스크립트에서 조건문과 반복으로 작업을 자동화하는 도구를 다졌다면, 이번에는 시스템 그 자체를 다루는 영역으로 들어갑니다. RHEL 시스템이 켜져서 서비스가 올라오기까지의 흐름, 즉 부팅과 systemd입니다. RHCSA에서 이 영역은 출제 빈도가 매우 높고, 특히 root 비밀번호 복구는 거의 매 시험에 등장하는 단골 작업입니다.
이번 글에서는 systemd가 무엇이고 systemctl로 서비스를 어떻게 제어하는지, 부팅 target을 어떻게 바꾸는지, GRUB2에서 커널 파라미터를 어떻게 편집하는지, 그리고 root 비밀번호를 잊었을 때 어떻게 복구하는지를 명령 단위로 정리하겠습니다. RHEL 실무 트랙의 systemd 편에서 개념을 잡았다면, 이번 글은 그 작업들을 시험 형식으로 다시 손에 익히겠습니다.
systemd란 무엇인가 #
systemd는 RHEL 7부터 표준이 된 init 시스템이자 서비스 관리자입니다. 커널이 부팅을 마치면 PID 1로 systemd가 가장 먼저 뜨고, 그 뒤의 모든 서비스를 systemd가 시작하고 멈추고 감시합니다. 과거 SysVinit의 스크립트 방식과 달리, systemd는 서비스를 unit이라는 단위로 선언적으로 관리하며 의존 관계에 따라 병렬로 올립니다.
systemd의 핵심 개념은 다음 두 가지입니다.
- unit. systemd가 관리하는 대상의 단위입니다. 서비스, 마운트, 소켓, target 등이 모두 unit입니다.
- target. 여러 unit을 묶은 그룹입니다. 시스템이 도달해야 할 상태(예: 멀티유저 콘솔, 그래픽 데스크톱)를 나타냅니다.
unit의 종류 #
unit은 확장자로 종류를 구분합니다. RHCSA에서 자주 보게 되는 종류는 다음과 같습니다.
| 확장자 | 종류 | 설명 |
|---|---|---|
.service | 서비스 | 데몬(sshd, httpd 등)을 정의 |
.target | target | unit의 그룹. 부팅 상태를 나타냄 |
.mount | 마운트 | 파일 시스템 마운트를 정의 |
.socket | 소켓 | 소켓 기반 활성화를 정의 |
.timer | 타이머 | cron을 대체하는 예약 실행 |
unit 파일은 두 곳에 위치합니다. 패키지가 설치한 기본 unit은 /usr/lib/systemd/system/에, 관리자가 수정하거나 추가한 unit은 /etc/systemd/system/에 있습니다. 같은 이름이면 /etc/ 쪽이 우선합니다.
systemctl로 서비스 제어하기 #
systemctl은 systemd를 다루는 단일 명령입니다. RHCSA에서 가장 손에 익혀야 할 명령이므로, 동작별로 정리하겠습니다.
시작, 정지, 재시작 #
# 서비스 시작
sudo systemctl start sshd
# 서비스 정지
sudo systemctl stop sshd
# 서비스 재시작
sudo systemctl restart sshd
# 설정만 다시 읽기(가능한 서비스에 한함)
sudo systemctl reload sshd서비스 이름 뒤의 .service는 생략할 수 있습니다. systemctl start sshd와 systemctl start sshd.service는 동일하게 동작합니다.
부팅 시 자동 시작 여부 #
start와 enable의 차이는 RHCSA의 핵심 함정입니다. start는 지금 시작하는 것이고, enable은 부팅 때마다 자동으로 시작되도록 등록하는 것입니다. 둘은 별개라서, start만 하고 enable을 잊으면 재부팅 후 서비스가 사라져 실점합니다.
# 부팅 시 자동 시작 등록
sudo systemctl enable sshd
# 자동 시작 해제
sudo systemctl disable sshd
# 지금 시작 + 자동 시작 등록을 한 번에
sudo systemctl enable --now httpdenable --now는 enable과 start를 동시에 수행합니다. 시험에서 “서비스를 시작하고 부팅 시에도 동작하게 하라"는 문제가 나오면 이 한 줄이 가장 안전합니다.
상태 확인 #
# 서비스 상태 자세히 보기
systemctl status sshd
# 실행 중인지만 확인(active/inactive)
systemctl is-active sshd
# 자동 시작 등록 여부 확인(enabled/disabled)
systemctl is-enabled sshdsystemctl status의 출력에서 두 줄을 눈여겨봅니다. Loaded: 줄의 enabled/disabled는 부팅 자동 시작 여부이고, Active: 줄의 active (running)/inactive (dead)는 현재 실행 상태입니다.
mask로 서비스 완전 차단 #
disable은 자동 시작만 막을 뿐, 다른 서비스가 의존성으로 깨우거나 수동 start는 여전히 가능합니다. 아예 시작 자체를 막으려면 mask를 씁니다. mask는 unit을 /dev/null로 심볼릭 링크해 어떤 방법으로도 시작되지 않게 합니다.
# 서비스를 완전히 차단
sudo systemctl mask firewalld
# 차단 해제
sudo systemctl unmask firewalldmasked 상태에서는 start를 시도해도 거부됩니다. 차단을 풀려면 반드시 unmask를 먼저 해야 합니다.
부팅 target #
target은 시스템이 도달할 상태를 묶은 unit입니다. 과거 SysVinit의 runlevel을 대체하며, RHCSA에서 자주 다루는 target은 두 가지입니다.
| target | 과거 runlevel | 설명 |
|---|---|---|
multi-user.target | 3 | 텍스트 콘솔, 네트워크 포함. 서버 표준 |
graphical.target | 5 | multi-user에 그래픽 데스크톱 추가 |
이 외에 rescue.target(단일 사용자 복구)과 emergency.target(최소 환경)도 복구 상황에서 쓰입니다.
기본 target 확인과 변경 #
# 현재 기본 target 확인
systemctl get-default
# 기본 target을 멀티유저(텍스트)로 변경
sudo systemctl set-default multi-user.target
# 기본 target을 그래픽으로 변경
sudo systemctl set-default graphical.targetset-default는 다음 부팅부터 적용되는 영구 설정입니다. 시험에서 “부팅 시 그래픽 없이 텍스트 모드로 뜨게 하라"는 문제는 set-default multi-user.target으로 해결합니다.
지금 즉시 target 전환 #
재부팅 없이 현재 실행 중인 시스템의 상태만 바꾸려면 isolate를 씁니다.
# 지금 즉시 멀티유저 모드로 전환
sudo systemctl isolate multi-user.target
# 지금 즉시 그래픽 모드로 전환
sudo systemctl isolate graphical.targetset-default는 다음 부팅에, isolate는 지금 당장 적용된다는 차이를 구분합니다. 영구 변경을 원한다면 set-default를, 일시적 확인을 원한다면 isolate를 씁니다.
systemctl로 서비스 분석 #
운영과 트러블슈팅에서는 어떤 unit이 떠 있고 무엇에 의존하는지를 읽어야 합니다.
# 로드된 unit 목록
systemctl list-units
# 서비스 타입만, 실패한 것 포함
systemctl list-units --type=service --all
# 실패한 unit만 추리기
systemctl --failed
# 설치된 모든 unit 파일과 자동 시작 상태
systemctl list-unit-filessystemctl --failed는 부팅 후 무엇이 올라오지 못했는지를 한눈에 보여 줘, 문제 서비스를 빠르게 찾는 출발점입니다.
의존 관계 추적 #
# 특정 target이 끌어오는 unit 트리
systemctl list-dependencies graphical.target
# 특정 서비스가 의존하는 대상
systemctl list-dependencies sshdlist-dependencies는 target이 어떤 서비스를 묶고 있는지, 서비스가 무엇을 필요로 하는지를 트리로 보여 줍니다. graphical.target이 multi-user.target을 포함하는 구조도 이 명령으로 확인할 수 있습니다.
GRUB2 부트로더 #
GRUB2는 RHEL의 부트로더입니다. 커널을 메모리에 올리고 커널 파라미터를 전달하는 역할을 하며, RHCSA에서는 부팅 시 커널 파라미터를 일시적으로 편집하는 작업이 비밀번호 복구와 직결되어 중요합니다.
부팅 시 일시 편집 #
시스템이 켜질 때 GRUB2 메뉴가 뜨면, 부팅할 항목에 커서를 올리고 e를 누릅니다. 그러면 해당 항목의 부팅 설정을 편집할 수 있습니다. linux로 시작하는 줄을 찾아 커널 파라미터를 추가하거나 수정한 뒤 Ctrl+x로 부팅하면, 그 한 번의 부팅에만 적용됩니다. 재부팅하면 원래대로 돌아오므로 안전하게 시도할 수 있습니다.
이 일시 편집이 root 비밀번호 복구의 핵심입니다. linux 줄 끝에 rd.break를 추가해 부팅하면 root 셸로 떨어집니다.
영구 변경 #
커널 파라미터를 영구히 바꾸려면 /etc/default/grub을 수정한 뒤 설정을 다시 생성합니다.
# /etc/default/grub 편집 후 설정 생성
sudo grub2-mkconfig -o /boot/grub2/grub.cfgRHEL 9에서는 grubby 명령으로 개별 파라미터만 손쉽게 추가하는 방법도 있습니다.
# 모든 커널에 파라미터 추가
sudo grubby --update-kernel=ALL --args="quiet"
# 파라미터 제거
sudo grubby --update-kernel=ALL --remove-args="quiet"root 비밀번호 복구 (최빈출) #
RHCSA에서 거의 매번 나오는 작업입니다. root 비밀번호를 모를 때 rd.break로 초기 램디스크 단계에서 멈춘 뒤, 루트 파일 시스템을 다시 쓰기 가능하게 마운트하고 비밀번호를 바꾸는 절차입니다. 순서를 통째로 외워 두는 것이 가장 빠릅니다.
1단계: rd.break로 부팅 #
- 시스템을 재부팅하고 GRUB2 메뉴에서 부팅 항목에 커서를 올린 뒤
e를 누릅니다. linux로 시작하는 줄을 찾아 끝에rd.break를 추가합니다.Ctrl+x로 부팅하면switch_root프롬프트가 뜨는 root 셸로 떨어집니다.
2단계: 루트 파일 시스템 재마운트 #
이 단계에서 실제 루트는 /sysroot에 읽기 전용으로 마운트되어 있습니다. 비밀번호를 바꾸려면 쓰기 가능하게 다시 마운트해야 합니다.
# /sysroot를 읽기/쓰기로 재마운트
mount -o remount,rw /sysroot
# 실제 루트로 chroot
chroot /sysroot3단계: 비밀번호 변경 #
# root 비밀번호 변경
passwd root4단계: SELinux relabel 예약 #
여기가 가장 많이 빠뜨리는 단계입니다. /etc/shadow가 비밀번호 변경으로 수정되었으므로, SELinux 컨텍스트가 어긋날 수 있습니다. 다음 부팅에서 전체 relabel을 수행하도록 예약 파일을 만듭니다.
# 다음 부팅 시 전체 relabel 예약
touch /.autorelabel이 파일을 만들지 않으면 SELinux 컨텍스트가 어긋나 로그인이 안 되거나 부팅이 막힐 수 있습니다. 반드시 수행합니다.
5단계: 빠져나와 재부팅 #
# chroot 종료
exit
# switch_root 셸 종료(부팅 재개)
exit두 번째 exit로 부팅이 재개되면 /.autorelabel이 전체 relabel을 수행합니다. relabel은 시스템 크기에 따라 수 분 걸리며, 끝나면 자동으로 다시 재부팅됩니다. 그 뒤 새 비밀번호로 root 로그인이 됩니다.
relabel을 기다리지 않으려면, chroot 안에서
/.autorelabel대신restorecon -v /etc/shadow로 해당 파일만 컨텍스트를 복구하는 방법도 있습니다. 다만 안전하게 가려면/.autorelabel을 권장합니다.
시험 포인트 #
- start와 enable은 별개입니다. 지금 시작은 start, 부팅 자동 시작은 enable이며, 둘 다 필요하면
enable --now를 씁니다. - mask는 disable보다 강력합니다. disable은 자동 시작만 막고, mask는 수동 start와 의존성 시작까지 모두 차단합니다.
- set-default와 isolate를 구분합니다. 부팅 기본값 변경은 set-default(영구), 지금 즉시 전환은 isolate(일시)입니다.
- 부팅 시
e편집은 일시 적용입니다. 한 번의 부팅에만 반영되고 재부팅하면 사라지므로 복구 작업에 안전합니다. - root 비밀번호 복구 순서를 통째로 외웁니다.
rd.break추가 →mount -o remount,rw /sysroot→chroot /sysroot→passwd root→touch /.autorelabel→exit두 번입니다. /.autorelabel을 절대 빠뜨리지 않습니다. 이 단계를 잊으면 SELinux 때문에 로그인이 막히는 것이 RHCSA의 단골 실점입니다.
정리 #
이번 글에서 잡은 것:
- systemd는 PID 1의 init이자 서비스 관리자입니다. 모든 대상을 unit으로 다루고 target으로 그룹화합니다.
- systemctl 핵심 동작. start/stop/restart, enable/disable, status, mask를 동작별로 구분해 익혔습니다.
- 부팅 target. multi-user와 graphical을 get-default,set-default로 영구 변경하고, isolate로 즉시 전환합니다.
- 서비스 분석. list-units, –failed, list-dependencies로 무엇이 떠 있고 무엇에 의존하는지 읽습니다.
- GRUB2. 부팅 시
e로 커널 파라미터를 일시 편집하고, grub2-mkconfig,grubby로 영구 반영합니다. - root 비밀번호 복구. rd.break부터
/.autorelabel까지 순서를 통째로 외워 두는 것이 최선입니다.
다음: 로컬 storage 1 #
부팅과 systemd로 시스템 운영의 토대를 잡았습니다. 이제 RHCSA에서 작업 수가 가장 많아 합격을 가르는 영역, 스토리지로 들어갑니다.
#5 로컬 storage 1: 파티션, swap, LVM 기초에서는 디스크에 파티션을 만들고, swap 공간을 추가하며, LVM의 physical volume,volume group,logical volume 개념을 직접 만들어 보며 정리하겠습니다.