
시험에서는 2개의 node가 주어지며, node 2는 root password를 잃어버린 상태이다. root password 재설정을 통해 노드에 접속하는 방법을 알아보자.

VM을 부팅하고, GRUB에서 e키를 눌러 편집 화면으로 진입한다.

rhgb quiet 뒤에 rw init=/bin/bash 추가 후 ctrl+x로 reboot한다.
(rd.break은 RHEL 9부터는 지원하지 않는다고 되어 있으나, 실제로는 작동함)

reboot 과정에서 bash-5.1 진입(rd.break 시에는 switch_root라는 별도 영역으로 진입)
bash 창에서 다음과 같이 명령한다.
# rw init=/bin/bash 지정 시
bash-5.1# passwd root
bash-5.1# (신규 password 입력)
bash-5.1# (신규 password 재입력)
bash-5.1# touch /.autorelabel
bash-5.1# /usr/sbin/reboot -f (path 미리 확인 필요)
# rd.break 지정 시
switch_root:/# mount -o remount,rw /sysroot
switch_root:/# chroot /sysroot
chroot:/# passwd
chroot:/# touch /.autorelabel
chroot:/# exit
switch_root:/# exit

selinux-autorelabel~ 메시지가 출력되며 SELinux가 탐색을 수행하고 나면 root password 재설정이 완료된다.

/etc/shadow 파일
사용자가 변경한 root password 정보는 /etc/shadow 파일에 기록되며, 내용이 변경될 경우 자동으로 백업된다.
(변경 전) /etc/shadow- : 백업 파일
(변경 후) /etc/shadow : 최신 파일

root password가 서로 다르게 기록되어 있다(암호화O).

우선 Linux의 부팅 과정을 간략히 짚어보자.
리눅스 시스템 부팅 과정에 대한 자세한 내용은 아래 포스팅에 첨부하였다.
[Linux] 리눅스 시스템 부팅 프로세스 정리(리눅스 부팅 과정)
리눅스 시스템의 전체 부팅 과정은 다음과 같으며,
1) BIOS/UEFI - 하드웨어 점검
2) GRUB - 커널 선택 및 옵션 전달
3) kernel, initramfs - 임시 환경 실행
4) SELinux Relabeling - 보안 tag 복구(.autorelabel)
5) systemd - 실제 서비스 시작 및 로그인 창 출력
root password 재설정 과정은 이 과정 중 3) 과정에 개입하여
1) 리눅스 부팅 과정 중간에 개입 (rd.break)
2) 실제 시스템을 내 작업 공간으로 가져오기 (chroot)
3) 보안 설정 (SELinux)
순서로 Administrator 권한을 되찾는 과정이다.
GRUB에서 편집 모드 진입 후, rd.break 입력 후 reboot하여 switch_root:/로 진입하는 방법과 rw init=/bin/bash 입력 후 reboot하여 bash-5.1 프롬프트로 진입하는 방법을 비교해보자.
| 구분 | 방법 1 (init=/bin/bash) | 방법 2 (rd.break) |
|---|---|---|
| 개입 시점 | 커널 로드 직후 (정상 부팅 프로세스 무시) | initramfs (초기 램 디스크) 실행 단계 |
| 작업 환경 | 실제 루트 파일시스템 환경 | 임시 램 디스크 환경 → chroot로 실제 환경 진입 |
| 시스템 PID 1 | bash 쉘 (임시) | 정상적인 systemd (부팅 재개 시) |
| 재부팅 방식 | 강제 재부팅 필요 (/usr/sbin/reboot -f) | exit 입력 시 자연스럽게 부팅/재부팅 진행 |
| 공식 권장 여부 | 비공식적인 편법 (빠름) | Red Hat 공식 권장 방식 (안전함) |
"부팅 프로세스가 실제 시스템으로 제어를 넘기기 전에 중지(break)"
GRUB의 편집 화면이다. 스템이 하드웨어를 인식하고 OS를 실행하는 데 필요한 정보를 담고 있다.
1) linux ($root)/vmlinuz-. . .행
부팅할 리눅스 커널 파일의 경로 지정
- root=/dev/mapper/rhel-root : 실제 데이터가 들어있는 root filesystem 위치
- ro : 초기 부팅 시 시스템을 읽기 전용(Read-Only)로 마운트
- rhgb quiet : 부팅 시, 그래픽 로고(Red Hat 로고) 보여주고(rhgb) 메시지는 최소화(quiet)
2) initrd ($root)/initramfs-. . .행
커널이 디스크에 접근하기 전, 메모리에 먼저 로드하는 "임시 파일 시스템"
(init + ram + filesystem)
- HDD(Hard-Disk Driver)등이 들어있음
- 커널이 실제 디스크를 읽을 수 있도록 연결
ctrl+x로 reboot시, 수정된 GRUB 구성 파일 내용대로 부팅이 시작되며, 실제 부팅 중 break된 후 switch_root:/# 프롬프트로 진입한다.

