Basic Security/_System2007.01.07 14:35
Reference : http://www.ibm.com/developerworks/kr/library/l-bootload.html

모든 리눅스 사용자들이 작업과 전문성에 상관없이 사용하고 있는 유틸리티는 무엇일까? 바로 부트 로더이다. 이 글에서 부트 로더가 어떻게 작동하는지, 그리고 두 개의 대중적인 부트 로더인 LILO(LInux LOader)와 GNU GRUB(GRand Unified Boot loader)을 비교 설명한다.


부트 로더(boot loader)란 무엇인가?

간단히 말해서, 부트 로더(boot loader)는 OS를 로딩한다. 머신이 OS를 로딩하면 BIOS는 우선 512 바이트의 부팅 가능한 미디어(master boot record 또는 MBR)를 읽는다. 하나의 MBR에 단 하나의 OS의 부트 레코드를 저장할 수 있기 때문에 여러 OS가 필요할 경우 문제는 자명하다. 따라서 우리에겐 보다 유연한 부트 로더가 필요하다.

마스터 부트 레코드는 두 가지를 갖고 있다. 부트 로더 프로그램 전체 또는 일부, 그리고 파티션 테이블(나머지 미디어가 파티션으로 나뉘어지는 방법에 대한 정보를 포함하고 있음.)이 그것이다. BIOS가 로딩되면 하드 드라이브의 첫 번째 섹터에 있는 데이터를 찾는다. 그것이 MBR이다. MBR에 저장된 데이터를 사용하여 BIOS는 부트 로더를 활성화한다.

BIOS가 액세스 할 수 있는 데이터 양은 매우 적기 때문에, 대부분의 부트 로더는 두 단계로 로딩된다. 첫 번째 단계에서, BIOS는 initial program loader 또는 IPL로 알려진 부트 로더의 일부를 로딩한다. IPL이 파티션 테이블을 검사하고, 다양한 미디어에 존재하는 데이터를 로딩할 수 있다. 이 작동은 두 번째 단계의 부트 로더가 처음에 자리잡기 위해 사용된다. 여기에는 로더의 나머지 부분이 포함된다.

두 번째 단계의 부트 로더는 부트 로더의 핵심이라 할 수 있다. 많은 사람들은 이것을 부트 로더라고 생각한다. 여기에는 사용자 인터페이스와 커널 로더 같은 디스크를 위시한 부분들을 포함하고 있다. 이러한 사용자 인터페이스들은 간단한 명령행부터 GUI 까지 다양하다.

부트 로더는 두 가지 방식(주 부트 로더 또는 제 2의 부트 로더) 중 하나로 설정된다. 주 부트 로더는 부트 로더의 첫 번째 단계가 MBR에 설치되는 장소이다. 제 2의 부트 로더는 부트 로더의 첫 단계가 부팅 가능한 파티션에 설치되는 장소이다. 개별 부트 로더들이 이때 MBR에 설치되고, 컨트롤을 제 2의 부트 로더에 전달하도록 설정된다.

새로운 리눅스 부트 로더들은 강화된 GUI와 암호화된 패스워드, 선택한 OS에서 로딩할 수 있는 기능 등을 제공하기 때문에 더욱 유용하다. 따라서 같은 머신에 많은 OS를 공존시킬 수 있다. 이로서 물리적 디스크가 많아지게 된다. 이러한 설정은 일반화되고 있다. Windows ® 머신에서 만들어진 값진 데이터파일을 새로운 리눅스와 조화시킬 수 있기 때문이다. 개인적으로 이 설정이 매우 대단하다고 생각한다. 나는 리눅스와 Windows 모두 싱글 박스를 사용하고 있다.

시간이 흐르면서 부트 로더들도 강화되어 보다 많은 기능을 수용할 수 있게 되었다. 이 기능과 설정들은 로더 별로 다양하다. 하지만 기본 목적은 같다.

이제 본론으로 들어가 보도록 하자.



LILO

LInux LOader 또는 LILO는 모든 리눅스 배포판의 표준이다. 오래된 부트 로더인 만큼 리눅스 커뮤니티의 지속적인 지원을 받아 계속적으로 향상되어 오늘날에 이르렀다. 몇 가지 새로운 기능 중에는 향상된 사용자 인터페이스와 오랜 1024-cylinder 한계를 제거한 새로운 BIOS 기능을 들 수 있다.

