본문 바로가기
linux

데몬(demon) 슈퍼데몬 (xinnetd)

by 상레알 2010. 12. 8.

원본 : http://ystory.kr/6
원본 :
http://yesyo.com/mintbbs/bbs/board.php?bo_table=linux&wr_id=281&sfl=wr_subject&stx=&sst=wr_hit&sod=asc&sop=and&page=8                                                                     
1. 데몬 (demon)

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

1.1 데몬의 종류

데몬에는 sendmail 이나 아파치 처럼 단독으로 실행되는 것들이 있고 데몬들을 (여러가지 서비스 등을) 한꺼번에 관리하는 슈퍼 데몬이 있다.

1.2 데몬의 실행과 중지

단독 데몬들은

# service deamonname start | stop

을 실행함으로서 실행과 중지를 할 수 있다.

ex) # service network start | stop | restart

이 데몬은 /etc/rc.d/init.d 디렉토리에 스크립트 파일ㅇ르 가지고 있다.
스크립트 파일안의 내용을 수정하여도 된다.

부팅시 자동실행되는 데몬을 관리하기 위해서는 ntsys 명령어를 쳐서 쉽게 관리가 가능하다.

# ntsysv    /// 현재 레벨의 데몬 관리 지정

# ntsysv --level 3  // 3번 레벨의 데몬 관리 지정


2.슈퍼 데몬 ( xinettd)

xinetd - Extended Internet Services daemon

데몬 중에 슈퍼 데몬(xinetd)이라는 것이 있다. xinetd는 inetd 의 문제점들을 보완하고 기능이 추가된 확장판이라고 할 수 있으며, 관련 파일 구성이나 다양한 옵션을 융통성 있게 제공하고 있어 접근 설정이나 기타 설정이 쉽게 되어 있다. xinetd(커널 2.4버전 이전은 inetd, xinetd는 extended Internet Services daemon의 약자이다.)는 인터넷 슈퍼 데몬(Internet Super Daemon)을 의미하는 것으로서, sendmail, httpd 등과 같이 리눅스 시스템에서 실행되는 데몬의 일종이다. 그런데 이를 다른 데몬들과 달리 슈퍼 데몬이라고 부르는데 특별한 이유가 있다. 이 슈퍼데몬은 리눅스 서버에서 서비스되는 다른 여러가지 데몬들을 제어하면서 각각의 서비스들의 연결을 담당하고 있기 때문이다. 예를들어 xinetd 슈퍼 데몬에 의해 제어되는 서비스중에 telnet(하나의 데몬)이라는 서비스가 잇다고 하자. 누군가 telnet 서비스에 접속으 시도하면 바로 telnet으로 연결이 되는 것이 아니라 슈퍼데몬인 xinetd에 의해 허가된 사용인가를 검사받은 후에 xinetd의 telnet 설정파일 (/etc/xinetd.d/telnet)에 정의되어 있는 telnet서비스 데몬과 연결되어 비로소 사용자는 telnet을 이용하게 되는 것이다. 이처럼 리눅스의 데몬중에는 슈퍼 데몬에 의해 제어가 되는 데몬에는 telnet, ftp, finger, login, shell등이 있다.

2.1 슈퍼 데몬의 기능

1) 접근 제어
- configure 시 libwrap 옵션을 사용하면 tcp_)wrapper에서 사용하는 hosts.allow,deny 파일을 사용하여 접근제한을 할 수 있다. 물론 옵션을 지정하지 않고는 기존 inetd.conf에서 처럼 ㅅㄹ정하여 tcpd의 기능을 사용할 수도 있다.
- 시간에 근거한 접근 제한을 걸수 있다.

2) Dos 공격 방지
-연결 요청에 대한 제한을 둘 수가 있어 port bomb에 적당한 응답을 할 수 있다.
- 로그 파일으 ㅣ사이즈 제한을 둘 수 있어 디스크가 full되는 것을 막을 수 있다.

3) 확장된 로깅기능

- 서비스별로 syslog의 설정을 할 수 있다.
- 접속 시작시간과 종료시간ㅇ르 기록할 수 있다. 따라서 사용자가 서비스를 이요한 시간을 체크할 수 있다.
- 접속에 실패한 기록에 대해 좀더 마는 로그를 기록할 수 있다.

4) 원격 호스트로의 서비스 전달

