본문 바로가기

Learning/ └Essential & Admin

Linux_ServerAdmin (9) 리눅스 부팅과정

Linux_ServerAdmin (9) 리눅스 부팅과정

 

 

 

 

1

 리눅스 부팅 과정(Booting Sequence)

 

 

 

[리눅스 부팅 과정]

■ 1 단계 : BIOS(Basic Input/Output System) 단계

■ 2 단계 : 부트 로드(Boot Loader) 단계

■ 3 단계 : 커널(Kernel) 단계

■ 4 단계 : Init 단계

 

 

 

0 단계 : 전원 스위치 ON 단계

 

시스템 전원공급

메인보드의 ROM-BIOS에 있는 BIOS프로그램 자동실행 한다.

BIOS 프로그램은 전원공급과 함께 메모리의 특정번지(예:FFFF0H)에 자동 로드된다.

CPU는 전원공급과 함께 특정번지(예:FFFF0H)의 BIOS프로그램(명령들)을 자동실행 한다

 

[참고] BIOS(Basic Input/Output System)란?

기본 입출력 프로그램. BIOS는 컴퓨터를 처음 켤 때부터 끌 때까지 시스템에 설치된 주변기기들에 대한 제어와

오류 검색 기능을 수행하며 프린터 등 시스템 외부에 설치된 주변 장치들을 운영체제가 직접 통제 할 수 있게

해준다

 

 

 

 

1 단계 : BIOS(Basic Input/Output System) 단계

 

 

 

           [그림] BIOS 단계(VMware VM 환경에 설치된 리눅스)

 

 

자체진단기능(POST(Power On Self Test))

CMOS검사, CPU,  MEMORY, 그래픽카드, 키보드, 마우스등 각종 장치들의 이상 유무를 검사하고 이들 장치(하드웨
어들)을 초기화시킨다.

부팅매체검색과 부트로더 실행

POST과정이  이상  없이  진행  완료되면  검색된  부팅매체(하드디스크,  CD-ROM,  플로피  디스크등)에서  부
트로더(예:GRUB, LILO)를 불러들인다.

즉, 예를들어 하드디스크가 부팅매체로 선택되었다면 하드디스크의 부팅파티션에 있는 0번섹터 (대부분 MBR이라
고도 함)에 있는 부트로더(Boot Loader, 즉, GRUB)을 읽어 들이게 된다.

부트로더(GRUB)가 메모리에 적재되면 BIOS는 종료되고, 시스템 제어권은 부트로더(GRUB)이 갖게 된다.

 

 

2 단계 : 부트로더(GRUB/LILO) 단계

 

 

 

리눅스에서 사용하는 부트로더는 LILO(Linux Loader)나 GRUB가 있다.

만약 부팅로더로 GRUB를 사용하고 있다면, GRUB은 실행과 함께 /boot/grub/grub.conf파일을 읽어서 어떤 부팅메
뉴(커널)로 부팅을 할 것인가를 결정하게 된다.  (자동결정 또는 사용자선택)  이 화면이 GRUB이 화면(파란화면)에 나타나는 첫 번째 화면이다.

GRUB은 커널(kernel)이미지를 불러들이고 시스템 제어권을 커널에게 넘겨준다.

 

 

[참고] 부트로더(Boot Loader)란?

부트로더는 커널(운영체제의 심장)을 메모리에 올려놓는 일을 한다. 보통 GRUB가 멀티부팅을 위한 것으로 생각

하는 사람이 있지만 멀티부팅이 아니더라도 리눅스의 부팅을 위해선 꼭 있어야 하는 것이다.

컴퓨터에  전원이 들어오고  나면  제일 먼저  디스크의 첫  부분을  읽어서 제일  처음 실행되는  프로그램(로더)이다. 부트로더는 커널 이미지의 위치를 알고 있어서 스스로 커널이미지를 찾아서 메모리에 올려놓는다.

 

 

(1). LILO(Linux LOader)

 

- 레드햇(RedHat) 7.X 부터 기본 부터로더로 제공

- 부트로더 LILO의 단점을 보안

- 사용하기가 편함

- 부팅 정보가 올바르지 않아도 부팅시에 바로 수정이 가능

 

환경 설정 파일 : /etc/lilo.conf

실행 파일      : /sibn/lilo

설정 옵션      :

 

         /etc/lilo.conf

         ----------------------------------------------------

         timeout=50                                     /* 부팅시 타임아웃 설정(예: 50초) */

         default=linux                                  /* 기본 부팅 레이블(예: linux) */

         image=/boot/vmlinuz-2.4.21-20.EL               /* 커널 부팅 이미지 */

                  label=linux                            /* 레이블 이름(예: linux) */

                  initrd=/boot/initrd-2.4.21-20.EL.img  /* 초기화 램디스크 파일 */

                  read-only                              /* root 파티션 마운트 옵션 */

                  append="root=LABEL=/“                 /* 마운트할 root 파티션 */

         ---------------------------------------------------- 

 

lilo 설치      : # /sbin/lilo

lilo 삭제      :
(linux 상에서 삭제)
# /sbin/lilo –u
(windows 상에서 삭제)
# fdisk /mbr

 

 

 

 

(2). GRUB(GRand Unified Bootloader)

 

환경 설정 파일 : /boot/grub/grub.conf(/etc/grub.conf)

실행 파일      : /sbin/grub

설정 옵션      :

      
/boot/grub/grub.conf
      -----------------------------------------------------------------------------
      timeout=5                                  
  /* 부팅시 타임아웃 설정 */
      default=0                                    
/* 기본 부팅 레이블(예: 0)
      hiddenmenu                                   
/* GRUB 메뉴 숨김 */
      splashimage=(hd0,0)/bot/grub/splash.xpm.gz  
/* splashimage 위치 */
      title
CentOS (2.6.18-164.11.1.el5)           /* 타이틀 */
               root (hd0,0)                        
/* root 파티션 위치 */
               kernel /boot/vmlinuz-2.6.18-164.11.1.el5 ro root=LABEL=/ rhgb quiet
               initrd /boot/initrd-2.6.18-164.11.1.el5.img
      -----------------------------------------------------------------------------

 

GRUB 설치      : # /sbin/grub-install /dev/sda

GRUB 삭제      :
(Linux 상에서 삭제)   :
# dd if=/dev/zero of=/dev/sda bs=446 count=1
(Windows 상에서 삭제) :
# fdisk /mbr

 

 

 

 

 

 

3단계 : 커널(Kernel) 단계

 

 

                             [그림] 커널 단계

 

 

/etc/grub/grub.conf 파일에 의해서 커널(vmlinuz)이 메모리상에서 실행되면, 하드웨어를 점검하고
/var/log/dmesg 파일에 기록을 한다.

루트 파일시스템(/)을 읽기 전용(Read Only)으로 마운트 한다. 만약 마운트 실패시 “커널 패닉” 메세지를
출력한다.

커널은 swapper프로세스(PID 0번)를 호출한다.

