리눅스 Run Level과 싱글모드 부팅 후 root 패스워드 복구하기
💡 요약 정리
- 리눅스는 0~6까지 7가지 Run Level로 시스템 가동 방식을 구분합니다.
- Run Level 1은 싱글모드(단일사용자 모드)로, root 패스워드 복구에 사용됩니다.
- /etc/inittab 파일에서 시스템 부팅 시 기본 Run Level을 설정합니다.
- root 패스워드 복구는 Grub 부팅 옵션에 single을 추가하여 싱글모드로 진입 후 passwd 명령어로 변경합니다.
설치환경
- CentOS 5.x (64bit)
1. 리눅스 Run Level에 대한 이해
리눅스는 0~6 까지 7가지 방법으로 시스템이 가동되는 것을 나누게 되는데 이것이 바로 Run Level입니다.
/etc/rc.d디렉토리 하단에 보면 0~6까지 런레벨이 나뉘어져 있는 것을 볼 수 있습니다.- 현재의 런레벨은
runlevel명령어로 확인할 수 있습니다.
[root@cafe24 ]# cd /etc/rc.d
[root@cafe24 rc.d]# ls -l
total 112
drwxr-xr-x 2 root root 4096 Feb 12 10:39 init.d
-rwxr-xr-x 1 root root 2255 Oct 13 2010 rc
drwxr-xr-x 2 root root 4096 Feb 12 10:39 rc0.d
drwxr-xr-x 2 root root 4096 Feb 12 10:39 rc1.d
drwxr-xr-x 2 root root 4096 Feb 12 10:39 rc2.d
drwxr-xr-x 2 root root 4096 Feb 12 10:39 rc3.d
drwxr-xr-x 2 root root 4096 Feb 12 10:39 rc4.d
drwxr-xr-x 2 root root 4096 Feb 12 10:39 rc5.d
drwxr-xr-x 2 root root 4096 Feb 12 10:39 rc6.d
-rwxr-xr-x 1 root root 315 Jan 21 10:38 rc.local
-rwxr-xr-x 1 root root 26963 Feb 1 2011 rc.sysinit
[root@cafe24 rc.d]# runlevel
N 3
[root@cafe24 rc.d]#
Run Level 설명
init 0 : 시스템 종료를 의미함 (=halt)
init 1 : 싱글모드(단일사용자 모드), root 사용자의 패스워드 분실시 사용하는 런레벨. 윈도우의 안전모드(?) 정도로 생각하면 됩니다.
init 2 : 네트워크 기능이 없는 다중사용자 모드
init 3 : 네트워크 기능이 있는 일반적인 TEXT 형태의 다중사용자 모드
init 4 : 예비레벨
init 5 : init 3 와 유사하지만 그래픽 유저 인터페이스를 제공하는(= x-window) 다중사용자 모드
init 6 : 시스템 리부팅을 의미함 (= reboot)
2. inittab
시스템이 부팅될 때의 런레벨은 /etc/inittab 파일에 정의되어 있습니다.
[root@cafe24 ]# vi /etc/inittab
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault: <--- 현재 런레벨 설정. init 3 로 설정되어 있음을 알 수 있다.
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit <--- 시스템 초기화를 위한 설정
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now <--- Ctrl+Alt+Del 키 입력시 Shutdown -t3 -r now 명령을 실행한다는 의미
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels
co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav
#1:2345:respawn:/sbin/mingetty tty1
#2:2345:respawn:/sbin/mingetty tty2
#3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
3. root 패스워드 복구하기
root 패스워드를 복구하기 위해서는 Single mode(=run level 1)로 부팅해야 합니다.
패스워드 복구 절차
① 서버 리부팅
싱글모드로 진입하기 위해 서버를 리부팅합니다.
② Grub 수정 모드 진입
부팅시 나오는 Grub 화면에서 e 키를 눌러 수정 모드로 들어갑니다.
③ 커널 부팅 옵션 수정
부팅하려는 커널을 방향키로 선택한 후 다시 e 키를 눌러 수정모드로 들어간 후 가장 마지막에 single 이라는 문구를 추가합니다.
추가 후 Enter를 입력합니다.
grub edit> kernel /vmlinuz-2.6.18-308.11.1.el5 ro root=LABEL=/ vga=771 single
④ 부팅 실행
Enter를 입력했다면 다음과 같은 화면을 볼 수 있습니다. 이 상태에서 b 키를 눌러 리부팅을 합니다.
root (hd0.0)
kernel /vmlinuz-2.6.18-308.11.1.el5 ro root=LABEL=/ vga=771 single
initrc /initrc-2.6.18-308.11.1.el5.img
⑤ 패스워드 변경
리부팅 후에는 로그인 과정 없이 바로 root 계정으로 로그인이 되어 있습니다. 여기서 passwd 명령어로 root 패스워드를 복구할 수 있습니다.
sh-3.2 #
sh-3.2 # passwd
Changing password for user root
New UNIX password:
Retype new UNIX password:
passwd : all authentication tokens updated successfully
⑥ SELinux 재설정 (중요)
SELinux가 활성화되어 있는 경우, 패스워드 변경 후 반드시 다음 명령을 실행해야 합니다.
sh-3.2 # touch /.autorelabel
이 파일을 생성하면 다음 부팅 시 SELinux가 파일 시스템을 재설정하여 패스워드 변경 사항을 정상적으로 인식합니다.
⑦ 시스템 재부팅
sh-3.2 # reboot
또는
sh-3.2 # init 6
재부팅 후 변경된 패스워드로 정상 로그인이 가능합니다.
주의사항
- 싱글모드는 시스템 관리자만 접근해야 하는 모드입니다. 물리적 서버 접근 권한이 있는 사용자는 누구나 root 권한을 얻을 수 있으므로 물리적 보안이 중요합니다.
- SELinux가 활성화된 시스템에서
/.autorelabel파일 생성을 생략하면 패스워드 변경이 정상적으로 적용되지 않을 수 있습니다. - 가상 서버(VPS, 클라우드)의 경우 콘솔 접근 방법이 다를 수 있으니 호스팅 제공사의 가이드를 참고하세요.