LILO는 지속적으로 개발되었지만 LILO의 기본 원리는 그대로이다.

LILO를 자신의 부트 로더로 만들기

부트 로더로 LILO를 사용할 때 먼저 확인해야 할 것은 OS를 새로 설치했는지, 아니면 이미 설치된 리눅스에서 LILO로 옮길 예정인지에 따라 다르다. 새로 시작한다면 LILO 설정하기 섹션을 참조하라. 리눅스를 이미 설치했다면 LILO의 설치 및 설정 옵션이 필요하다.

LILO로 마이그레이션하려는 기존 리눅스 사용자들은 LILO 최신 버전이 필요하다.(참고자료). 리눅스 부트 디스크는 다루기 쉬운 것으로 준비하기 바란다. 일단 시스템에 LILO를 설치하면 이를 MBR로 넘기기는 매우 쉽다. 루트 사용자로서 다음을 타이핑한다.

# /sbin/lilo -v -v

이것은 현재 LILO 디폴트를 사용하고 현재 MBR에 있는 무엇이든 스플랫(splat)한다. LILO 설정하기를 참조하여 부팅이 예상했던 대로 되는지를 확인한다. 하나의 머신에 Windows와 리눅스를 실행하려면 Windows OS를 먼저 설치한 다음 리눅스 OS를 설치한다. 리눅스에서 선택한 부트 로더가 Windows 부트 로더에 겹쳐쓰이지 않도록 하기 위해서이다. 리눅스 부트 로더와는 달리 대부분의 Windows 부트 로더들은 리눅스를 부팅할 수 없도록 되어있다. 이미 리눅스를 먼저 설치한 상태라도 실망하지 말라. 리눅스 부트 디스크를 만들어서, Windows를 설치한 후에 리눅스 설치로 돌아가 MBR을 겹쳐쓸 수 있도록 한다.

LILO 설정하기

LILO 설정은 etc/lilo.conf 에 있는 설정파일을 통해 이루어진다. Listing 1은 홈 머신과 관련된 설정 예제로서 리눅스와 Windows 머신을 듀얼부팅하는 설정이다. 기본적인 워크스테이션 설정을 보면서 이 설정이 실제 머신과 어떤 관련이 있는지를 파악하라.

  • Windows XP가 설치된 Primary HDD(물리적 디스크 1). 리눅스에서, 이 HDD는 /dev/hda (GRUB의 hd0,0)이다.
  • Red Hat Linux가 설치된 제 2의 HDD(물리적 디스크 2); 루트(root) 파티션은 이 하드 드라이브의 세 번째 파티션인 /dev/hdb3 (GRUB의 hd1,2)이다.


Listing 1. LILO.conf 파일 예제



boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=100
compact
default=Linux
image=/boot/vmlinuz-2.4.18-14
	label=Linux
	root=/dev/hdb3
	read-only
	password=linux
other=/dev/hda
	label=WindowsXP