swapper(PID 0번)는 커널이 사용할 각 장치드라이브들을 초기화하고 init프로세스(PID 1번)가 실행하게 된다.

/sbin/init프로세스가 실행되면서 /etc/inittab파일을 읽어들여서 그 내용들을 차례대로 실행한다.

 

[참고] dmesg 명령어

시스템이 부팅될 때 화면에 출력되는 내용을 다시 보여 주는 명령어이다.  시스템은 지속적으로 서비스가 이뤄

져야 하므로 부팅 시에 출력된 메시지를 보기 위해서 시스템을 재부팅하게 되면 서비스가 중단되게 된다. 서비

스가 계속되면서 부팅 시 출력된 메시지로 시스템에 에러가 없었는지 확인하기 위해 dmesg  명령어를 사용하는

것이다. 이 명령은 로그기록이 저장되는 /var 디렉토리에 파일로 저장되어 /var/log/dmesg 파일에 저장된 내용

을 확인 하면 시스템 부팅 시 출력되었던 내용을 확인할 수 있다.

 

# dmesg

# dmesg | grep –i eth

 

# dmesg | grep –i cpu

# dmesg | grep -i mem

# dmesg | grep –i version

# dmesg | grep –i hd

# dmesg | grep –i sd

 

 

 

4 단계 : init 프로세스 단계

 

Setting hostname linux240.example.com:               [  OK  ] -> /etc/rc.d/rc.sysinit

Setting up Logical Volume Mangement:                 [  OK  ] -> /etc/rc.d/rc.sysinit

/: clean, 121775/1716352 files, 923541/1714930 blocks

/data1: clean, 11/128520 files, 26763/514048 blocks

/data2: clean, 11/128520 files, 26763/514048 blocks

/data3: clean, 11/128520 files, 26763/514048 blocks

/data4: clean, 11/128520 files, 26763/514048 blocks

/home: clean, 18/128520 files, 26773/514080 blocks

Remounroot filesystem in read-write mode:  ting      [  OK  ] -> /etc/rc.d/rc.sysinit

Mounting local filesystems:                           [  OK  ] -> /etc/rc.d/rc.sysinit

Enabling local filesystem quotas:                     [  OK  ] -> /etc/rc.d/rc.sysinit

Enabling /etc/fstab swaps:                            [  OK  ] -> /etc/rc.d/rc.sysinit

INIT: Entering runlevel: 5

비 대화식 시작모드를 시작함

Intel CPU 마이크로코드 업데이트를 적용 하는 중       [  OK  ] -> /etc/rc5.d/S00microcode_ctl

배경 readaheadf를 시작 중:                            [  OK  ] -> /etc/rc5.d/S04readahead_early

하드웨어 변경 사항을 확인 중:                         [  OK  ] -> /etc/rc5.d/S05kudzu

loopback 인터페이스를 활성화 중:                      [  OK  ] -> /etc/rc5.d/S11network

eth0 인터페이스 활성화 중:                            [  OK  ] -> /etc/rc5.d/S11network

auditd (을)를 시작 중:                                [  OK  ] -> /etc/rc5.d/S11auditd

시스템 기록을 시작 중:                                [  OK  ] -> /etc/rc5.d/S12syslog

커널관련 기록을 시작:                                 [  OK  ] -> /etc/rc5.d/S12syslog

lrqbalance (을)를 시작 중:                            [  OK  ] -> /etc/rc5.d/S13lrqbalance

portmap (을)를 시작 중:                               [  OK  ] -> /etc/rc5.d/S13portmap

NFS statd를 시작 중:                                  [  OK  ] -> /etc/rc5.d/S14nfslock

PRC ldmapd를 시작 중:                                 [  OK  ] -> /etc/rc5.d/S15mdmonitor

No kdump Initial ramdisk found.                       [ 주의 ] -> /etc/rc5.d/S20kdump

Rebuilding /boot/initrd-2.6.18-164.11.1.el5kdump.img

Starting kdump:                                       [ 실패 ]

시스템 메세지 버스를 시작 중:  -> /etc/rc5.d/S22messagebus

Bluetooth 서비스를 시작 중:                           [  OK  ] -> /etc/rc5.d/S25bluetooth

다른 파일시스템을 마운트하는 중:                      [  OK  ] -> /etc/rc5.d/S25netfs

PC/SC 스마트카드 데몬 (pcscd)을 시작 중:             [  OK  ] -> /etc/rc5.d/S25pcscd

acpi 데몬을 시작 중:                                  [  OK  ] -> /etc/rc5.d/S26acpid

HAL 데몬을 시작 중:                                   [  OK  ] -> /etc/rc5.d/S26haldaemon

hldd를 시작 중:                                       [  OK  ] -> /etc/rc5.d/S26hldd

autofs (을)를 시작 중: Loading autofs4:              [  OK  ] -> /etc/rc5.d/S28autofs

automount (을)를 시작 중:                             [  OK  ] -> /etc/rc5.d/S28autofs

hplod를 시작 중:                                      [  OK  ] -> /etc/rc5.d/S50hplip

hpssd를 시작 중:                                      [  OK  ] -> /etc/rc5.d/S50hplip

sshd (을)를 시작 중:                                  [  OK  ] -> /etc/rc5.d/S55sshd

xinetd (을)를 시작 중:                                [  OK  ] -> /etc/rc5.d/S56xinetd

sendmail (을)를 시작 중:                              [  OK  ] -> /etc/rc5.d/S80sendmail

sm-client를 시작 중:                                  [  OK  ]

콘솔 마우스 서비스를 시작 중:                         [  OK  ] -> /etc/rc5.d/S85gpm

crond (을)를 시작 중:                                 [  OK  ] -> /etc/rc5.d/S90crond

xfs (을)를 시작 중:                                   [  OK  ] -> /etc/rc5.d/S90xfs

anacron (을)를 시작 중:                               [  OK  ] -> /etc/rc5.d/S95anacron

atd (을)를 시작 중:                                   [  OK  ] -> /etc/rc5.d/S95atd

배경 readahead를 시작 중:                             [  OK  ] -> /etc/rc5.d/S96readahead_later

yum-updatesd를 시작 중:                               [  OK  ] -> /etc/rc5.d/S97yum-updatesd

Starting Avahl daemon...                              [  OK  ] -> /etc/rc5.d/S98avahi-daemon

smartd (을)를 시작 중:                                [  OK  ] -> /etc/rc5.d/S99smartd

 

                                    [그림] Init 단계 (Linux on VMWare)

 

 

 

 

■ Text Login Windows

CentOS release 5.4 (Final)

Kernel 2.6.18-164.11.1.el5 on an i686

 

linux249 login:

 

 

■ GUI Login Windows

 

 

 

 

/sbin/init  프로세스가  실행이  되면  /etc/inittab  파일에  정의된  순서에  따라서  시스템을  초기화하기  시작한다. 즉, 로그인프롬프트가 나오기까지의 부팅완료화면까지 init프로세스에 의해서 실행되는 내용들인 것이다.

 

 

(1) /sbin/init 데몬

