부트로더(GRUB)의 장점과 환경설정 및 부팅 과정
GRUB 부트로더
● GRUB – 리눅스의 전통적인 부트로더로 사용되어 왔던
LILO의 단점보완
● GRUB의 장점
① LOLO에 비해 설정 및 사용하기가 편리
② 부트 정보가 올바르지 않더라도 부팅시 이를 바로 수정하여 부팅
③ Chain-load를 이용하여 윈도우 계열 운영체제 외, 기타 운영체제 등과 멀티 부팅가능
④ 메뉴 인터페이스 환경을 지원하여 대화형 모드로 부트 정보를 설정
⑤ 네트워크상에서 부트로더의 설정을 수정
⑥ 파일시스템과 커널 실행 포맷을 인식하여 하드디스크 상에서 커널의 물리적 위치를
기록하지 않고서도, 커널위치와 커널 이미지 파일명만 알고 있으면 부팅이 가능
● GRUB의 환경설정 – /etc/grub.conf
● GRUB 패스워드 만들기
#grub ← 입력하면
grub> ← 이게나오고
grub>md5crypt ←입력하면
password: ******* ← 원하는 GRUB 비밀 번호를 입력하면
Encrypted: $1#$2@5$&*^543pa$#← 이런식으로 md5포맷의 암호화된 코드가 생긴다.
이 암호화된 코드를 복사하여 /etc/grub.conf 파일에 다음과 같이 추가해 준다.
리눅스의 부팅 과정은 다음과 같습니다.
1. Power On
2. ROM BIOS 에서 지정된 부트 드라이브로 부팅 시작
3. 부트 드라이브의 첫 번째 섹터인 부트 섹터 읽기. (MBR)
4. 부트로더(grub) 작동
5. 커널 이미지 적재
6. 루트 파일시스템 마운트
7. 시스템 초기화 프로그램 작동
8. 프롬프트
MBR : Master Boot Recod
커널 이미지 적재시에 관련 메세지들이 표시되는데 보기가 힘듭니다. 부팅이 완료된 후 다음의 명령어로 확인이 가능합니다.
– dmseg | more
– cat /var/log/dmesg
– cat /var/log/messages
init 프로세스가 실행되면 /etc/inittab 을 읽어 들이는데 여기서 살펴 볼 것은 Default Runlevel 입니다.
요즘 나오는 배포판의 대부분을 보면 GUI 환경에서 설치를 하고 GUI 환경으로 부팅이 됩니다.(Run Level 5)
이를 CUI 로 바꿔주기 위해서는 Run Level 3 으로 맞춰주시면 됩니다.
–> vi /etc/inittab
–> id:5:initdefault: 를 id:3:initdefault: 로 수정 후 저장
시스템 초기화(System initalization)
– 부팅 과정에서 Default RunLevel 을 읽은 후 시스템 초기화를 시작하는데 이때 init 은 /etc/rc.d/rc.sysinit 스크립트를 실행하고
inittab 에서 지정한 Run Level 에 따라서 실행 레벨과 일치하는 /etc/rc.d/rc 스크립트들이 동작합니다.
( 주로 /etc/rc.d/rc3.d 디렉토리의 스크립트를 많이 수정합니다. )
/etc/rc.d/rc 스크립트들을 보면 크게 K 와 S, 숫자, 프로그램명 으로 되어 있습니다. ex)S55sshd
K 는 Kill 을 의미하며 해당 프로세스를 죽이는 것을 의미하며, S 는 Start, 숫자는 실행 순서 입니다.
마지막으로 이 글을 작성한 목적인 GRUB 에 암호를 부여하는 것입니다.
아무리 소프트웨어 적으로 보안이 잘되어 있다하더라도 시스템에서 Single 부팅 후 암호를 재설정하면 말짱 꽝입니다.
( 하드웨어를 들고 도망치는 것은 어쩔 수가 없겠죠. 이또한 중요한 사항이라고 생각합니다. ㅡ.ㅡ;; )
GRUB 에 암호를 부여하는 방법은 다음과 같습니다.
1. 콘솔에서 grub 명령어를 실행
2. grub> 프롬프트에서 md5crypt 를 실행하여 해당 암호에 대한 md5 해쉬값 획득
3. 획든한 해쉬값을 /boot/grb/menu.1st( 또는 grub.conf) 파일 안에 다음과 같은 형태로 넣어주시면 됩니다.
– password –md5 [md5 해쉬값]
GRUB 에서의 single 모드 부팅
1. 서버가 리부팅되면서 X 화면이 뜬다.
2. X화면이 뜨면 이때 “e” 를 누른다.
3. 방향키를 이용해서 해당 커널로 이동한다.
4. 해당 커널로 이동후 다시 “e” 를 누른다.
5. 맨 마지막 라인으로 이동한다.
6. 맨 마지막 라인에서 한칸 뛰우고 “single” 를 입력한다.
(예 : kernel /vmlinuz-2.4.6-1 ro root=/dev/hda2 single)
7. ENTER KEY 를 누른다.
8. “b” 를 누르면 리부팅되면서 single 모드로 부팅된다.
root의 패스워드 분실 후 다시 패스워드 설정
상황 :
2006년 1월 12일
rrlab4(Fedora Core 3<2.6.9-1.667> 설치) root의 패스워드를 잊어버렸다 -.-;;
순간 아찔했다.
패스워드를 어떻게 새로 설정해야 하는가?
키워드 :
Fedora, 페도라, grub, 그럽, password, 패스워드, 분실
해결 방법 :
1. single mode로 booting하기
시스템을 다시 시작한 후,
grub에서 자동으로 부팅으로 넘어가기 전에 아무키나 눌러
다음과 같이 부팅을 선택할 수 있는 창이 나오도록 한다.
Fedora Core (2.6.9-1.667)
이 때, p를 눌러 grub password를 입력한다.
(이것은 내가 fedora 설치시 grub password를 입력했기 때문에 이 작업을 해야 한다.)
그리고, 이 때 ‘a’를 누른다. 그러면 다음과 같은 문구가 나온다.
grub append> ro root=LABEL=/1 rhgb quiet
이 문구를 다음과 같이 수정한다.(단순히 1만 추가해준다)
grub append> ro root=LABEL=/1 rhgb quiet 1
그런 다음, Enter를 친다. 그러면 single mode로 부팅이 된다.
2. 패스워드 변경하기
single mode로 부팅하면 명령어를 입력할 수 있는 prompt가 뜬다.
이 때 다음과 같이 root의 패스워드를 입력한다.
sh-3.xx # passwd root
New password : ******
Retype new password : ******
passwd: all authentication ~~~~~
그 다음 다시 multiuser mode로 부팅한다.
sh-3.xx # exit
부트로더의 싱글모드 방지를 위한 패스워드 설정
부트로더에서 암호를 묻는다
[root@localhost etc]# grub-md5-crypt
Password:
Retype password:
$1$/i36S1$LqdCN5jajY8MCdqWaDxZ81
[root@localhost etc]#
암호생성
/etc/grub.conf에 입력
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda3
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
password –md5 $1$/i36S1$LqdCN5jajY8MCdqWaDxZ81
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,0)
kernel /vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ vga=788
initrd /initrd-2.6.11-1.1369_FC4.img
————————————————————————————
싱글모드로 들어가고자할 때
root의 암호를 묻는다
vi /etc/inittab
id:3:initdefault:
~~:S:wait:/sbin/sulogin –> 추가
— inittab 설정 —
프로세스 실행에 관한 설정 형식
id : runlevels : action : process
실행 레벨 값
0 : halt
1 : Single user mode
2 : Multiuser, wihout NFS
3 : Full multiuser mode
4 : unused
5 : X11 (X-window)
6 : reboot
기본 실행 레벨값 설정
id:3:initdefault:
로그인한 후 실행 레벨을 호출하고자 할 때
# telinit 5 (X-window 모드인 실행 레벨 5 호출)
루트 암호를 잃어버렸을 때 실행 레벨 1로 부팅한다.
실행 레벨 1은 시스템 초기화 과정이 생략된 채 쉘 프롬프트로 진입하므로
passwd 명령으로 열쇠글을 변경할 수 있다.
—————————————————————————————-
시스템 초기화
si::sysinit:/etc.rc.d/rc.sysinit
I0:0:wait:/etc/rc.d/rc 0
I1:0:wait:/etc/rc.d/rc 1
I2:0:wait:/etc/rc.d/rc 2
I3:0:wait:/etc/rc.d/rc 3
I4:0:wait:/etc/rc.d/rc 4
I5:0:wait:/etc/rc.d/rc 5
I6:0:wait:/etc/rc.d/rc 6
-> 실행 레벨과 일치하는 /etc/rc.d/rc 스크립트가 작동
—————————————————————————————-
시스템 재시작
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
-> ‘shutdown -r now’ 명령을 Ctrl + Alt + Del 키를 사용하여 대신할 수 있다.
—————————————————————————————-
UPS 전원 부족시에 자동으로 셧다운
pf::powerfail:/sbin/shutdown -f -h +2 “Power Failure; System Shutting Down”
UPS 전원이 충전되어 전원 공급에 문제가 없는 경우 실행한 셧다운 명령을 다음과 같이 취소
pr::powerokwait:/sbin/shutdown -c “Power Restored; Shutdown Cancelled”
—————————————————————————————-
가상 콘솔 접속을 위한 mingetty 설정
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
리눅스에서는 6개의 가상 콘솔을 제공한다.
가상 터미널 접속을 위한 프로토콜
mingetty, uugetty, agetty, mgetty
respawn
커널 메모리상에서 프로세스가 실행되었다가 죽으면 다시 실행되도록 해주는 명령
—————————————————————————————-
X-window 실행 레벨
x:5:respawn:/etc/X11/prefdm -nodaemon
—————————————————————————————-
/etc/inittab 파일을 수정하여 적용하고자 할 때에는 init q 명령을 실행한다.