Listing 1에 사용된 옵션:

  • boot=는 LILO에게 부트 로더를 어디에 설치해야 하는지를 알려준다. 이전 예제에서는 이것을 첫 번째 하드 디스크의 MBR에 설치했다. /dev/hdb3 (리눅스 파티션)에 LILO를 설치할 수 있다. 이 경우 또 다른 부트 로더를 /dev/had에 설치해야 한다. 그런 다음 LILO가 제 2의 부트 로더로 작동하도록 한다. 일반적으로 /dev/hda는 부트 로더가 상주할 가장 일반적인 장소이다. 이 매개변수를 플로피 드라이브(/dev/fd0)를 가리키게 하여 플로피 부트 디스크로 만들 수 있다.
  • map=은 LILO가 부팅 시 내부적으로 사용하는 맵 파일을 가리킨다. /sbin/lilo 명령어를 사용하여 LILO를 설치하면 이것은 자동적으로 이 파일을 만든다. 이것은 디스크립터 테이블(descriptor table)을 갖고 있다. 그대로 두는 것이 좋다.
  • install=은 부팅 프로세스 중 LILO가 내부에서 사용하는 파일들 중 하나이다. 여기에는 부트 로더의 주/부 부분들이 있다. 이 boot.b 파일의 일부는 MBR(부트 로더의 주 부분)에 작성된다. 이것은 맵을 가리킨 다음 제2의(부) 부트 로더를 가리킨다. 이것 역시 그대로 두는 것이 좋다.
  • prompt=는 LILO에게 사용자 인터페이스를 사용할 것을 알려준다. (이 예제에서는 리눅스와 WindowsXP 선택권이 주어졌다.) 프롬프트/유저 인터페이스를 사용하는 것 외에도 리눅스 커널 또는 다른 것에 대한 특정 매개변수를 지정할 수 있는 옵션도 있다. 설정 파일에서 이 옵션을 지정하지 않으면 LILO는 어떤 사용자 인터랙션 없이 디폴트 OS로 부팅된다. (부팅 시 SHIFT 키를 누르면 프롬프트가 나타난다. 이것은 Joe가 부트 로더에게 노출되기를 원하지 않을 경우 유용하다.)
  • timeout=은 디폴트 OS(이 경우 리눅스이다.)를 자동으로 로딩하기 전 부트 프롬프트가 기다리는 10분의 1초이다. 프롬프트(prompt) LILO.conf 에서 지정되지 않으면 이 매개변수는 무시된다.
  • compact 옵션은 인접해 있는 디스크 읽기 요청들을 하나의 요청으로 합병하여 부트 프로세스가 빨라지게 한다. 이 옵션과 관련된 문제들을 많이 보았지만, 좋은 것임에 틀림없다. 이 옵션은 플로피에서 부팅할 때 특히 유용하다.
  • default=옵션은 LILO에게 기본적으로 어떤 이미지를 부팅해야 하는지를 알려준다. 이것은 LILO.conf 파일에 있는 이미지들 중 한 개의 레이블에 관련되어 있다. 설정 파일에서 이 옵션을 지정하지 않으면 이 파일에 지정된 첫 번째 이미지를 부팅한다.
  • 사용자가 직접 부팅하기 원하는 각 리눅스 버전의 경우 image=와 다음 세 가지 옵션들을 지정한다. 이미지 옵션은 부팅하기 원하는 커널 버전을 지정한다.
  • label=은 런타임 시 사용자 인터페이스에서 부팅하기 원하는 다른 OS를 구별한다. 게다가 이 레이블은 기본 OS를 지정하는데도 사용된다. (주: 레이블 이름에 공백을 사용하지 말라. 공백을 사용하면 파일 로딩 시 에러가 발생할 수 있다.)
  • root= 옵션은 LILO에게 OS 파일 시스템이 실제로 어디에 있는지를 알려준다. 우리 예제에서 이것은 두 번째 디스크의 세 번째 파티션인 /dev/hdb3 이다.
  • read-only는 파일 시스템에 대한 초기 부팅을 읽기 전용으로 수행할 것을 LILO에게 명령한다. 일단 OS가 완전히 부팅되면 읽기-쓰기로 마운트된다.
  • password= 옵션으로 부팅하고자 하는 특정 OS용 패스워크를 설정할 수 있다. 이 예제에서, 패스워드는 읽을 수 있는 텍스트로 LILO.conf 파일에 저장되어 있어서 누구나 읽을 수 있다. password="" 를 설정하면 부트 로더가 설치될 때 패스워드를 설정할 수 있다. 부팅 시킬 OS 마다 설정될 수 있다. (우리 예제에서는 리눅스에만 패스워드를 설정했다.)
  • other=는 이미지와 루트 옵션의 조합처럼 작동하지만 리눅스가 아닌 다른 OS용이다. 우리 예제에서는 LILO에게, 첫 번째 파티션의 첫 번째 디스크에 있는 Windows OS가 어디에 있는지를 말해준다. 이것은 어디까지나 Windows를 먼저 설치하고 나중에 리눅스를 설치한 경우에만 해당한다.
  • label=은 다른 모든 레이블 옵션들과 같다.

LILO.conf 파일에 다른 많은 매개변수들을 사용할 수 있지만, Listing 1의 매개변수는 여러분의 머신에서 특히 유용하다. 이것과 다른 LILO.conf 매개변수에 대한 자세한 내용은 매뉴얼 페이지(man LILO.conf)를 참조하기 바란다. LILO.conf는 부팅 시 읽을 수 없기 때문에 MBR이 변경될 경우 "리프레시(refreshed)" 되어야 한다. 이렇게 하지 않으면 어떤 변경사항도 시작 시 LILO.conf에 반영되지 않는다. LILO를 첫 번째 장소의 MBR에 들어가게 하는 것처럼 다음을 실행해야 한다.

$ /sbin/lilo -v -v