프로세스란 실행 중인 프로그램을 말하는 것이다.  파일에 저장되어있는 프로그램은 단지 기계어 명령들을 파일에

적어 놓은 것에 불과하다. 그렇지만 이것이 메모리에 올라가서 활동을 하면 프로세스라고 부르는 것이다.

 

프로세스가 어떤 다른 프로세스를 새로 생성할 경우(실행시킬 경우),  실행시킨 프로세스를 부모 프로세스(parent)

라고 하고, 새로 실행된 프로세스를 자식 프로세스(child)라고 부른다. 프로세스는 자기 고유의 번호를 가지고 있

다. 이걸 PID(process id)라고 말한다. 그리고 프로세스는 자기를 실행시켜준 부모 프로세스의 번호도 알고 있다.

즉, PPID(parent process id)라고 한다.

 

init은 무조건 PID 1번이다. 커널이 제일먼저 실행시키는 프로세스이기 때문이다. 그 다음에 커널은 또 프로세스를

만들지 않는다. 이후로 생성되는 프로세스는 모두 init으로부터 나온 프로세스이거나 아니면 init에서 나온 프로세

스에서 나온 프로세스이다. 다시 말해서, init은 모든 프로세스의 부모프로세스라고 할 수 있다. 커널은 init을 실

행시키고 나서는 제어를 init에게 넘긴다. init이 동작하게 되면 커널은 자기의 본업 (프로그램이 특정 기능을 요

청하면 처리해 주는 등의 일)을 하게 된다.

 

init은 흔히 init script라고 부르는 일련의 작업을 진행하게 된다. 여기에 관련된 파일은(시스템마다 다름) 다음

과 같다.

 

 

[EX] /sbin/init 데몬 확인

# pstree | more

init─┬─acpid

      ├─atd

      ├─auditd─┬─audispd───{audispd}

      │          └─{auditd}

      ├─automount───4*[{automount}]

      ├─avahi-daemon───avahi-daemon

      ├─bonobo-activati───{bonobo-activati}

      ├─bt-applet

      ├─clock-applet

      ├─crond

      ├─cupsd

      ├─2*[dbus-daemon]

      ├─dbus-launch

      ├─eggcups

      ├─escd───{escd}

      ├─events/0

      ├─events/1

..... (중략) .....

-> /sbin/init 프로세스가 모든 프로세스의 부모 프로세스라는 것을 알수 있다.

 

# ps -ef | head -20

UID        PID  PPID  C STIME TTY          TIME CMD

root         1     0  0 15:56 ?        00:00:00 init [5]                             

root         2     1  0 15:56 ?        00:00:00 [migration/0]

root         3     1  0 15:56 ?        00:00:00 [ksoftirqd/0]

root         4     1  0 15:56 ?        00:00:00 [migration/1]

root         5     1  0 15:56 ?        00:00:00 [ksoftirqd/1]

root         6     1  0 15:56 ?        00:00:00 [migration/2]

root         7     1  0 15:56 ?        00:00:00 [ksoftirqd/2]

root         8     1  0 15:56 ?        00:00:00 [migration/3]

root         9     1  0 15:56 ?        00:00:00 [ksoftirqd/3]

root        10     1  0 15:56 ?        00:00:00 [migration/4]

root        11     1  0 15:56 ?        00:00:00 [ksoftirqd/4]

root        12     1  0 15:56 ?        00:00:00 [migration/5]

root        13     1  0 15:56 ?        00:00:00 [ksoftirqd/5]

root        14     1  0 15:56 ?        00:00:00 [events/0]

root        15     1  0 15:56 ?        00:00:00 [events/1]

root        16     1  0 15:56 ?        00:00:00 [events/2]

root        17     1  0 15:56 ?        00:00:00 [events/3]

root        18     1  0 15:56 ?        00:00:00 [events/4]

root        19     1  0 15:56 ?        00:00:00 [events/5]

-> /sbin/init 프로세스는 PID 1번을 할당 받는다.

 

 

 

 

(2) /etc/inittab 파일

 

/etc/inittab 파일은 /sbin/init 데몬이 읽어 들이는 설정 파일이다.

이 파일안에는 부팅시에 시스템을 초기화 하는 과정에 대한 전반적인 정보를 담는다.

 

# cat /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:5:initdefault:

 

# 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

 

# 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

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

/etc/inittab 파일에서 ‘#’은 주석처리이다.

/etc/inittab 파일은 시스템이 가동 될때 일반적인 운영 방법의 처리에 대한 것을 설명하고 있는 파일이다. (예
를 들면, /etc/rc, gettys .. 등의 처리).

/sbin/init  프로세스는 다양한 런레벨(Runlevel)을 구별해서 사용한다.  이 런레벨은 시스템의 부팅과 종료등에 사용된다. 런레벨 값은 0-6이며, ondemand 위해 A, B, C가 쓰인다.

 

 

 

 

 

 

 

 

 

(2-1) /etc/inittab 파일의 형식

 

/etc/inittab 파일의 형식은 다음과 같다.

 

         ID:Runlevel:Action:Process

         (예) ca:ctrlaltdel:/sbin/shutdown -t 3 –r now

 

필드

설명

ID

식별자.  /etc/inittab  파일안에서의  각  항목들에  대한  식별자,  최대  4자리.  (libc의  버전이 5.2.18  보다 낮은 버전이나,  a.out  라이브러리 컴파일 했다면,  사용할 수 있는 최대 문자 개수는 개이다.)

Runlevel

런레벨. 진행할 런레벨 지정한다. 만약 런레벨 지정이 없으면 모든 런레벨을 지정한것과 같다.

Action

동작방식지정

(initdefault)  :  시스템 부팅  뒤에  실행될  런레벨을 지정한다.  만약  이 부분이  없으면,  어떤 런레벨로 실행할 것인지 콘솔에서 물어 보게 된다. Process 필드는 무시된다.

(sysinit) : 시스템 부팅을 할 때에 그 프로세스가 실행된다. 이것은 boot, bootwait로 지정된
프로세스 보다 먼저 실행된다. Process 필드는 무시된다.

(wait) : 지정한 런레벨이 되면 그 프로세스가 실행되고, init은 그 프로세스가 종료되기를 기
다린다.

(ctrlaltdel)  :  init가 SIGINT  시그널을 받았을 때 그 프로세스가 실행된다.  SIGINT는 시
스템 콘솔에서  <CTRL+ALT+DEL>  키를  입력할  때  발생하는  시그널이다.  이것은  전형적으로  컴퓨터를 리부팅하거나, 단일 사용자 모드를 사용하기 위해서 사용된다.

(powerfail) : powerwait과 같지만, init는 그 프로세스 작업이 끝나기를 기다리지 않는다.

(powerokwait)  :  init가 SIGPWR  시그널을 받았을 때 그 프로세스가 실행된다.  OK  라는 단어를 포함하고 있는 /etc/powerstatus 파일이 SIGPWR 시그날을 제공한다.

(respawn) : 그 프로세스가 종료되면 항상 다시 시작하게 한다. (예: getty)

