데몬은 주기적이고 지속적인 서비스 요청을 처리하기 위해 계속 실행되는 프로세스로
백그라운드로 실행됩니다
리눅스에서 서버 역할의 프로그램이 데몬에 해당하며, 이름 뒤에 데몬을 뜻하는 d를 붙입니다
지속적인 서비스 요청을 처리하기 위해 데몬 프로세스를 실행하는 방식은 두가지가 있는데,
한가지는 standalone방식이고, 다른 한가지는 inetd방식입니다
보통 부팅 시에 실행되어 해당 프로세스가 메모리에 계속 상주하면서 클라이언트의
서비스 요청을 처리하는 방식입니다
웹, 메일 등과 같이 요청이 빈번한 서비스는 대부분 standalone 방식으로 동작합니다
inetd 방식은 프로세스가 메모리에 상주하는 것이 아니라
inetd 데몬이 관리하는 서비스에 대한 요청이 들어오면 관련 프로세스를 메모리에 상주시키고
관련 작업이 종료되면 프로세스를 종료합니다
데몬은 주기적/지속적인 서비스 요청을 처리하기 위한 프로세스로
보통 부팅시에 실행됩니다
CentOS 6 이전 버전에서는 System V계열의 init스크립트를 사용했습니다
부팅과 관련된 정보는 /etc/rc.d
디렉토리에 모아두고,
관련 데몬들을 init.d 디렉토리와 rc0.d ~ rc6.d
디렉토리를 이용해서 데몬의 실행을 조절하는 방식이어씁니다
CentOS 7 버전부터는 systemd 기반으로 동작하므로 systemctl 명령을 이용해 데몬을 제어합니다
리눅스 초창기 2.2 커널 버전시기에는 서비스 다양성과 메모리 효율적 관리를 위해
inetd(internet daemon) 데몬 방식을 사용했습니다
inetd 방식은 자주 사용하지 않는 서비스들을 메모리에 계속적으로 상주시키는 것이 아니라
사용자의 요청이 있을 때만 해당 데몬을 불러와 메모리에 상주시키고
사용자의 서비스 이용이 끝나면 해당 프로세스를 메모리에서 제거해서 효율성을 높이는 방식입니다
이렇게 다른 데몬을 관리하고 제어하는 역할을 수행하는
inetd를 슈퍼데몬(super-server daemon)이라고 하였습니다
inetd 방식은 단독 데몬방식은 standalone에 비해 처리속도는 느리지만,
메모리가 부족하거나 다양한 서비스를 제공하는 시스템에서는 효율적인 방식입니다
inetd는 네트워크 서비스를 etc/inetd.conf
에 설정해서 제어했습니다
그러나 관련 서비스의 사용 유무만 지정할 뿐이고, 접근 제어기능은 제공하지 않아
별도의 접근 제어 프로그램을 사용했는데, 이것이 바로 tcp wrapper입니다
리눅스 커널 2.4버전부터는 inetd의 역할을 확장하여 만든 xinetd 데몬이 해당 역할을 수행합니다
xinetd는 /etc/xinetd.conf
및 /etc/xinetd.d/
하위 파일을 설정파일로 사용합니다
CentOS 7 버전부터는 전반적인 시스템/메모리으로 인해, 데부분의 서비스를
단독 데몬으로 전환해서 xinetd를 사용하지 않는 추세입니다
또한 systemd가 xinetd 서비스의 핵심인 효율적인 메모리 관리를 socket을 통해 제공하여,
xinted의 사용 빈도가 줄어들고 있습니다
TCP Wrapper는 tcpd라는 데몬이 슈퍼 데몬인 inetd에 의해 수행되는 서비스들을
접근 및 제어하기 위해 등장했습니다
접속을 허락한 호스트만 접속할 수 있도록 하고 원하지 않는 호스트의 접근을 차단하는 역할을 담당합니다
초기에는 주로 TCP 연결을 기반으로 하고 inetd에 의해 관리되는 ftp 등을 감시하고 필터링했습니다
최근에는 일부 단독 데몬 접근제어도 가능합니다
TCP Wrapper는 접근이 허가된 호스트의 목록 파일인 /etc/hosts.allow
파일과
접근이 금지된 호스트 목록 파일인 /etc/hosts.deny
파일을 이용합니다
두 파일의 검색 순서는 /etc/hosts.allow
를 먼저 읽어서 등록된 호스트를 허가하고,
/etc/hosts.deny
에 설정된 호스트를 금지시킵니다
즉, /etc/hosts.allow
파일에 등록되면, /etc/hosts.deny
파일에 상관없이 허가됩니다