switch_root:/# 프롬프트가 출력되는 것은 emergency mode와는 다르다. 부팅 과정을 일시정지(break)하고, 정지된 시점에서 명령어 입력이 가능한 상태이다.
rd.break vs emergency mode 비교
구분 rd.break (initramfs 환경) Emergency Mode (실제 OS 환경) 진입 시점 커널이 로드된 후, 실제 파일 시스템으로 넘어가기 전 실제 파일 시스템을 마운트한 후, 시스템 서비스 시작 중 오류 발생 시 파일 시스템 임시 메모리(initramfs) 공간을 사용함 하드디스크의 실제 루트(/) 공간을 사용함 주요 용도 Root 비밀번호 초기화, 파일 시스템 마운트 오류 수정 심각한 서비스 오류나 설정 오류 복구 프롬프트 switch_root:/#(or press Control-D to continue):
다음과 같은 명령어를 입력하였다.
mount -o remount,rw /sysroot
chroot /sysroot
passwd
touch /.autorelabel
exit
exit
흐름은 다음과 같다.
/sysroot 리마운트 → switch_root → chroot → exit(chroot 종료) → exit (switch_root 종료)
mount -o remount,rw /sysroot
우선 /sysroot에 w권한을 부여해 remount한다. w권한이 있어야 passwd 파일을 수정할 수 있으나, GRUB에서 /sysroot를 ro(read-only)로 마운트했기 때문.
chroot /sysroot
system root를 initramfs(임시 환경)가 아닌 /sysroot(실제 OS의 HDD)로 변경한다. root dir를 변경하는 과정
passwd
root dir 변경을 통해 "임시 메모리(X) → 실제 설치된 리눅스 시스템(O)"에 (passwd 등) 명령을 내릴 수 있다.
passwd 명령을 통해 root password 변경. /etc/shadow 파일에 암호화된 새 비밀번호가 저장된다.
touch /.autorelabel
root directory(/)에 .autorelabel 파일 생성. 단순 신호용 빈 파일의 생성이므로 touch 명령어 사용도 무방하다. 파일명 오타, 파일 생성 위치 주의
root password 변경 시, 해당 파일의 SELinux 보안 컨텍스트가 손상될 수 있다. root dir(/)에 .autorelabel 파일을 생성하면 시스템 reboot시 시스템이 자동으로 SELinux 보안 레이블 복구 작업을 수행한다(복구 과정이 생략될 경우 변경된 password로 로그인이 거부될 수 있다).
exit
chroot를 종료하고 initramfs 임시 환경(switch_root:/# 프롬프트)로 돌아간다.
exit
initramfs 임시환경(switch_root:/# 프롬프트)를 종료한다.
중단되었던 부팅 프로세스가 재개되고, 앞서 예약한 SELinux relabel 과정을 거쳐 시스템이 완전히 재시작된다.
/sysroot
임시환경(initramfs)에서 HDD의 실제 데이터(OS 파일 등)가 임시로 마운트되어있는 디렉토리.
(초기 상태는 보안을 위해 ro (read-only) 상태)
평상 부팅 시라면 root directory(/)에 마운트되지만, emergency mode 혹은 initramfs 등 임시 환경에서는 /sysroot 디렉토리에 마운트되어 있다.
chroot
현재 작업 중인 프로세스의 root directory(/) 위치를 강제 변경하는 명령어
rd.break로 임시 환경에 진입했기 때문에, HDD 내 모든 데이터가 root dir(/)이 아닌 /sysroot에 마운트 되어 있다. /sysroot에 마운트되어 있는 HDD 내 /etc/shadow 파일을 수정해야 하기 때문에, chroot /sysroot 로 root directory 위치를 /sysroot로 강제 변경한 후 passwd 명령어를 통해 변경한다.
password를 강제 변경하면, 원래 파일에 부여된 보안 속성(context)이 실제 상태와 일치하지 않게 되어 시스템이 해당 파일을 신뢰할 수 없게 된다. / 디렉토리의 .autorelabel 파일은 이 보안 속성을 최신 상태로 자동 업데이트하는 과정이다.
SELinux 보안 레이블이란?
리눅스의 모든 파일/프로세스에는 고유의 보안 tag(label)이 붙는다.
SELinux는 이 보안 tag를 통해 "이 프로세스가 이 파일을 읽어도 되는가?"를 결정한다.예시
- password 정보가 담긴 /etc/shadow 파일은 보통 shadow_t라는 보안 tag가 붙는다.
- 오직 password 관리와 관련된 프로세스만이 이 shadow_t 레이블을 가진 파일에 접근할 수 있다.
rd.break로 진입한 임시 환경(initramfs)은 정상 부팅 상태가 아닌 "부팅 과정 중간에 중단 후 개입한" 상태이다. initramfs는 SELinux 비활성(permissive) 상태이며, 비활성 상태에서 passwd 명령으로 /etc/shadow 파일을 (강제)수정할 시 새로운 password 정보 저장과 함께 기존의 보안 레이블 정보가 누락되거나 잘못된 값으로 덮어씌워질 수 있다.
시스템 정상 부팅 시, SELinux는 모든 파일의 보안 tag(label)을 검사한다. 이 파일이 존재하면 SeLinux는 탐지와 전수조사를 수행한다.
PID 1(systemd 혹은 init) 프로세스를 건너뛰고, 바로 시스템 환경으로 진입하여 bash 프롬프트를 띄우는 방식이다.
흐름은 다음과 같다.
rw 권한 포함 / 마운트 → passwd → 강제 종료(/usr/sbin/reboot -f)
passwd root
GRUB 편집 화면에서 initramfs(임시 환경)으로 진입하지 않고 바로 bash 프롬프트로 넘어갔기 때문에, 마운트 디렉토리는 /sysroot이 아닌 root(/)이다. root 사용자의 password를 변경한다(실제 시스템 환경에서 /etc/shadow 파일을 수정하는 것).
touch /.autorelabel
/usr/sbin/reboot -f
정상적인 시스템 초기화 프로세스가 실행되지 않은 상태이기 때문에, 정상적인 종료(reboot, shutdown 등)가 불가능하다. 따라서 강제(-f) reboot 해야 한다. reboot 전 .autorelabel 파일을 생성하여 reboot 이후 SELinux의 보안 tag relabel 작업이 수행되도록 한다.
위험성
정상적인 시스템 초기화 프로세스가 전혀 실행되지 않은 상태이다. systemd를 건너뛴 상태이므로 SELinux 역시 enforcing도 permissive도 아닌 상태. /usr/sbin/reboot -f 명령어로 시스템을 강제로(force) reboot 시, 마운트 해제(unmount)나 데이터 동기화(sync)가 제대로 이루어지지 않아 파일시스템이 손상될 위험이 존재한다.
7.6. root 암호 변경 및 재설정
6.8. rd.break를 사용하여 root 암호 재설정
G.10. 복구 모드 사용
2.4. 이전에 비활성화한 시스템에서 SELinux 활성화