리눅스 환경에서의 서비스 운영 방식은 2가지로 분류할 수 있다.
(1.1) 서비스 운영 방식 - StandAlone
- 항시 떠있으면서 서비스하는 방식 (background process)
/etc/initd
에서 조회 가능- 서비스 자체를
사용하지 않아도 메모리, CPU를 점유
하고 있음- 서비스 요청이 많은 WEB, MAIL 등이 쓰는 방식
- 서비스 요청이 적음에도 이 방식으로 사용한다면 비효율적
StandAlone 서비스는 데몬을 구동시킬 수 있는 스크립트를 저장하는 /etc/init.d (= /etc/rc.d/init.d)
파일에서 그 목록을 확인할 수 있다.
bluetooth, httpd, network, apache 등의 서비스들이 이에 해당한다.
모든 서비스 파일들은 /etc/init.d 디렉터리의 실제 파일로 링크
되어 있고, 이 곳에는 서비스 구동을 위한 스크립트가 저장되어 있다.
따라서 아래와 같이 init.d
을 통해 서비스 제어가 가능하다.
# xinetd 서비스 시작
$ /etc/rc.d/init.d/xinetd start
# inetd 서비스 종료
$ /etc/rc.d/init.d/xinetd stop
# inetd 서비스 재시작
$ /etc/rc.d/initd./xinetd restart
Linux(SysV system)의 부팅 과정을 보면, 왜
/etc/init.d
에 StandAlone 서비스가 저장되어 있는지 알 수 있다
- Power On -> ROM BIOS에서 지정된 Boot Drive로 부팅 시작 -> Boot Sector 로드 -> GRUB 작동 -> Kernal 이미지 적재 -> File System 마운트 ->
시스템 초기화 프로그램 작동
-> Log On위의
시스템 초기화 프로그램 작동
과정은init
프로세스를 실행하여 시스템을 초기화하는 것이다./sbin/init
은 PID=1을 가지는 조상 프로세스로,/etc/inittab
파일을 읽어들인다. (CentOS 7 이후systemd
로 변경됨)
/etc/inittab
파일은 init 프로세스가 해야할 일을 기록한 파일로, id:runlevel:action:command의 형식을 갖는다. 현재 시스템에서 열어보면 runlevel=5인 것을 확인할 수 있는데, 이는 X윈도우 환경으로 실행된 multi-user 모드를 뜻한다.runlevel에 따른 서비스 실행 제어 with chkconfig
이렇게 /etc/inittab이 실행되면, 가장 처음으로
/etc/rc.sysinit
파일의 내용을 읽어온다. 이는 runlevel에 무관하게 부팅 과정에서 꼭 한 번 실행되는 파일이다. 그 후에는 명시된 runlevel에 따라 /etc/rcN.d 디렉터리의 명령을 따른다. 즉, 현재 시스템은 runlevel=5이므로/etc/rc5.d
가 실행되는 것이다. runlevel=3이라면 /etc/rc3.d가 실행될 것이다. runlevel에 따른 실행 서비스는chkconfig
를 통해 조회할 수 있다.
/etc/rcN.d
디렉터리 아래에는 해당 런레벨(N)에서 실행할 서비스가 정의되어 있다. 각 파일 명에는 K 또는 S가 붙어있는데 이는 Kill과 Start의 약어로, 서비스 죽이거나 시작하는 파일이라는 의미다.조금 더 자세히 살펴보면, 이 모든 파일이
링크 파일
이라는 것을 알 수 있다. 그리고 그 링크는/init.d
로 연결되어 있다. 이런 이유로 /etc/init.d 디렉터리에서 StanAlone 서비스 목록을 조회할 수 있는 것이다./etc/rcN.d 디렉터리 내 파일 실행이 끝나면, 마지막으로
/etc/rc.local (=/etc/rc.d/rc.local)
파일이 실행된다.StandAlone 서비스 관련된 과정만 정리하자면 다음과 같다.
- 부팅 과정 중 시스템 초기화 시 pid=1인
init
프로세스 실행- init은 할 일이 정의되어 있는
/etc/inittab
실행- /etc/inittab에 정의된 runlevel에 따라
/etc/rcN.d
실행- /etc/rcN.d 디렉터리 내
/etc/init.d
과 연결된 링크 파일 실행- (결론)
/etc/init.d
에는 StandAlone 방식의 서비스가 정의되어 있다.
(1.2) 서비스 운영 방식 - xinetd (inetd)
xinetd vs. inetd
- xinetd = inetd + extended (TCP Wrapper 등)
- TCP Wrapper = inetd/xinetd가 관리하는 포트로 서비스 요청이 들어왔을 때 /etc/hosts.{allow|deny} 파일을 기준으로 서비스 접근을 제어하는 메커니즘
- inetd -> xinetd로의 확장:
- 접속 성공/실패에 대한 logging
- 총 서버 수에 대한 제한
- 로그 파일 크기에 대한 제한 등
- inetd/xinetd 서비스 실행 과정:
- inetd/xinetd가 관리하는 well-known 포트를 기준으로 listening
- 서비스 요청이 들어오면 /etc/services 파일을 읽어 port.#에 대응되는 서비스명 찾음
TCP Wrapper
를 통해 서비스 접근 제어 후 허용/거부 판단- 허용된 요청에 대해 서비스 실행
xinetd = /etc/xinetd.conf (설정 파일) + /etc/xinetd.d (디렉터리) + /etc/rc.d/init.d/xinetd (StandAlone 데몬)
- 항시 떠있지 않고,
xinetd
에 서비스를 요청하여 서비스를 띄우는 방식 - CPU나 메모리를 점유하는 서비스가 아니므로 효율적
- Telnet, FTP 등 간헐적으로 실행되는 서비스
- 하지만
xinetd
를 거쳐야 하므로 서비스 요청이 많으면 느려질 수 있음 TCP Wrapper의 ACL 기능
을 사용할 수 있음
xinetd
는 인터넷 기반 연결을 관리하는 수퍼 서버 데몬으로 네트워크로 들어오는 서비스 요청을 듣고 그에 맞는 적절한 서비스를 실행한다. xinetd 자체는 StandAlone
방식으로 항시 대기, 요청 시 xientd
방식으로 서비스를 띄운다.
xinetd.conf
파일은 xinetd의 글로벌 환경을 설정할 수 있는 파일로, xinetd 방식을 사용하는 서비스들의 전체적인 환경을 제어한다.
xinetd.conf 파일이 제공하는 서비스 설정은 /etc/xinetd.d
에 저장된다.
각 서비스들의 설정은 xinetd가 서비스를 활성화할지 안할지에 대한 제어 변경을 포함한다. 각각의 서비스에 대한 개별 설정은 /etc/xinetd.d
안의 개별 설정 파일을 통해 제어하며, 전체적으로는 글로벌 설정인 /etc/xinetd.conf
파일을 따른다.
/etc/xinet.d
디렉터리는 xinetd 방식
으로 띄워지는 서비스 목록이 정의된 곳이다. 이 곳에서 주의할 점은, 모든 파일이 root
권한으로 실행되는지 확인해야 한다. 이 파일이 일반 계정에게도 읽기 권한을 가지게 한다면 해당 서버에서 어떤 서비스를 제공하는지 + 어디에 위치하는지까지 가능하기 때문이다.
'SYSTEM > UNIX|LINUX Server 보안' 카테고리의 다른 글
runlevel에 따른 서비스 실행 제어 with chkconfig (0) | 2021.03.25 |
---|---|
서비스 동작 방식 전환: StandAlone -> xinetd(inetd) (0) | 2021.03.25 |
[CentOS 6.6] 1. 계정관리 (선택 사항) (0) | 2021.03.05 |
[CentOS 6.6] 1. 계정관리 (필수 사항) (0) | 2021.03.05 |
UNIX 기초 (4) RPC 서비스 종류 (0) | 2021.03.05 |