Process

실행프로그램. 실행할 프로세스 지정. 이 필드에 ‘+’문자가 제일 앞에 오면, init은 그 처리 과

정에서  utmp,  wtmp  처리를  하지 않게  된다.  이것은  gettys에서 스스로  utmp/wtmp를 처리할  경우

필요하다.

 

 

 

 

(2-2) 기본 런레벨 지정(Default Runlevel)

 

# cat /etc/inittab

..... (중략) ......

# 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:5:initdefault:

..... (중략) ......

 

런레벨은 시스템이 특정하게 초기화된 상태이다.

리눅스 시스템의 기본 런레벨은 5(GUI Mode)이다.

         ----------------------------------------------------------------------------------------------

         런레벨            설  명

         ----------------------------------------------------------------------------------------------

         (런레벨 0)        시스템 정지(System Halt)

         (런레벨 1)        싱글유저모드(Single User Mode), 관리자가 시스템 관리 목적으로 사용하는 상태

         (런레벨 2)        멀티유저모드(Multi User Mode), NFS 서버용 기능이 비활성화 된 상태

         (런레벨 3)        멀티유저모드(Multi User Mode), NFS 서버용 기능이 활성화된 상태, 텍스트 모드 상태

         (런레벨 4)        아직 정의 되어 있지 않음

         (런레벨 5)        멀티유저모드(Multi User Mode), NFS 서버용 기능이 활성화된 상태, 그래픽 모드 상태

         (런레벨 6)        시스템 재부팅(System Reboot)

         ----------------------------------------------------------------------------------------------

/etc/inittab 파일에서 기본 런레벨은 2, 3, 5 이외의 번호는 지정하는 것이 아니다.

 

 

 

(2-3) 기본적인 시스템 초기화

 

# cat /etc/inittab

..... (중략) .....

# System initialization.

si::sysinit:/etc/rc.d/rc.sysinit

..... (중략) .....

 

/etc/rc.d/rc.sysinit 파일은 시스템의 기본적인 초기화 작업을 수행한다.

/etc/rc.d/rc.sysinit 파일은 배쉬쉘 스크립트 파일이므로 편집기(예: vi)로 열어서 확인 할 수 있다.

부팅시 화면에서 시스템 초기화관련 메시지들이 모두 이 파일의 실행과정의 메시지이다.