- TCP stream을 다른 호스트로 전달하는 기능. NAT와 같이 외부에서 접근할 수 없는 경우 xinetd를 이용하여 내부의 서버도 다른 호스트에게 서비스를 할수 있다.

5) IPv6 지원

6) 사용자별 서비스 차등 적용

- 사용자의 연결상태와는상관없이 매번 다른 배너를 보여줄 수 있다.


2.2 설치 및 설정

1) 설치
xinetd의 설치는 xinet의 홈페이지에서 소스나 rpm화일을 모두 구할수 있으며 ./configure, make, make install의 일반적인 순서를 따른다. 컴파일시 세가지의 옵션을 선택하여 있으며 옵션에 따른 기능선택을 하도록 한다. 옵션에 대한 설명은 아래와 같다

╀ --with-libwrap
: xinetd의 컴파일시 libwrap을 지원하도록 컴파일 할수있으며, 이때는 /etc/hosts.allow와 hosts.deny 파일을 참조하여 tcpd의 기능을 그대로 사용할수 있다. (예1)
(물론 libwrap 옵션을 선택하지 않고 tcpd를 사용하여 일반적인 inetd.conf에서 설정했던것처럼 할수도 있다.)

╀ --with-loadavg
: 서버의 최대실행 설정옵션을 조정한다. 서버에 오버로드가 걸렸을 때 이 옵션을 이용하여 일부 서비스를 중단할수 있다. 이 옵션은 몇몇 종류의 DoS공격을 막는데 가장 중요한 옵션이다.

╀ --with-inet6
: IPV6를 이용하고자 한다면 이 옵션을 사용할수 있다. IPv4와 IPv6의 연결은 제어할 수 있지만 IPv4 주소들은 IPv6의 형식으로 바뀌어진다.

xinted를 시작하기전에 inetd를 멈출 필요는 없다. 하지만, 그렇게 하지않는 것은 양쪽 데몬의 동작에 문제가 있을수도 있으니 가능한 어느 한쪽을 정지한후 실행하도록 해야한다.

2) 설정
xinted의 설정내용은 크게 default와 service에 대한 내용으로 구분된다

redhat 7.0에서는 default부분은 /etc/xinetd.conf에, service에 대한 내용들은 xinetd.conf에 따로 설정하여 /etc/xinetd.d 디렉토리에 서비스별로 설정화일을 준비해 놓고 있다.

몰론 default와 service에 대한 설정은 xinetd.conf에 같이 기재할수 있으며 이는 시스템 관리자의 취향에 따라 사용할수 있다.

아래는 redhat 7.0에서 기본적으로 설정되는 xinetd.conf 파일의 내용이다.

ex 1) xinetd.conf의 설정예

[root@violet93 /root]# more /etc/xinetd.conf
# Simple configuration file for xinetd
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST RECORD
}
includedir /etc/xinetd.d

또, 기존의 inetd.conf의 내용을 변환하는 유틸리티 또한 지원하고 있는데 itox와 xconv.pl을 사용하여 작업을 할수있지만 정확한 변환내용을 생성하지는 않고 있어 가능한 세부설정은 직접 작업하는 것을 권장한다. itox 프로그램은 아직 유지되고는 있지만 더 이상 개발은 되지않고 있으며, xcobv.pl은 결과물을 다시 수정되어야 하는등의 문제가 있다.

ex 2) inetd.conf를 xinetd.conf로 변환

/usr/sbin/xconv.pl < /etc/inetd.conf > /tmp/xinetd.conf

ex) telnet 서비스에서 기존의 tcp_wrapper를 사용할 경우

service telnet
{
flags = REUSE NAMEINARGS
protocol = tcp
socket_type = stream
wait = no
user = telnetd
server = /usr/sbin/tcpd
server_args = /usr/sbin/in.telnetd
}

'linux' 카테고리의 다른 글

rpm 파일을 deb 로 변환하여 설치하기  (0) 2011.04.11
make: warning: Clock skew detected. Your build may be incomplete.  (0) 2011.02.25
Make File 만들기  (0) 2011.02.17
/etc/shadow ,존더 리퍼 [ John the Ripper ]  (0) 2010.12.15
레이스 컨디션  (0) 2010.12.13
스레드  (0) 2010.08.17
입출력 재지정  (0) 2010.08.17
좀비 프로세스  (0) 2010.08.17
프로세스 이미지 복제  (0) 2010.08.15
프로세스 이미지 대체하기  (0) 2010.08.15