-v -v 플래그는 매우 장황한 아웃풋을 낼 것이다. 우리가 했던 것처럼 LILO를 실행할 때, 상당히 많은 매개변수들을 지정할 수 있다. 자세한 정보는 man LILO를 참조하라.

초기 부트 프로세스

LILO를 초기에 로딩하면 -- L-I-L-O순서로 나타난다. 이 모든 문자들이 다 나타나면 첫 번째 단계는 성공한 것이다. 그렇지 않으면 문제가 있는 것이다.

  • L: 첫 번째 부트 로더가 로딩되었다. LILO가 여기에서 멈추면 두 번째 단계의 부트 로더를 로딩하는데 문제가 있는 것이다. 여기에는 에러 코드가 항상 수반된다. 이 단계에서의 일반적인 문제는 미디어 문제이거나 LILO.conf 파일에서 지정된 부정확한 디스크 매개변수이다.
  • LI: 두 번째 단계의 부트 로더가 로딩되었다. 이 부분에서 LILO가 멈춘다면 두 번째 단계의 부트 로더가 실행될 수 없음을 의미한다. 이것은 L과 비슷한 문제들로 기인한다. 로딩 문제이거나 boot.b 파일이 오염되었다.
  • LIL: 두 번째 단계의 부트 로더가 지금 실행되었다. 이 부분에서 미디어 문제가 다시 응답을 하거나 맵 파일(LILO.conf 파일에서 지정됨)이 디스크립터 테이블을 찾는데 문제가 생긴 것이다.
  • LIL?: 위와 같은 부분에서 로딩되었다. 이것은 두 번째 단계의 부트 로더가 정확하지 않은 주소에 로딩했음을 의미한다. LILO.conf 파일에서 지정된 곳이 아닌 다른 장소에 있는 boot.b 때문에 문제가 생긴 것이다.
  • LIL-: 위와 같은 부분에 로딩되었다. 디스크립터 테이블을 로딩할 때 문제가 생긴 것이다. 대부분 오염된 디스크립터 테이블 때문이다.
  • LILO: LILO가 어떤 오류 없이 성공적으로 로딩되었다.

부팅 시 추가 설정

일단 LILO가 성공적으로 로딩되면 LILO 프롬프트를 보게 될 것이다. LILO.CONF 파일 예제를 사용하여 이 지점에서 두 가지 선택권이 있다. 첫 번째는 (10초 후에) LILO가 종료되도록 한다. 이렇게 하면 리눅스 파티션인 /dev/hdb3이 부팅된다. 두 번째, TAB 키를 누른다. 이 키를 누르면 부팅 가능한 OS 리스트가 나온다. LILO.CONF 예제에서 우리는 "Linux"와 "WindowsXP" 옵션이 있었다. 이중 하나를 타이핑하면 해당 OS가 로딩된다. 리눅스 옵션을 로딩하면 패스워드를 치라는 프롬프트가 생긴다. linux가 패스워드이다. 패스워드를 정확하게 입력하지 않으면 다시 LILO 프롬프트가 뜬다.

LILO를 처음 사용하는 사람에게 해줄 조언이 있다. LILO 설정은 하드 디스크 보다 플로피 부트 디스크를 사용하는 것이 더 안전하다. 이것은 내 경험이다. 이렇게 하면 LILO.conf 파일에서 boot=/dev/hdaboot=/dev/fd0 대체해야 한다. 그렇게 하면 LILO.conf 파일에서 설정을 그르쳤을지라도 부트 디스크를 빼내면 되었다. 플로피 디스크를 사용하여 부팅이 잘된 후 LILO.conf를 변경하여 boot=/dev/hda를 사용하고 마지막에 /sbin/lilo를 실행하여 변경사항을 업로드했다. .



GNU GRUB

요즘에는 GRand Unified Boot loader (GRUB)가 LILO를 앞지르고 있는 것 같다. GNU GRUB은 Free Software Foundation이 능동적으로 개발하였고, Erich Stefan Boleyn이 만든 원래 GRUB 프로그램에 기반하고 있다.

GRUB을 자신의 부트 로더로 만들기

LILO와 마찬가지로 부트 로더로 GRUB을 사용할 때도 OS를 새로 설치했는지, 아니면 이미 설치된 리눅스에서 GRUB으로 옮길 예정인지를 먼저 확인해야 한다. 새로 시작한다면 GRUB 설정하기 섹션으로 바로 가도 좋다. 리눅스가 이미 설치되었다면 LILO 설치 및 설정 옵션과 같다.