/etc/rc.d/rc.sysinit 스크립트는 다음과 같은 역할을 가진다.(SELinux에 대한 설명은 제외하였다.)

         ► 변수 설정(HOSTNAME, HOSTTYPE, unamer)

         ► /etc/sysconfig/network 파일 실행

         ► 호스트 이름이 설정 되어 있지 않으면 호스트 이름을 “localhost”로 설정

         ► /proc 파일시스템 마운트

         ► USB 마운트(usbfs : usb 파일시스템)

         ► /etc/init.d/functions 스크립트 실행

         ► 키맵 로딩(keymap loading)

         ► 폰트 설정(/sbin/setsysfont 실행)

         ► 배너메세지 출력("Welcome to CentOS release 5.4 (Final)"

                           "Rress 'I' to enter interactive startup")

         ► 운영체제 시간 설정(/etc/sysconfig/clock, hctosys/hwclock CMD)

         ► 커널 모듈 로딩(/proc/sys/kernel/modprobe, /sbin/modprobe CMD)

           사용자 모듈 로딩(/etc/sysconfig/modules/*.modules)

         ► 커널 패커미터 설정(/etc/sysctl.conf)

         ► 키보드 키맵 설정(/bin/loadkeys)

         ► 호스트 이름 설정(hostname CMD)

         ► RAID 설정(nash CMD, mdadm CMD, /etc/mdadm.conf)

         ► Device Mapper 동작(/dev/mapper)

         ► 쿼타 점검(quotacheck CMD, convertquot CMD, quota 관련 파일들)

         ► 루트 파티션 rw로 다시 마운트

           가상파일시스템 마운트(/proc, /sys, /dev/pts, /proc/bus/usb 등)

           /etc/fstab 파일에 정의된 모든 파일시스템 마운트(auto 옵션)

         ► 설정이 안되어 있으면 실행되는 툴들

           /usr/bin/rhgb-client

           /usr/bin/system-config-keyboard

           /usr/bin/passwd root

           /usr/sbin/system-config-network-tui

           /usr/sbin/timeconfig

           /usr/sbin/authconfig-tui --nostart

           /usr/sbin/ntsysv --level 35

         ► 불필요한 파일 삭제

           /var 디렉토리안의 임시 파일들 삭제(예: /var/run/news/*, /var/run/cups/*)

           utmp/wtmp 파일 정리

         ► 스왑 활성화(Swap ON, swapon CMD, /etc/fstab)

         ► 시리얼 포트(Serial Port) 설정

         ► dmesg 로그 기록(/var/log/dmesg)

 

 

 

 

 

(2-4) 각 런레벨에 맞는 시작 스크립트(Startup Script) 실행

 

# cat /etc/inittab

..... (중략) .....

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

..... (중략) .....

 

결정된 부팅레벨에 따라서 조건(id:5:initdefault:)에 맞는 행을 실행한다.

부팅화면에서 각 서비스데몬(sshd, sendmail,  xinetd,  syslogd,  named, httpd등)들이 실행되며,  서비스 데몬들의 실행되는 메시지들은 모두 이 단계에서 실행되는 메시지들이다.

조건에 따른 실행되는 내용들

         - 부팅레벨이 0번이면 -> /etc/rc.d/rc0.d의 파일들이 순차대로 실행됨.

         - 부팅레벨이 1번이면 -> /etc/rc.d/rc1.d의 파일들이 순차대로 실행됨.

         - 부팅레벨이 2번이면 -> /etc/rc.d/rc2.d의 파일들이 순차대로 실행됨.

         - 부팅레벨이 3번이면 -> /etc/rc.d/rc3.d의 파일들이 순차대로 실행됨.

         - 부팅레벨이 4번이면 -> /etc/rc.d/rc4.d의 파일들이 순차대로 실행됨.

         - 부팅레벨이 5번이면 -> /etc/rc.d/rc5.d의 파일들이 순차대로 실행됨.

         - 부팅레벨이 6번이면 -> /etc/rc.d/rc6.d의 파일들이 순차대로 실행됨.

각 디렉토리들에는 S로 시작하는 파일들과 K로 시작하는 파일들이 링크파일 형태로 존재한다.

각 디렉토리내에 있는 링크파일들은 K와 S다음 두 자리 숫자로 시작한다. (실행순서를 의미함.)

   숫자가 낮으면 먼저 실행되고, 숫자가 크면 나중에 실행되는 것을 나타낸다.

디렉토리들에는 링크파일들이 들어 있으며, /etc/rc.d/init.d/디렉토리의 파일들로 링크되어 있다.

각 디렉토리의 마지막에는 /etc/rc.d/rc.local파일이 실행되는 링크파일이 있다.

 

                                                      (Symbolic Link)

         /etc/rc.d/rc # -----> /etc/rc#.d/S##script start -----> /etc/init.d/script start

                               /etc/rc#.d/K##script stop  -----> /etrc/init.d/script stop

                                                                            A

                                                                            | (Symbolic Link)

                                                                            V

                                                                  /etc/rc.d/init.d/script start

                                                                  /etc/rc.d/init.d/script stop

 

                                                      (Symbolic Link)

         /etc/rc.d/rc 5 -----> /etc/rc5.d/S##script start -----> /etc/init.d/script start

                               /etc/rc5.d/K##script stop  -----> /etrc/init.d/script stop

                                                                            A

                                                                            | (Symbolic Link)

                                                                            V

                                                                  /etc/rc.d/init.d/script start

                                                                  /etc/rc.d/init.d/script stop

 

 

 

(2-4-1) /etc/init.d/script & /etc/rc#.d/[S|K]##script 상관 관계

# cd /etc/rc5.d

# ls

K01dnsmasq@         K50tux@              S09isdn@            S26lvm2-monitor@

K02avahi-dnsconfd@  K69rpcsvcgssd@       S10network@         S28autofs@

K02NetworkManager@  K73ypbind@           S11auditd@          S50hplip@

K02oddjobd@         K74ipmi@             S12restorecond@     S55sshd@

K03yum-updatesd@    K74nscd@             S12syslog@          S56cups@

K05conman@          K74ntpd@             S13cpuspeed@        S56rawdevices@

K05innd@            K80kdump@            S13irqbalance@      S56xinetd@

K05saslauthd@       K85mdmpd@            S13iscsi@           S57vmware-tools-thinprint@

K05wdaemon@         K87multipathd@       S13portmap@         S60vsftpd@

K10dc_server@       K87named@            S14nfslock@         S80sendmail@

K10psacct@          K88wpa_supplicant@   S15mdmonitor@       S85gpm@

K12dc_client@       K89dund@             S18rpcidmapd@       S90crond@

K15httpd@           K89netplugd@         S19rpcgssd@         S90xfs@

K20nfs@             K89pand@             S20hypervkvpd@      S95anacron@

K20rwhod@           K89rdisc@            S22messagebus@      S95atd@

K24irda@            K91capi@             S23setroubleshoot@  S96readahead_later@

K25squid@           S03vmware-tools@     S25bluetooth@       S98avahi-daemon@

K30spamassassin@    S04readahead_early@  S25netfs@           S99firstboot@

K35dovecot@         S05kudzu@            S25pcscd@           S99local@

K35smb@             S07iscsid@           S26acpid@           S99smartd@

K35vncserver@       S08ip6tables@        S26apmd@

K35winbind@         S08iptables@         S26haldaemon@

K50netconsole@      S08mcstrans@         S26hidd@

# ls -l /etc/rc5.d/S55sshd

lrwxrwxrwx 1 root root 14 Feb 10 20:40 /etc/rc5.d/S55sshd -> ../init.d/sshd*

 

 

# /etc/init.d/sshd restart

Stopping sshd:                                             [  OK  ]

Starting sshd:                                             [  OK  ]

 

 

# /etc/rc5.d/S55sshd restart

Stopping sshd:                                             [  OK  ]

Starting sshd:                                             [  OK  ]

 

 

# service sshd restart

Stopping sshd:                                             [  OK  ]

Starting sshd:                                             [  OK  ]

 

         # cat /sbin/service | more

         ----------------------------------------------------------

         #!/bin/sh

 

         . /etc/init.d/functions

 

         VERSION="`basename $0` ver. 0.91"

         USAGE="Usage: `basename $0` < option > | --status-all | \

         [ service_name [ command | --full-restart ] ]"

         SERVICE=

         SERVICEDIR="/etc/init.d"

         OPTIONS=

         ----------------------------------------------------------

 

 

 

(2-4-2) /etc/init.d/script & /etc/rc.d/init.d/script 상관 관계

# ls -l /etc/init.d

lrwxrwxrwx 1 root root 11 Feb 10 20:36 /etc/init.d -> rc.d/init.d/

 

 

# ls /etc/rc.d/init.d

acpid*               firstboot*   killall*         oddjobd*          spamassassin*

anacron*             functions*   krb524*          pand*             squid*

apmd*                gpm*         kudzu*           pcscd*            sshd*

atd*                 haldaemon*   lvm2-monitor*    portmap*          syslog*

auditd*              halt*        mcstrans*        psacct*           tux*

autofs*              hidd*        mdmonitor*       rawdevices*       vmware-tools*

avahi-daemon*        hplip*       mdmpd*           rdisc*            vmware-tools-thinprint*

avahi-dnsconfd*      hsqldb*      messagebus*      readahead_early*  vncserver*

bluetooth*           httpd*       microcode_ctl*   readahead_later*  vsftpd*

capi*                hypervkvpd*  multipathd*      restorecond*      wdaemon*

conman*              innd*        named*           rpcgssd*          winbind*

cpuspeed*            ip6tables*   netconsole*      rpcidmapd*        wpa_supplicant*

crond*               ipmi*        netfs*           rpcsvcgssd*       xfs*

cups*                iptables*    netplugd*        rwhod*            xinetd*

cups-config-daemon*  irda*        network*         saslauthd*        ypbind*

dc_client*           irqbalance*  NetworkManager*  sendmail*         yum-updatesd*

dc_server*           iscsi*       nfs*             setroubleshoot*

dnsmasq*             iscsid*      nfslock*         single*

dovecot*             isdn*        nscd*            smartd*

dund*                kdump*       ntpd*            smb*

 

 

 

 

 

# ls -li /etc/init.d/sshd

66765 -rwxr-xr-x 1 root root 3.4K Feb 23  2012 /etc/init.d/sshd*

 

 

# ls -li /etc/rc.d/init.d/sshd

66765 -rwxr-xr-x 1 root root 3.4K Feb 23  2012 /etc/init.d/sshd*

 

 

 

 

 

 

(2-4-3) 현재 실행되는 스크립트와 부팅시 실행되는 스크립트

 

(부팅시 실행할 스크립트) /etc/rc#.d/script

(현재 실행할 스크립트)   /etc/init.d/script or /etc/rc.d/init.d/script

 

부팅시에 특정한 서비스를 설정하기 위해서는 다음과 같은 툴을 사용할 수 있다.

(TUI) /usr/sbin/ntsysv (/usr/sbin/setup)

(TUI) /sbin/chkconfig 

(GUI) /usr/sbin/system-config-services (/usr/sbin/serviceconf)

 

[EX1] ntsysv 명령어의 동작 원리

ntsysv  명령어는  단순하게  /etc/rc#.d  디렉토리  안의  스크립트를  관리  해  주는  것이다.  /etc/rc#.d  디렉토리안의 S##로 시작하는 스크립트나 K##로 시작하는 스크립트들의 이름을 변환하는 역할을 가진다.

따라서,  /etc/rc#.d  디렉토리 안의 스크립트이름을 S##에서 K##으로 변경되었다고 해서 현재 적용되는 것은 아니고 부팅시에 적용이 되는 것이다. 현재 서비스를 start/stop 하기 위해서는 /etc/init.d/script를 사용한다.

 

 

 

 

 

# ntsysv

           ntsysv 1.3.30.2 - (C) 2000-2001 Red Hat, Inc.

                                                       

         ┌---─────----┤ Services ├──────────┐

         │ What services should be automatically started?    |

         │                                                    |

         │          [ ] rpcsvcgssd                  ▒       |

         │          [ ] rsync                       ▒       |

         │          [ ] rwhod                       ▒       |

         │          [ ] saslauthd                   ▒       |

         │          [*] sendmail                    ▒       |

         │          [*] setroubleshoot              ▒       |

         │          [*] smartd                      ▒       |

         │          [ ] smb                         ▒       |

         │          [ ] spamassassin                ▒       |

         │          [ ] squid                       ▒       |

         │          [ ] sshd                        ▮       |

         │          [*] syslog                      ▒       |

         │          [ ] talk                        ▒       |

         │          [ ] tcpmux-server               ▒       |

         │          [*] telnet                      ↓       |

         │                                                   |

         │         ┌────┐    ┌────┐              |

         │         │ Ok     │    │ Cancel │              |

         │         └────┘    └────┘              |

         └───────────-──────────────┘

 

          Press <F1> for more information on a service.

(sshd 서비스 off 상태)

# cd /etc/rc5.d

# ls *sshd*

K25sshd

 

 

 

# ntsysv

           ntsysv 1.3.30.2 - (C) 2000-2001 Red Hat, Inc.

                                                       

         ┌---─────----┤ Services ├──────────┐

         │ What services should be automatically started?    |

         │                                                    |

         │          [ ] rpcsvcgssd                  ▒       |

         │          [ ] rsync                       ▒       |

         │          [ ] rwhod                       ▒       |

         │          [ ] saslauthd                   ▒       |

         │          [*] sendmail                    ▒       |

         │          [*] setroubleshoot              ▒       |

         │          [*] smartd                      ▒       |

         │          [ ] smb                         ▒       |

         │          [ ] spamassassin                ▒       |

         │          [ ] squid                       ▒       |

         │          [*] sshd                        ▮       |

         │          [*] syslog                      ▒       |

         │          [ ] talk                        ▒       |

         │          [ ] tcpmux-server               ▒       |

         │          [*] telnet                      ↓       |

         │                                                   |

         │         ┌────┐    ┌────┐              |

         │         │ Ok     │    │ Cancel │              |

         │         └────┘    └────┘              |

         └───────────-──────────────┘

 

          Press <F1> for more information on a service.

(sshd 서비스 on 상태)

# cd /etc/rc5.d

# ls *sshd*

S55sshd

 

 

 

 

 

 

         (실무 예) sshd 서버스 Open

 

         (현재) # service sshd start   (# /etc/init.d/sshd start)

         (부팅) # chkconfig sshd on

 

 

          init(/etc/inittab)

          -> /etc/rc.d/rc 5

                   |

                   V

         /etc/rc5.d/S55sshd  <----------> /etc/init.d/sshd, /etc/rc.d/init.d/sshd

                   A                                     A

                   |                                     |

           # chkconfig sshd on/off             # service sshd start/stop/restart

                                               # /etc/init.d/sshd start/stop/restart

                                               # /etc/rc.d/init.d/ssh start/stop/restart

 

 

 

chkconfig 로 설정하는 것과 ntsysv 명령어의 동작은 같다.

/etc/rc#.d  디렉토리안의 S##로 시작하는 스크립트나 K##로 시작하는 스크립트들의 이름을 변환하는 역할을 가진다.

S##에서 K##으로 변경되었다고 해서 현재 적용되는 것은 아니고 부팅시에 적용이 되는 것이다.

현재 서비스를 start/stop 하기 위해서는 /etc/init.d/script를 사용한다.

 

service 명령어를 사용하면 현재 서비스를 on/off 할수 있고

 

chkconfig 명령어를 사용하면 off 한다고 해서 현재 서비스가 off 되지는 않는다. 폴더의 이름만 변경되고

 

다음 부팅시에 효과를 가져온다. 

 

 

 

 

[EX2] 부팅시에 사용자 스크립트/명령어를 실행하는 방법

리눅스에서 부팅시에 사용자 스크립트/명령어를 실행하기 위해서는 /etc/rc#.d/S##local  스크립트를 사용한다.
(예: /etc/rc5.d/S99local)

/etc/rc5.d/S99local  스크립트는  /etc/init.d,  /etc/rc.d/init.d  디렉토리안의  스크립트에  연결되어  있지  않다. 따라서 /etc/rc5.d/S99local 스크립트에 들어 있는 내용은 부팅시에만 실행할 내용을 담는다.

 

# cat /etc/rc5.d/S99local   (/etc/rc.local, /etc/rc.d/init.d/rc.local)

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

 

touch /var/lock/subsys/local

 

#

# (1) ntfs.ko Module Install

#

insmod /lib/modules/2.6.18-128.1.1.el5/kernel/fs/ntfs/ntfs.ko

 

# ls -l /etc/init.d/*local*

ls: /etc/init.d/*local*: No such file or directory

 

# ls -l /etc/rc.d/init.d/*local*

ls: /etc/rc.d/init.d/*local*: No such file or directory

 

 

 

 

 

 

 

(2-5) 부팅시 인터럽트 재부팅 & 부팅시 전원 처리

 

# cat /etc/inittab

..... (중략) .....

# Trap CTRL-ALT-DELETE

ca::ctrlaltdel:/sbin/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"

..... (중략) .....

 

(부팅시 인터럽트 재부팅) “ca::ctrlaltdel:/sbin/shutdown -t3 –r now”
부팅하는 과정에서 <CTRL + ALT + DELETE> 키를 입력하면 프로세스에게 경고 메세지를 주고 3초뒤에 리부팅

(부팅시 전원 처리) “pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"”
                   “pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"”
부팅하는 과정에서 전원이 부족하다는 시그널을 받으면, 전원 실패 메세지를 출력하고 2분뒤에 시스템을 정지시
킬려고,하지만 2분안에 전원이 복구되면, 이전 shutdown 명령어를 취소한다.

 

 

 

(2-6) 가상 콘솔 설정 및 GUI 로그인 창 설정

 

# cat /etc/inittab

..... (중략) .....

# Run gettys in standard runlevels

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

..... (중략) ....

 

 

(/sbin/mingetty)

부팅의 마지막 단계로서 6개의 가상콘솔이 실행된다.

2, 3, 4, 5번 부팅레벨에서만 해당되는 내용이다.

respawn속성(옵션)으로 인하여 로그인 후에 콘솔화면에서 작업 후에 exit로 로그아웃을 하면 자동으로 로그인
창이 다시 실행되는 것을 말한다.

각 행의 실행내용

         - 1:2345:respawn:/sbin/mingetty tty1 은 ALT+F1을 눌렀을 때에 보여짐. (첫번째 가상콘솔)

         - 2:2345:respawn:/sbin/mingetty tty2 은 ALT+F2를 눌렀을 때에 보여짐. (두번째 가상콘솔)

         - 3:2345:respawn:/sbin/mingetty tty3 은 ALT+F3을 눌렀을 때에 보여짐. (세번째 가상콘솔)

         - 4:2345:respawn:/sbin/mingetty tty4 는 ALT+F4를 눌렀을 때에 보여짐. (네번째 가상콘솔)

         - 5:2345:respawn:/sbin/mingetty tty5 는 ALT+F5를 눌렀을 때에 보여짐. (다섯번째 가상콘솔)

         - 6:2345:respawn:/sbin/mingetty tty6 은 ALT+F6을 눌렀을 때에 보여짐. (여섯번째 가상콘솔)

(/etc/X11/prefdm)

GUI 로그인 창을 띄워 준다(Display Manager)

 

 

 

 

 

 

 

 

2

 부팅 과정(Booting Sequence) 실습

 

 

GRUB 암호 설정 및 속성 정보 변경

 

 

[EX1] GRUB 암호 설정 및 속성 정보 실습

부팅시 GRUB프로그램이 실행되면 5초가 사라지기 전에 아무키나 누르면 GRUB편집 상태로 되는 것을 확인해 볼 수가

있다. 이때 부팅시 일반 사용자들도 GRUB상태만 편집하여 싱글유저 모드로 설정하여 재부팅을 하면 시스템을 관리자 권한으로 변경  할 수가 있게 된다.  이를 방지하기 위해 GRUB를 편집 할  때 Password를 걸어 일반  사용자들은 GRUB모드를 편집 할 수 없도록 설정 하도록 한다.

 

① GRUB 암호 생성

# grub

    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 

 [ Minimal BASH-like line editing is supported.  For the first word, TAB

   lists possible command completions.  Anywhere else TAB lists the possible

   completions of a device/filename.]

 

grub> help

blocklist FILE                         boot

cat FILE                               chainloader [--force] FILE

clear                                  color NORMAL [HIGHLIGHT]

configfile FILE                        device DRIVE DEVICE

displayapm                             displaymem

find FILENAME                          geometry DRIVE [CYLINDER HEAD SECTOR [

halt [--no-apm]                        help [--all] [PATTERN ...]

hide PARTITION                         initrd FILE [ARG ...]

kernel [--no-mem-option] [--type=TYPE] makeactive

map TO_DRIVE FROM_DRIVE                md5crypt

module FILE [ARG ...]                  modulenounzip FILE [ARG ...]

pager [FLAG]                           partnew PART TYPE START LEN

parttype PART TYPE                     quit

reboot                                 root [DEVICE [HDBIAS]]

rootnoverify [DEVICE [HDBIAS]]         serial [--unit=UNIT] [--port=PORT] [--

setkey [TO_KEY FROM_KEY]               setup [--prefix=DIR] [--stage2=STAGE2_

terminal [--dumb] [--no-echo] [--no-ed terminfo [--name=NAME --cursor-address

testvbe MODE                           unhide PARTITION

uppermem KBYTES                        vbeprobe [MODE]

grub> help md5crypt

md5crypt: md5crypt

    Generate a password in MD5 format.

 

grub> md5crypt

 

Password: ******          <---- centos 입력

Encrypted: $1$MvASb1$ybxMVaG6G9vx3vqwPvRR/0

 

grub> quit

 

② /etc/grub.conf(/boot/grub/grub.conf) 파일에 GRUB 암호 설정

# vi /etc/grub.conf      (# vi /boot/grub/grub.conf)

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You do not have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /, eg.

#          root (hd0,0)

#          kernel /boot/vmlinuz-version ro root=/dev/sda1

#          initrd /boot/initrd-version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

#hiddenmenu

password --md5 $1$MvASb1$ybxMVaG6G9vx3vqwPvRR/0

title CentOS (2.6.18-348.el5)

        root (hd0,0)

        kernel /boot/vmlinuz-2.6.18-348.el5 ro root=LABEL=/ rhgb quiet

        initrd /boot/initrd-2.6.18-348.el5.img

-> /etc/grub.cnof(/boot/grub/grub.conf) 파일을 편집한다.

   hiddenmenu 부분을 주석(#)처리하고 password 키워드를 설정한다.

 

 

 

③ 재부팅 후 GRUB 화면에서 확인

# reboot

 

 

(부팅화면에서)

-> 부팅화면에서 GRUB 라인 편집을 위해서 'e' 를 입력해도 편집할 수 없다.

-> 이것은 GRUB 암호를 입력했기 때문이다.

-> 따라서 GRUB 화면을 편집하기 위해서는 'p' 를 입력하고 GRUB 암호를 입력해야 한다.

 

④ GRUB 화면에서 'p' 입력 -> GRUB 암호 입력 -> [ENTER] 입력

-> GRUB 암호입력이 된후에는 원래 화면으로 다시 돌아오게 되고,

-> 이제 부터는 GRUB 화면을 편집하여 사용할 수 있게 되었다.

-> GRUB 화면을 편집하여 사용하기 위해서는 'e'라고 입력하고 편집하여 사용하면 된다.

 

 

 

(원복) /etc/grub.conf 파일 복원

         # vi /etc/grub.conf   (# vi /boot/grub/grub.conf)

         ......

         #password --md5 $1$Dl27c1$sFG0nLlyzeUza47hSAgOL1

         ......

 

 

 

 

[EX2] 리눅스에 서비스 등록

 

standalone 방식의 추가

■ xinetd 방식의 추가

 

         (요청) oracle 관리자/was 관리자

                -> 운영체제가 부팅이 될때 was/oracle 소프트웨어를 같이 기동 시켜 달라.

         (요청) 소스 컴파일(EX: /usr/local/apache2)

                -> (X) # /usr/local/apache2/bin/apachectl restart

                -> (0) # service apache2 restart

                       # chkconfig apache2 on

 

(1) standalone 방식으로 새로운 서비스 추가

 

① /etc/init.d/new 스크립트 생성

# cd /etc/init.d

# cp sshd new

 

 

 

# vi new

#!/bin/bash

#

# chkconfig: 2345 55 25     /* # chkconfig new on -> 2/3/4/5 runlevel : on */

# description: Test Script  /* /etc/rc5.d/S55new, /etc/rc5.d/K25new */

#

 

case "$1" in

        start)

                echo 1111 > /test/echo.start

                echo "[  OK  ] start"

                ;;

        stop)

                echo 2222 > /test/echo.stop

                echo "[  OK  ] stop"

                ;;

        restart)

                echo 2222 > /test/echo.stop

                echo "[  OK  ] stop"

                echo 1111 > /test/echo.start

                echo "[  OK  ] start"

                ;;

        *)

                echo $"Usage: $0 {start|stop|restart}"

                RETVAL=1

