부트로더(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 명령을 실행한다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.