강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터2급강좌 : 데몬(daemon)

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터2급강좌 : 데몬(daemon)

 

 

데몬

네트워크, 프린터 등을 포함하는 리눅스상의 서비스는 데몬 프로그램을 중심으로 제공되고 있다.

 

 

 

 

서비스는 슈퍼 데몬이라는 것에 의해 관리되기도 한다.

 

 

 

 

 

 

데몬이란?

 

 

데몬(daemon)은 서버 프로세스로 시스템이 살아 있는 동안 항상 실행되는 백그라운드 프로세스 상태로 존재한다.

 

 

 

 

시스템에서 네트워크를 통해 특정한 서비스를 제공하기 위해 특정 포트를 열어두고 연결요청이 들어오길 기다리는 프로그램 또한 데몬이다.

 

 

 

 

예를 들어 FTP 서비스를 위한 데몬의 경우에는 21번 포트에 그리고 웹 서비스를 위한 데몬은 80번 포트에 귀를 기울이고(LISTENING) 있다.

 

 

 

 

 

 

그런데 Linux(Unix)는 다중 사용자 시스템으로서 하나의 연결은 하나의 포트를 통하는데 만약 한사람이 22번 포트를 사용해서 ssh를 사용하고 있다면 다른 사람은 어떻게 해야 할까?

 

 

인터넷 서비스 데몬은 대표 포트를 지키고 있다가 연결이 들어오면 새로운 프로세스(또는 Thread)를 가동시킨다.

 

 

 

 

자신은 계속 대표 포트를 지키고 있는 것이다.

 

 

 

 

, 데몬은 기본적으로 인터넷에 연결된 다른 컴퓨터(클라이언트)의 서비스 요청이 들어오면, 자식 프로세스에게 해당 연결을 넘겨주고 계속 같은 포트에 대해 연결 요청을 기다린다.

 

 

 

 

netstat로 확인해 보면 다음과 같다.

 

 

 

 

 

 

 

$ netstat -a

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 sulinux:ssh 211.181.178.79:1022 ESTABLISHED

tcp 0 0 *:ftp *:* LISTEN

tcp 0 0 *:www *:* LISTEN

tcp 0 0 *:1024 *:* LISTEN

tcp 0 0 *:ssh *:* LISTEN

tcp 0 0 *:auth *:* LISTEN

tcp 0 0 *:smtp *:* LISTEN

tcp 0 0 *:sunrpc *:* LISTEN

udp 0 0 *:xdmcp *:*

udp 0 0 *:sunrpc *:*

raw 0 0 *:icmp *:* 7

raw 0 0 *:tcp *:* 7

...하략...

 

 

 

 

 

 

 

위의 예제는 특정 서버에서 netstat -a 명령의 결과 중 Active Internet connections 부분만 잘라낸 것이다.

 

 

 

 

8번째 줄을 보면 ssh 데몬이 떠 있는 것이 보인다.

 

 

 

 

통상 ssh 데몬은 22번 포트를 사용한다.

 

 

 

 

그리고 4번째 줄을 보면 클라이언트 IP(211.181.178.79)와 포트(1022)에서 SSH 서버 IP(sulinux:호스트네임)와 포트(22)로 연결된 자식 프로세스를 볼 수 있다.

 

 

 

 

이 다중 연결은 TCP에서 목적지 IP, 목적지 Port, 발신지 IP, 발신지 Port를 통해 수신 세그먼트를 역다중화 하기에 가능한 것이다.

 

 

 

 

TCP는 목적지 포트만 보고 어떤 프로세스가 수신 세그먼트를 받아야 할지 판단 할 수 없다.

 

 

 

 

standalone 방식

 

웹 데몬과 같이 많이 사용되는 데몬이나 보통의 시스템에선 사용자에 대해 빠른 시작 속도를 보장해 주어야 할 필요가 있는 데몬들은 상기한 바와 같이 항상 대기하면서 사용자 연결을 기다리도록 하고 있는데, 이와 같은 방식을 standalone 방식이라고 한다.

 

 

 

 