esac

exit $RETVAL

-> 적당하게 편집하여 사용한다.

 

맨 첫줄# 부터 연속되어 이어지는 #은 주석처리아님 공백줄이 있을 때 까지 유지된다.

 

 

 

 vi편집을 마치고 퍼미션을 변경해준다 이후 확인해보기

 

 

② chkconfig --add 서비스 등록

# chkconfig --add new

# ls -l /etc/rc?.d/*new

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc0.d/K60new -> ../init.d/new*

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc1.d/K60new -> ../init.d/new*

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc2.d/S90new -> ../init.d/new*

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc3.d/S90new -> ../init.d/new*

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc4.d/S90new -> ../init.d/new*

lrwxrwxrwx 1 root root 13 May 12 16:51 /etc/rc5.d/S90new -> ../init.d/new*

lrwxrwxrwx 1 root root 13 Apr 30 15:07 /etc/rc6.d/K60new -> ../init.d/new*

 

 

 

# chkconfig --list new

new             0:off   1:off   2:on    3:on    4:on    5:on    6:off

 

 

# service new restart

[  OK  ] stop

[  OK  ] stop

 

 

# ls -l /test/echo*

-rw-r--r-- 1 root root 5 May 12 17:17 /test/echo.start

-rw-r--r-- 1 root root 5 May 12 17:17 /test/echo.stop

 

 

 

 

