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 모드를 뜻한다.
이렇게 /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.#에 대응되는 서비스명 찾음
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권한으로 실행되는지 확인해야 한다. 이 파일이 일반 계정에게도 읽기 권한을 가지게 한다면 해당 서버에서 어떤 서비스를 제공하는지 + 어디에 위치하는지까지 가능하기 때문이다.