1. init 프로세스와 inittab 파일
pid 1 번인 init 프로세스는 사용자들을 위해서 시스템을 설정하게 된다.
pid 0 인 프로세스가 초기화된 커널의 바탕에서 나머지 작업을 수행한다.
- init 프로세스(/sbin/init)가 하는일
1) 파일시스템 구조 검사
2) 파일시스템 마운트(mount프로그램이 아닌 커널의 Virtual File System에서 마운트)
3) 서버에 데몬을 로드한다.
4) 사용자의 로그인을 기다린다.
5) 사용자가 로그인 하면, 사용자를 위한 Shell을 로드한다.
init 가 처음 시작해서 수행해야 할 작업들을 설정한 파일은 "/etc/inittab"
init 는 새로운 실행레벨에서 실행할 프로세스를 결정하기 위해서 항상 이 파일을 참조
inittab 파일은 시스템의 상태에 따라서 해당하는 런레벨에서 init 프로세스가 수행해야 할 일들을 서술해 놓은 파일이다.
init 프로그램은 inittab 파일을 참조하여 새로운 런레벨에서 실행할 수 없는 프로세스가 만약 지금 실행중이면 그 프로세스를 죽이고,
새로운 런레벨 에서 실행해야만 하는 프로세스 중 현재 실행되고 있지 않은 프로세스는 새로 실행을 시킨다.
2. runlevel (/etc/inittab)
- 런레벨은 선택된 그룹의 프로세스만 시스템에서 실행되도록 허락 하기 위해 만든 소프트웨어 설정
- init 프로그램은 BSD 스타일과 system V 스타일의 두종류가 존재한다. 레드햇계열에서는 system V 스타일을 사용한다.
각 런레벨(ren level) 에 대한 대략적인 내용이 명시되어 있다.
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this) //시스템을 종료
# 1 - Single user mode //싱글 유저 모드에서 사용되는 레벨, 프롬프트에서 "linux single" 입력시 런레벨 1에서 시작
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking) //NFS 를 지원하지 않는 다중 사용자 모드를 정의
# 3 - Full multiuser mode //네트워킹을 지원하는 다중 사용자 모드
# 4 - unused //사용자 정의 있는 런레벨, 원하는 데몬이나 서비스를 /etc/rc.d/rc4.d 내에 위치
# 5 - X11 // X를 실행시키기 위한 런레벨
# 6 - reboot (Do NOT set initdefault to this) //시스템을 재부팅시키도록 정의된 런레벨
............
id:3:initdefault: //id:run-levels:action:process, 디폴트런레벨, 0 또는 6 옵션지정에 의한 무한부팅 시 lilo에 옵션을 주어 변경
# 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
............
# 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
............
3. man inittab
id:run-levels:action:process
id : label, 식별자, 최대 4자리, "예) tty1 > 1:2345:respawn:/sbin/mingetty tty1"
run-levels : 런레벨
action : 어떤방식으로 실행할지 설정
process : 프로세스의 실행파일의 경로와 프로세스에 넘겨줄 인수, 이 필드에 `+' 문자가 제일 앞에 오면, init는 그 처리과정에서 utmp, wtmp 처리를 하지 않게 한다. `+' 문자는 gettys에서 스스로 utmp/wtmp를 처리할 경우 필요하다.
※ action의 종류
wait : 프로세스를 실행하고, 다음 줄의 엔트리로 가지 말고, 실행한 프로세스가 종료할때까지 대기한다.
respawn : 프로세스를 실행하고, 그 프로세스가 죽게 되면, 다시 실행시키라는 의미, 주로 getty 등의 프로세스
initdefault : 디폴트 런레벨을 지정, 런레벨 3을 디폴트 런레벨로 지정한다는 의미즉, 시스템의부트 프로세스가 종료된 후에 진입할 런레벨을 가리키는 엔트리
initdefault 사용 시 process 필드는 아무런 의미가 없게 된다.
off : 아무것도 하지 말라는 뜻
once : 이미 실행되고 있는 프로세스라면 실행하지 말고, 실행되고 있지 않으면 한번만 실행, wait처럼 대기하지 않는다.boot : 시스템 부팅시에 실행되어야 할 프로세스를 가리킨다. run-levels 필드는 아무런 의미가 없게 된다.
bootwait : 프로세스가 시스템 부팅시에 실행되도록 지정한다. (예: /etc/rc)
sysinit : 프로세스가 시스템 부트시에 실행, 이 엔트리는 다른 boot 나 bootwait 엔트리들이 실행되기 전에 실행되며,run-levels 필드는 무시한다.
powerwait : init 프로세스가 SIGPWR 시그널을 받으면 실행되는 프로세스SIGPWR 시그널은 전원과 관련해서 무엇인가 문제가 있음을 가리키는 시그널이며,
init 는 프로세스가 종료되기까지 대기한다.
powerfail : powerwait 항목과 비슷하지만 프로세스가 종료되기까지 대기하지 않고 바로 실행한다는 점에서 다르다.
powerokwait : 이 엔트리도 init 가 SIGPWR 시그널을 받으면 실행될 프로세스를 지정하지만,이 엔트리에서 지정된 프로세스는 /etc/powerstatus 파일에 OK 라는 단어가 있을 때만 실행된다.
즉, 전원이 다시 돌아왔을 때만 실행ctrlaltdel : init 가 SIGINT 시그널을 받게 되면 실행할 프로세스를 지정한다.
즉, 시스템 콘솔에서 CTRL-ALT-DEL 키를 눌렀을 때 이 엔트리에서 지정한 프로세스가 실행된다.
kbrequest : 이 엔트리에서 지정하는 프로세스는 init가 키보드 핸들러로부터콘솔에서 특수키 조합이 눌려졌다는 시그널을 받으면 실행되는 프로세스이다. 키맵과 함께 쓰일 수 있다.
'Analysis > Linux' 카테고리의 다른 글
GDB 사용 (0) | 2016.06.23 |
---|---|
리눅스 로그 분석 (0) | 2016.06.21 |
리눅스 시스템 정보 체크 (0) | 2016.06.21 |
grep (0) | 2016.06.21 |
SetUID를 이용한 백도어 제작 (0) | 2016.06.21 |