(복원) new 서비스 삭제

# chkconfig --help

# chkconfig --del new

# ls -l /etc/init.d/new

# ls -l /etc/rc?.d/*new

 

 /etc/init.d/new 스크립트는 그대로 남아있다.

 

 

(2) xinetd 방식으로 새로운 서비스 추가

① /etc/xinetd.d/notelnet 파일 생성

# vi /etc/xinetd.d/notelnet

service notelnet

{

        disable         = no

        type            = INTERNAL

        flags           = SENSOR

        protocol        = tcp

        port            = 23

        socket_type     = stream

        wait            = no

        user            = root

        log_type        = FILE /var/log/violators

        banner          = /etc/violation.banner

}

 

# vi /etc/violation.banner

 

Remember the new security policy!!!

*telnet* is no logger acceptable

Your IP address has been logged ....

 

 

② /etc/services 파일에 서비스 포트 등록

# vi /etc/services

[수정전]

telnet          23/tcp

[수정후]

telnet          23/tcp          notelnet

 

③ xinetd 방식의 서비스 등록

# chkconfig krb5-telnet off

# service xinetd restart

 

# chkconfig --add notelnet

# chkconfig notelnet on

# chkconfig --list notelnet

notelnet        on

 

# service xinetd restart

 

④ 확인