GRUB으로 변경하고자 하는 기존 리눅스 사용자들을 위해 최신 GRUB 버전을 소개한다.(참고자료). 역시 LILO와 마찬가지로 우선 리눅스 부트 디스크를 파악해야 한다. 대화형 모드에서 이 디스크는 필요하지 않다. 하지만 그렇게 깊게 들어갈 것이 아니라면 갖고 있는 것도 좋다. 시스템에 GRUB을 설치하기만 하면 MBR 작업은 쉽다. 루트 사용자로서 다음을 타이핑한다.

# /boot/grub/grub

이 명령어는 GRUB 명령어를 사용하는 장소에 BASH 계열의 명령어 프롬프트를 로딩한다.

grub> install (hd1,2)/boot/grub/stage1 (hd1) (hd1,2)/boot/grub/stage2 p (hd1,2)/boot/grub/menu.conf

이 명령어는 GRUB 설치 명령어를 사용한다. 이것은 stage 1 이미지 위치와 MBR(install (hd1,2)/boot/grub/stage1 (hd1)의 위치를 요구한다. 마지막으로 p (hd1,2)/boot/grub/menu.conf 는 GRUB에게 GUI 메뉴 설정 파일의 위치를 알려준다.

이전 예제에서, hd1은 나의 리눅스 디스크(Disk)이고, hd0은 Windows 디스크이다. 이것은 현재 디폴트 GRUB을 사용하고 MBR에 있는 무엇이든 스플랫한다.( GRUB 설정하기 참조)

GRUB 설정하기

GRUB 설정은 /boot/grub/grub.conf에 있는 설정 파일을 통해 이루어진다. Listing 2는 리눅스와 Windows 머신에서의 듀얼 부팅과 관련된 설정 예제이다.


Listing 2. grub.conf 파일 예제



default=0
timeout=10
splashimage=(hd1,2)/grub/splash.xpm.gz
password --md5 $1$opeVt0$Y.br.18LyAasRsGdSKLYlp1
title Red Hat Linux
	password --md5 $1$0peVt0$Y.br.18LyAasRsGdSKLYlp1
	root (hd1,2)
	kernel /vmlinuz-2.4.18-14 ro root=LABEL=/
	initrd /initrd-2.4.18-14.img
title Windows XP
	password --md5 $1$0peVt0$Y.br.18LyAasRsGdSKLYlp1
	rootnoverify (hd0,0)
	chainloader +1

Listing 2에 사용된 옵션은 다음과 같다.

  • default= 옵션은 타임아웃 기간이 지난 후에 어떤 이미지를 부팅할 지에 대한 신호이다. 이것은 grub.conf 파일에 있는 이미지들 중 한 개와 관련이 있다. 0이 첫 번째로 설정되고, 1이 두 번째로 설정된다. 설정 파일에 이 옵션을 설정하지 않으면 이 파일에 지정된 첫 번째 이미지를 부팅하지 않는다.
  • timeout=은 디폴트 OS(이 경우, Red Hat)를 자동으로 로딩하기 전에 부트 프롬프트가 대기하는 초(second)이다.
  • splashimage=는 GRUB GUI용 백그라운드로 사용될 이미지의 위치이다.
  • password 옵션은 MD5로 암호화된 패스워드를 사용하여 GRUB의 대화형 부트 옵션에 액세스하도록 지정한다. 이것은 정해진 OS를 사용자가 로딩하는 것을 막지 않는다. title마다 설정되어야 한다. md5 패스워드를 만들려면, (루트 로서)grub-md5-crypt툴을 실행한다. 암호화 할 패스워드가 나타날 것이다. 그 다음에는 MD5로 암호화된 패스워드가 출력된다. 이것을 password -md5뒤의 grub.conf에 복사한다.(줄이 바뀌지 않도록 한다.) 보통 이 패스워드는 루트 패스워드로 설정된다. 왜냐하면 grub.conf를 읽을 수 있는 것은 루트밖에 없기 때문이다.
  • title은 런타임 시 사용자 인터페이스에서 부팅 될 특정 OS를 구분한다. LILO와는 달리 이름에 공백을 넣을 수 있다.
  • password는 위 패스워드와 같은 방식으로 설정된다. 머신을 공유할 예정이라면 루트 패스워드로 설정하지 말라.
  • root 옵션은 OS 파일 시스템이 실제로 어디에 있는지를 말해준다. 알다시피 GRUB은 LILO와는 다른 방식으로 미디어를 참조한다. LILO 예제에서, /dev/hdb3은 두 번째 디스크의 세 번째 파티션이다. GRUB은 이 디스크를 (hd1,2)로 참조한다. (첫 번째 디스크는 disk 0이고, 첫 번째 파티션은 partition 0이다.)
  • kernel: vmlinuz-X.X.XX-XX는 루트 디렉토리 내에 있는 디폴트 부트 커널 이미지 이름이다.
  • initrd: initrd-X.X.XX-XX.img는 루트 디렉토리 내에 있는 디폴트 initrd 파일 이름이다.
  • title은 모든 다른 title 옵션과 같다.
  • password: 다른 패스워드 옵션을 참조하라.
  • The rootnoverify 옵션은 GRUB에게 OS의 루트를 변경하지 말 것을 명령한다. 파일 시스템이 GRUB에서 지원되지 않을 경우에도 오류를 줄일 수 있다.
  • chainloader +1은 연쇄 로더를 사용하여 OS를 로딩하도록 GRUB에게 명령한다. Windows를 로딩할 때 필요하다.

grub.conf 파일에서 다른 많은 매개변수들을 사용할 수 있지만 Listing 2의 매개변수들로도 충분하다. grub.conf 매개변수들은 매뉴얼 페이지(man grub.conf)를 참조하라.

LILO의 설정 파일과는 달리 grub.conf는 부팅 시 읽혀진다. 그리고 MBR은 변경될 때 리프레시 될 필요가 없다.

초기 부팅 프로세스

GRUB을 처음으로 로딩할 때, LILO와 마찬가지로 MBR에서 첫 번째 단계(stage)를 로딩한다. 이것이 로딩되면 일반 부트 로더 Stage 1과 Stage 2 사이의 단계(Stage 1.5)로 들어간다. Stage 1.5는 /boot/grub에 있는 GRUB 설정 파일에 파일 시스템이 액세스 할 수 있도록 제공되는 것이다. 그런 다음 GRUB이 grub.conf 파일을 로딩하는 Stage 2에 들어간다.

이제 GRUB GUI를 봐야 한다. Windows 사용자라면 LILO 보다는 보다 친숙할 것이다. 하지만 만만하게 생각하지 말라. 옵션이 너무 다양하다. (부팅 시 추가 설정 참조).

나처럼 설정했다면 두 가지 옵션을 보여주는 스크린이 나타날 것이다. Red Hat Linux와 Windows XP 옵션이다. 이것은 기본적으로 리눅스를 로딩한다. 결과는 선택해 보면 안다.

이제 본론으로 들어가보자.

부팅 시 추가 설정

GRUB GUI에서 아무 키나 누르면 타임아웃이 종료된다. P 키를 누르면 GRUB 패스워드를 입력하여 GRUB의 대화형 부팅 옵션에 접근할 수 있다. 다음 키들 중 한 개를 눌러 세 옵션 중 한 가지를 사용할 수 있다.

  • 부팅 전 편집 명령어는 E 이다. 이것으로 현재 진행되는 OS용 특정 옵션들을 편집할 수 있다. GRUB은 그 OS의 부팅에 관련된 옵션들만 보여준다. 루트 파일 시스템에 잘못된 HDD를 설정했을 경우 유용하다. 싱글 유저 모드에 있는 머신에 액세스해야 한다면 GRUB 메인 스크린에서 Linux OS를 선택한다. 그런 다음에는 E를 눌러 커널 라인으로 이동한다. (이 예제에서는 kernel /vmlinuz-2.4.18-14 ro root=LABEL=/이다.) 이 라인 끝에 single을 붙이고, B를 눌러 변경된 GRUB.CONF를 사용하여 부팅한다. 편집 모드에서 발생한 어떤 변경 사항도 GRUB.CONF 파일에 저장되지 않는다.
  • 커널 인자를 변경하려면 A를 누른다. 능숙한 리눅스 사용자라면 필요에 맞게 커널 인자를 조정해도 된다.
  • BASH 계열의 명령행 인터페이스에 접근하려면 C를 누른다. 이 최소한의 명령행 인터페이스로 시스템 상의 GRUB 설정 파일을 찾을 수 있고, 대안 설정 파일을 로딩하며, 설정 파일의 라인들을 편집하고, GRUB 명령어를 직접 입력할 수 있다. 설정 변경으로 인해 시스템을 부팅할 수 없을 경우 이것을 사용한다. 또한 시스템을 부팅하여 싱글 유저 모드 또는 일반 runlevel이 아닌 runlevel 3에 부팅할 때도 이것을 사용한다.

이러한 옵션들의 사용법 까지는 여기에서 다루지 않겠다.

GRUB은 부팅 시 여러 가능성들을 열어둔다. GRUB은 OS가 로딩되기 전에, 침입자들이 시스템으로 접근할 수도 있는 위험이 있다.

  • 싱글 유저 모드로 접근. 싱글 유저 모드로 로딩하는 누구에게나 루트 액세스가 주어진다. 이로서 리눅스 시스템은 얼마든지 남용될 수 있다.
  • 다른 OS로의 접근. DOS 같이 패스워드를 요구하지 않도록 설정한 모든 부팅 가능한 OS는 개방될 것이다.
  • GRUB 에디터로의 접근. 사용자들이 접근하여 GRUB 설정을 바꿀 수 있다.

보안 설정은 GRUB 설정에 있어 매우 중요한 부분이다. 패스워드를 설정하고 MD5 암호화를 사용하는 것이 시스템 보안의 지름길이다.

GRUB의 미래

GRUB은 요즘 GRUB2로 대체되고 있다. 원래 GRUB은 GRUB Legacy로 이름이 바뀌었다. 버그 픽스는 고사하고 더 이상 개발되지도 않는다. GRUB2는 원래 부트 로더를 완전히 재 작성할 것이다. 다음은 핵심 변경사항이다.

  • Stage 1.5를 컴팩트 코어 이미지 생성으로 대체
  • 코어 이미지로 동적 로딩 지원
  • 전체 GRUB 프레임웍을 객체 지향으로 변화
  • 비 ASCII 같은 국제화 지원
  • (리눅스 외) 다양한 하드웨어 아키텍쳐와 플랫폼 지원

GRUB 웹 사이트를 참조하기 바란다.(참고자료)






GRUB vs. LILO

이 글을 시작할 때 언급했지만 모든 부트 로더들은 비슷한 방식으로 작동한다. 하지만 LILO와 GRUB은 많은 차이가 있다.

  • LILO는 대화형 명령어 인터페이스가 없지만 GRUB은 있다.
  • LILO는 네트워크로부터의 부팅을 지원하지 않지만 GRUB은 지원한다.
  • LILO는 MBR에 물리적으로 로딩하기 위해 OS의 위치에 따라 정보를 저장한다. LILO 설정 파일을 변경하면 LILO stage 1 부트 로더를 MBR로 다시 써야 한다. GRUB과 비교해볼 때 이것은 매우 위험스런 옵션이다. 잘못 설정된 MBR이 시스템 부팅을 불가능하게 할 수도 있다. GRUB을 사용하면 설정 파일이 잘못 설정되어도 기본적으로 GRUB 명령행 인터페이스로 맞춰진다.






결론

모든 소프트웨어가 그렇듯이 한 명의 사용자를 위한 최상의 선택이 모든 사람들에게도 최상으로 적용되는 것은 아니다. 여기에서 다룬 두 가지 부트 로더 중에 나는 개인적으로 GNU GRUB이 좋다. 좋은 전천후 로더이고, 사용자 인터페이스와 다양한 기능을 갖추고 있다. 하지만 LILO를 좋아하고 사용하는 사람들 역시 LILO에 대한 자부심이 있을 줄로 안다. 두 개의 부트 로더를 잘 사용하는 것이 더 중요하다.

부트 디스크/CD에 접근하는 사람들은 보안 설정이 되지 않은 grub.conf 또는 LILO.conf를 사용하는 것 자체로도 보안 문제에 노출된 것이다. GRUB을 사용할 때에는 싱글 유저 모드로 부팅하면 심각한 보안 허점이 도사리고 있다. 이 문제를 해결하는 방법은 CD와 플로피에서 부팅할 수 없도록 하고, BIOS에 패스워드를 설정하는 것이다.

여기서 글을 마치겠다.






참고자료

교육


제품 및 기술 얻기


토론






필자소개

Laurence Bonney, WebSphere MQ JMS Test Team Lead, IBM






Posted by Proneer

댓글을 달아 주세요