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로 지정된 (wait) : 지정한 런레벨이 되면 그 프로세스가 실행되고, init은 그 프로세스가 종료되기를 기 (ctrlaltdel) : init가 SIGINT 시그널을 받았을 때 그 프로세스가 실행된다. SIGINT는 시 (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*
|
# 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*
|
(실무 예) 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
'Learning > └Essential & Admin' 카테고리의 다른 글
Linux_ServerAdmin (11) 스케줄링 관리 (0) | 2016.11.04 |
---|---|
Linux_ServerAdmin (10) 사용자 그룹관리 (0) | 2016.11.04 |
Linux_ServerAdmin (8)Software관리 (0) | 2016.11.03 |
Linux_ServerAdmin (7)SWAP관리 (0) | 2016.11.03 |