[TERM1] 모니터링 윈도우

# touch /var/log/violators

# tail -f /var/log/violators

14/1/23@18:45:07: FAIL: notelnet address from=127.0.0.1

 

[TERM2] 명령어 실행 윈도우

# telnet localhost

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

 

emember the new security policy!!!

*telnet* is no logger acceptable

Your IP address has been logged ....

 

Connection closed by foreign host.

 

 

 

[EX3] GRUB 복구에 대해서("grub-install" 명령어 실습)

① VMWare 환경의 경우 - 스냅샷 생성

         VMWare > VM > Snapshot > Take Snapshot

 

② GRUB 삭제

 

MBR(Master Boot Record)

+---------------+  ---

|               |   A

|               |   |  446 bytes(GRUB)       <---- # grub-install /dev/sda

|               |   |

|               |   V

+---------------+  ---

|               |   A  64 bytes(Partition)   <---- # fdisk /dev/sda

|               |   V

+---------------+  ---

|               |      2 bytes(Check sum)

+---------------+  ---

 

 

 

 

# dd if=/dev/zero of=/dev/sda bs=446 count=1

# reboot

 

-> 정상적으로 부팅이 되지 않는다......

 

③ CD-ROM(CD) 부팅

 

(ㄱ) CD1(CentOS 이미지 CD) 넣는다.

(ㄴ) 강제적으로 reboot

         ---------------------------------------------

         boot: linux rescue

         ..... 부팅 화면 .....

 

         "choose a language"        : OK

         "Keyboad Type"             : OK

         "Setup Networking"         : No

         "Rescue"                   : Continue

                                             : OK

         ---------------------------------------------

 

 

 

④ grub-install 명령어 수행 작업

# df -h

-> /mnt/sysimage 마운트 확인

 

 

 

# pwd

-> /

# ls 

# ls /mnt/sysimage

 

# fdisk -l /dev/sda

-> 이상이 없는 것을 확인(GRUB 메뉴만의 이상)

*표시로 부팅역역을 나타내고 있다.

 

# cd /mnt/sysimage

# chroot /mnt/sysimage

 

# chroot /mnt/sysimage (/ -> CD OS)

 

         ----------+

                   |

                   | (/mnt/sysimage -> /)

                   +----------------------

 

 

# pwd

/

# ls

-> 변경된 root 파티션 확인

# cat /boot/grub/grub.conf

-> 내용에는 이상이 없음(grub.conf 파일은 정상적으로 보임)

# grub-install /dev/sda

# exit

# exit

..... 정상적으로 부팅이 된다.....

 

 

 

 

[EX4] /etc/fstab 파일이 잘못되는 경우

① /etc/fstab 파일 백업

# cp /etc/fstab /etc/fstab.old

 

② /etc/fstab 파일 이상

# vi /etc/fstab

[수정전]

# LABEL=/testmount         /tsetmount        ext3     defaults          1 2

[수정후]

LABEL=/testmount           /tsetmount        ext3     defaults          1 2

 

# e2label /dev/sdb1 ""

# e2label /dev/sdb1

#

         

③ 재부팅

# reboot

 

④ 에러메세지 확인

 

⑤ 에러 제어

 

..... (중략) .....

Give root password for maintenance

(or type Control-D to continue): (root 암호 입력)

 

# mount -o remount /

# cp /etc/fstab.old /etc/fstab

or

# e2label /dev/sdb1

# e2label /dev/sdb1 /testmount

 

# exit

 

 

 

 

--------------------------------------------------------------------------------------------------------------------------------------------------

 

실습 내용에 대한 정리

 

(보안)GRUB 암호 설정하기

- Grub Menu 사용에 대한 제한 설정 - 암호 입력을 하고 사용하기

 

(관리)GRUB 복구 실습

- (GRUB phase 이상)GRUB 복구를 위해 gurb-install 명령어 사용하기

 

(관리)서비스 등록

- (Init Phase) 부팅시에 실행 될 수 있도록 서비스 등록

# vi /etc/init.d/new

# chkconfig --add new

 

(관리) /etc/fstab 파일의 이상이 발생하는 경우

- (Init Phase 이상)/etc/fstab파일의 이상을 복구하기

 

(정리) 핵심 포인트

 

서비스 on/off 시키는 툴의 종류

(GUI) # system-config-services (# serviceconf)

(TUI) # ntsysv (# setup)

(CLI) # chkconfig sshd on

서비스(EX: sshd) enable

(현재) # service sshd start

(부팅) # chkconfig sshd on