티스토리 뷰

데몬

데몬(daemon)이란 시스템에 관련된 작업을 하는 후위 프로세스(background process)를 말합니다. 대부분의 데몬들은 시스템이 부팅되면서 시작되고 데몬들에는 우리가 자주 듣고 접하는 telnet, ftp, http, sendmail 등이 있습니다. 대부분의 데몬은 시스템에 관련된 작업을 하게 되는데, 서비스 요청이 없을 때는 후위 프로세스로서 유휴(idle)상태에 들어가 있게 되어 시스템의 CPU를 차지하지 않지만 메모리와 기타 자원을 상당수 차지하게 됩니다. 그렇기에 많은 데몬을 띄울려면 그 만큼 시스템에 자원을 많이 가지고 있어야 합니다.

 

 

인터넷 슈퍼 데몬(Internet Super Daemon)

xinetd(커널 2.4 이전 버전은 inetd, xinetd는 eXtended Internet Services daemon의 약자입니다. 커널 버전 2.4 부터는 개선된 inetd에 TCP Wrapper의 접근 제어 기능까지 포함하여 xinetd 데몬이 사용됩니다.)는 인터넷 슈퍼 데몬(Internet Super Daemon)을 의미하는 것으로서, SENDMAIL, HTTPD 등과 같이 리눅스 시스템에서 실행되는 데몬의 일종입니다. 그런데 이를 다른 데몬들과 달리 슈퍼 데몬이라고 부르는데에는 특별한 이유가 있습니다. 슈퍼 데몬은 리눅스 서버에서 서비스 되는 다른 여러가지 데몬들을 제어하면서 각각의 서비스들의 연결을 담당하고 있기 때문입니다. 예를 들어 xinetd 슈퍼 데몬에 의해 제어되는 서비스중에 telnet(하나의 데몬)이라는 서비스가 있다고 하자. 누군가가 telnet서비스에 접속을 시도하면 바로 telnet으로 연결이 되는것이 아니라 슈퍼데몬인 xinetd에 의해 허가된 사용자인가를 검사받은 후에 xinetd의 telnet설정파일(/etc/xinitd.d/telnet)에 정의 되어있는 telnet서비스 데몬과 연결되어 비로소 사용자는 telnet을 이용하게 되는 것입니다. 이처럼 리눅스의 데몬중에는 수퍼데몬에 의해 제어가 되는 데몬에는 telnet 이외에 ftp, finger, login, shell 등이 있습니다. 현재 inetd는 잘 쓰이지 않는다고 합니다.

 

 

 

/etc/xinetd.conf

 

xinetd는 네트워크에 들어오는 요청을 듣고, 거기에 맞는 적절한 서비스를 실행시킵니다. 요청들은 식별자로서 포트번호를 사용하여 만들어지며, 보통 요청을 다루는 다른 데몬을 실행시킵니다. xinetd의 기본 설정파일은 /etc/xinetd.conf이며, 이것이 제공하는 서비스들의 설정은 /etc/xinetd.d 디렉토리에 저장됩니다.(디렉토리 하위에 서비스 명으로 된 설정파일을 만들어 서비스별로 설정할 수 있습니다. 서비스명은 /etc/services와 동일하게 맞추고 .conf는 붙이지 않습니다.) 각 서비스들은 보통 xinetd가 서비스를 활성화 할지 안 할지에 대한 제어 변경을 포함합니다. 데몬의 위치는 /usr/sbin/inetd에 위치합니다.

 

구성 : /etc/xinetd.conf

          /etc/xinetd.d(디렉토리)

          /etc/rc.d/init.d/xinetd(데몬)

 

/etc/xinet.d 디렉토리

 

/etc/xinetd.d/time

예를들어 /etc/xinetd.d/time server를 보겠습니다. 두가지 서비스 버전이 있습니다. 하나는 TCP이고 다른 하나는 UDP입니다. 서비스의 종류와 예정된 사용법은 필요한 핵심 프로토콜을 결정합니다. disable 옵션은 서비스를 실행할 것인가 아닌가를 결정합니다. 대부분의 기본상태는 yes입니다. 서비스를 활성화 하기 위해서는 no로 바꾸어야 합니다. 다음으로는 서비스들의 type이 있습니다. 타입은 서비스가 xinetd에 의해 제공되는 경우에는 INTERNAL, 원격 프로시저 호출(RPC)에 기반한다면 RPC이고 일반적으로 /etc/rpc 파일에 목록화 되어 있으며, 서비스가 /etc/servies /etc/rpc 파일에 모두 없는 경우에는 UNLISTED입니다. id는 서비스의 고유한 식별자 입니다. soket_type은 서비스를 통한 데이터 전송 방식을 결정합니다. stream, dgram, raw 총 세 종류가 있습니다. 표준 프로토콜을 기반으로 하지 않는 서비스를 설정할 떄는 마지막 방식이 유용합니다. user 옵션을 통해 실행중인 서비스의 소유자인 사용자를 고르는게 가능해집니다. 보안 관련 이슈 떄문에 root 사용자를 고르지 않는게 추천됩니다.(이를 이용한 backdoor 공격 방법은 블로그에 있는 리눅스 보안을 참고하시기 바랍니다.). wait가 yes라면 xinetd는 연결이 된 경우에 서비스를 위한 요청을 받지 않습니다. 그래서 연결의 숫자는 하나가 됩니다. 이것은 한번에 단지 한 연결만 설정하기 원할 때 사용됩니다. server는 서비스가 연결되었을때 실행할 프로그램입니다.

 

 

 

 

데몬의 실행모드(standalone과 xinetd)

데몬들의 실행모드에는 크게 두가지가 있습니다. 하나는 독립적으로 실행되는 standalone모드이고, 또 다른 하나는 수퍼 데몬(xinetd)에 의해 관리되는 모드입니다.

 

standalone 모드로 실행되는 데몬은 독립적으로 실행되며 항상 메모리에 상주하여 서비스 요청이 있을때 언제든 바로 응답합니다. 즉, 빠른 응답속도를 요구하는 경우에는 이 모드를 사용합니다. 단점은 메모리에 항상 상주해 있으므로 메모리 점유로 인한 서버 부하를 준다는 것입니다. 슈퍼 데몬도 standalone모드로 실행이됩니다.

 

xinetd모드로 실행이 되는 데몬은 수퍼 데몬에 의해 관리가 되며, 필요한 경우에만 메모리로 적재되어 실행이 되어 응답합니다. 즉, 빠른 응답속도를 요구하지 않는 경우에 이 모드를 사용합니다. 단점은 응답속도가 standalone 보다 느리나, 서버 부하를 상대적으로 줄일 수 있습니다.

 

반응형