그리고 나머지는 아래에 소개하는 (x)inetd 방식을 사용하여 소규모 서비스들을 통합하여 운영한다.

 

 

 

슈퍼 데몬 : (x)inetd 방식

 

인터넷 서비스가 많아지면서 ftp, telnet, www, smtp, talk, time, echo, pop3, imap, whois, domain 등 수없이 많은 서비스에 하나하나의 데몬을 할당하다 보니 시스템이 무거워지는 문제가 발생했다.

 

 

 

 

그렇지만 time, talk, pop3 등의 서비스는 사용자가 그리 많지도 않고, 해당 서비스에 빨리 접속해야 하는 것도 아니었기 때문에 시스템 자원의 낭비를 가져왔다.

 

이에 따라 슈퍼 데몬(super daemon)’이 탄생했다.

 

 

 

 

이것은 다른 데몬들, 예를 들어 talk, pop3, ftp 등을 관리하면서 이들의 대표 포트(talk517, pop3995, ftp21)로 오는 연결 요청을 해당 데몬에게 전달한다.

 

 

 

 

이렇게 되면 상대적으로 사용량이 적은 데몬들을 항시 대기시키지 않아도 되어 시스템 자원의 낭비를 어느 정도 막을 수 있게 된다.

 

 

 

 

이러한 데몬을 보통 inetd(Internet Daemon)이라고 부르는데, 현재 리눅스는 xinetdinetd 대신 사용한다.

 

 

 

 

 

 

xinetd에 대한 기본적인 설정은 /etc/xinetd.conf에 하지만, 서비스 데몬들은 /etc/ xinetd.d 디렉토리 아래에 개별 파일로 설정한다(/etc/xinetd.conf 파일에 이것들을 참조하도록 설정되어 있다).

 

 

 

 

데몬의 시작과 종료

 

 

데몬의 시작과 종료는 원래 해당 데몬의 실행 파일을 직접 실행하여 시작하고 해당 프로세스를 종료함에 의해서 종료할 수 있다.

 

 

 

 

그러나 이러한 작업은 너무 번거로운 작업인데 리눅스에서는 시작과 종료를 위한 스크립트를 /etc/init.d(또는 /etc/rc.d/init.d) 디렉토리 아래에 제공하고 있다.

 

 

 

 

그리고 이 디렉토리의 파일들은 각 런레벨에 대한 스크립트를 포함하는 디렉토리에 [K 또는 S][번호][스크립트명] 정도의 이름으로 링크된다.

 

 

 

 

이 디렉토리는 /etc/rc[런레벨번호].d(또는 /etc/rc.d/rc[런레벨번호].d)의 형식로 존재한다.

 

 

 

 

 

이 스크립트는 직접 실행하거나 service 명령으로 다음과 같이 실행할 수 있다.

 

 

 

 

 

# /etc/init.d/[서비스 데몬명] [명령]

 

 

 

 

 

또는

 

 

 

 

 

# service [서비스 데몬명] [명령]

 

 

 

 

 

서비스 데몬명에는 데몬의 이름이 들어가고 명령에는 각 스크립트에 정의된 명령이 들어간다.

 

 

 

 

이 명령에는 일반적으로 start, stop, restart 등이 있다(각각 시작, 정지, 재시작). 그리고 status, condrestart, reload 등의 옵션을 사용하기도 한다.

 

 

 

 

 

 

이 서비스 데몬의 자동 시작 여부는 각각 런레벨 디렉토리의 시작 스크립트 파일명을 수정해서 설정할 수도 있으나, 콘솔용 프로그램인 ntsysv 또는 X 윈도우용 프로그램인 시스템 서비스 설정프로그램을 이용하여 설정할 수 있다.

 

ed36d8ddf63920e81ddecfc30a55e46d_1676873191_6236.png
 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  95 명