inetd Daemon 의 이용

30
HANNAM UNIVERSITY Http://netwk.hannam.ac.kr inetd Daemon 의 의의 VLSI 석석 3 석석 석석석

description

inetd Daemon 의 이용. VLSI 석사 3 학기 고재현. 목차. 개요 inetd 의 소개 간단한 stream tcp 서버 구현 inetd 를 이용한 datagram 서버 요약. 개요. inetd Daemon 은 무엇인가 ? inetd 를 이용한 서버 자원의 활용 문제 해결 inetd 가 어떻게 서버 구축을 간단하게 하는가 ?. 모든 서버의 공통 단계. 소켓 생성 소켓을 well-known 주소와 바인드 클라이언트 연결을 listen 클라이언트 연결을 accept. - PowerPoint PPT Presentation

Transcript of inetd Daemon 의 이용

Page 1: inetd Daemon 의 이용

HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

inetd Daemon 의 이용

VLSI 석사 3 학기고재현

Page 2: inetd Daemon 의 이용

2HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

목차

• 개요

• inetd 의 소개

• 간단한 stream tcp 서버 구현

• inetd 를 이용한 datagram 서버

• 요약

Page 3: inetd Daemon 의 이용

3HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

개요

• inetd Daemon 은 무엇인가 ?

• inetd 를 이용한 서버 자원의 활용 문제 해결

• inetd 가 어떻게 서버 구축을 간단하게 하는가 ?

Page 4: inetd Daemon 의 이용

4HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

모든 서버의 공통 단계

• 소켓 생성

• 소켓을 well-known 주소와 바인드

• 클라이언트 연결을 listen

• 클라이언트 연결을 accept

Page 5: inetd Daemon 의 이용

5HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

inetd 의 소개

• /etc/rc.d/init.d/inet 스크립트에 의해 실행되는 daemon

• 다양하게 심볼릭 링크된 스크립트에서 실행– Red Hat Linux 의 경우– /etc/rc.d/rc3.d/S50inet – Run level 3 에서 – /etc/rc.d/rc3.d/S50inet – Run level 5 에서

• /etc/inetd.conf 파일– inetd daemon 이 처음 실행될 때 참조– 어떤 Internet 서비스가 listen 하는지– 요청이 왔을때 어떤 서버에 요청을 넘길지

Page 6: inetd Daemon 의 이용

6HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

/etc/inetd.conf 환경설정 파일

• 한 라인에 인터넷 서비스를 기술필드 번호 Description Example

1 인터넷 서비스 이름 telnet( 혹은 포트 번호 )

2 소켓 타입 stream or dgram

3 프로토콜 tcp or udpo

4 플래그 Nowait or wait

5 사용할 사용자 ID root or nobody

6 실행 경로명 /usr/sbin/in.telnetd

7 서버 인수 In.telnetd

Page 7: inetd Daemon 의 이용

7HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

/etc/inetd.conf 필드 – (1)

• 인터넷 서비스 이름 필드– /etc/services 파일에 있는 서비스 이름– /etc/services 파일 내용

– telnet : tcp 서비스이고 23 번 포트로 설정– inetd daemon 이 감시 할 포트 결정

# grep telnet /etc/servicestelnet 23 / tcprtelnet 107 / tcp # Remote Telnetrtelnet 107 / tcp

Page 8: inetd Daemon 의 이용

8HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

/etc/inetd.conf 필드 – (2)

• 소켓 타입 필드– stream 과 dgram 타입만 언급

– inetd(8) man page 에 소켓리스트 포함• raw, rdm, seqpacket 타입

– stream 타입 : SOCK_STREAM 과 대응• socket(2) 함수 호출에 사용

– Dgram 타입 : SOCK_DGRAM 과 대응

Page 9: inetd Daemon 의 이용

9HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

/etc/inetd.conf 필드 – (3)

• 프로토콜 필드– 소켓에서 사용할 프로토콜 선택

– /etc/protocols 파일에 있는 목록의 값

– 가장 일반적으로 사용되는 프로토콜• TCP 프로토콜을 위한 tcp

• UDP 프로토콜을 위한 udp ㅁ

Page 10: inetd Daemon 의 이용

10HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

/etc/inetd.conf 필드 – (4)

• 플래그 필드– datagram 에만 사용– 비 datagram 소켓에는 nowait 값을 설정– 두 가지 datagram-oriented 서버

• 읽은 UDP 패킷을 timeout 되거나 종료 (wait 값 설정 ) 될 때까지 보관하는 서버

• 하나의 패킷만 읽고 종료 (nowait 로 설정 ) 하는 서버

– datagram traffic 처리를 위해 사용

Page 11: inetd Daemon 의 이용

11HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

/etc/inetd.conf 필드 – (5)

• 사용자 ID 필드– inetd 는 root 에서 동작

– 다른 사용자 계정을 inetd daemon 의 식별자로 바꾸도록 지원

– 보안과 관련 최소의 권한으로 서버를 구동하기 위해 사용

Page 12: inetd Daemon 의 이용

12HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

/etc/inetd.conf 필드 – (6)

• 실행 경로 필드– Inetd 에게 실행 가능한 완전 경로명 표시– daemon 이 fork(2) 를 호출한 후 exec(2) 가

호출하는 파일

• 서버 인수 필드– Exec(2) 를 호출할 때 사용하는 명령어라인 인수– 인수는 argv[0] 부터 시작– 경로명과 다른 명령어 이름을 허용

• 실행파일이 이름에 따라 다른 특성 나타낼 때 사용

Page 13: inetd Daemon 의 이용

13HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

inetd 서버 설계 파라미터

• 소켓은 시작된 서버에 다음 파일 유닛 전달

– File unit 0 는 표준 입력을 위한 클라이언트 소켓

– File unit 1 는 표준 출력을 위한 클라이언트 소켓

– File unit 2 는 표준 에러를 위한 클라이언트 소켓

• 단일 소켓 함수 호출 없도록 설계

Page 14: inetd Daemon 의 이용

14HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

간단한 stream tcp 서버 구현

5: #include <stdio.h>6: #include <unistd.h>7: #include <stdlib.h>8: #include <errno.h>9: #include <string.h>10: #include <time.h>11: #include <sys/types.h>

소켓 헤더파일이 없다

Page 15: inetd Daemon 의 이용

15HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

간단한 stream tcp 서버 구현

30: int z;31: int n;32: time_t td; /* Current data&time */33: char dtbuf[128]; /* Date/Time Info */

소켓 주소 구조체필요없다 .

Page 16: inetd Daemon 의 이용

16HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

간단한 stream tcp 서버 구현

38: time(&td);39: n = (int) strftime(dtbuf,sizeof dtbuf,40: "%A %b %d %H:%M:%S %Y",41: localtime(&td));42:43: /*44: * Write result back to the client:45: */46: z = write(1,dtbuf,n);47: if(z ==-1)48: bail("write(2)");

소켓 호출이

필요없다 .

Page 17: inetd Daemon 의 이용

17HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

간단한 stream tcp 서버 구현

• Shell 을 이용한 테스트

• Port 13 을 이용한 daytime 서비스

$ make inetdservgcc –c –D_GNU_SOURCE –Wall –Wreturn –type inetdserv.cgcc inetdserv.o –o inetdserv$ ./inetdservTuesday Nov 02 16:29:45 1999

$ telnet 192.168.0.1 13Trying 192.168.0.1…Connected to 192.168.0.1.Escape character is ‘^]’.Tue Nov 2 16:31:09 1999Connection closed by foreign host.$

Page 18: inetd Daemon 의 이용

18HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

/etc/inetd.conf 파일 수정

• 실행파일 복사 및 실행 가능하도록 설정

• /etc/inetd.conf 파일 수정

$ cp inetdserv /tmp/inetdserv$ chmod a+rx /tmp/inetdserv

$ tail –1 /etc/inetd.conf9099 stream tcp nowait root /tmp/inetdserv inetdserv

Page 19: inetd Daemon 의 이용

19HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

/etc/inetd.conf 파일 수정

• 각 필드의 의미– 9099 : 사용할 포트– stream : tcp stream 소켓을 사용– tcp : tcp 스트림을 사용– nowait : tcp 스트림 엔트리가 무엇을 원하는가– root : 수행 권한– /tmp/inetdserv : 실행 경로명– Inetdserv : 명령어 인수

9099 stream tcp nowait root /tmp/inetdserv inetdserv

Page 20: inetd Daemon 의 이용

20HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

설정 변화를 inetd 에 통보

• root 계정에서 다음을 수행

• 의미– inetd daemon 의 process id 를 얻는다– Inetd 에 HUB 신호를 보내 환경

설정파일을 다시 읽도록 한다 . 프로세스는 종료하지 않는다 .

# ps -ax | grep inetd 314 ? S 0:00 inetd# kill -HUP 314#

Page 21: inetd Daemon 의 이용

21HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

• 설정 변경 확인

설정 변화를 inetd 에 통보

# lsof -iCOMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEportmap 238 root 3u inet 369 UDP *:sunrpcportmap 238 root 4u inet 370 UDP *:sunrpc (LISTEN)inetd 314 root 4u inet 474 UDP *:ftp (LISTEN)inetd 314 root 5u inet 475 UDP *:telnet (LISTEN)inetd 314 root 6u inet 476 UDP *:login (LISTEN)inetd 314 root 8u inet 477 UDP *:exec (LISTEN)inetd 314 root 10u inet 478 UDP *:auth (LISTEN)inetd 314 root 11u inet 1124 UDP *:9099 (LISTEN)inetd 314 root 12u inet 1163 UDP *:daytime (LISTEN)named 342 root 4u inet 531 UDP *:1024

TCP *:9099 로 표시된 부분이 새로 추가된 서버inetd 가 포트 9099 로 연결하기 위해 listening*:9099 는 어떤 포트로부터의 연결도 받는다는 의미

Page 22: inetd Daemon 의 이용

22HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

새로운 서비스 테스트• localhost 주소를 이용한 테스트

• 카드 인터페이스 주소 이용한 테스트

$ telnet localhost 9099Trying 127.0.0.1...Connected to localhostEscape character is '^]'.Tuesday Nov 2 17:10:37 1999Connection closed by foreign host.$

$ telnet 192.168.0.1 9099Trying 192.168.0.1...Connected to 192.168.0.1.Escape character is '^]'.Tuesday Nov 2 17:13:28 1999Connection closed by foreign host.$

Page 23: inetd Daemon 의 이용

23HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

새로운 서비스 테스트• daytime 서버와 비교

$ telnet 192.168.0.1 13Trying 192.168.0.1...Connect to 192.168.0.1.Escape character is '^]'.Tue Nov 2 17:16:57 1999Connection closed by foreign host.$

Page 24: inetd Daemon 의 이용

24HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

새로운 서비스 중단• /etc/inetd.conf 파일에서 추가된 내용 삭제

• root 계정에서 다음을 수행# ps -ax | grep inetd 314 ? S 0:00 inetd# kill -HUP 314#

Page 25: inetd Daemon 의 이용

25HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

inetd 를 이용한 datagram 서버

• UDP 서버에 적용된 inetd1. inetd 서버가 UDP 포트를 listen2. Inetd 가 select(2) 호출해 datagram 의

도착을 알린다 .3. Inetd 가 UDP 서버 시작을 위해 fork(2)

와 exec(2) 를 호출4. UDP 서버가 하나의 패킷을 읽기 위해 file

unit 0(stdin) 을 사용

Page 26: inetd Daemon 의 이용

26HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

inetd 를 이용한 datagram 서버

• UDP 서버의 선택

– 단계 4 에서 UDP 패킷을 처리한 후

• Exit( 종료 )

• 다른 UDP 패킷을 기다림 (timeout 후에 종료 )

Page 27: inetd Daemon 의 이용

27HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

Wait 와 nowait 의 이해

• nowait– 하나의 datagram 을 처리하고 종료할 때

– 새로운 datagram 도착하면 새 프로세스 시작

• wait – Inetd 가 시작시킨 서버 프로세스가 datagram 이 끝날 때까지 datagram 처리

– wait(2) 시스템 호출이 inetd 에게 서버 종료를 알릴 때까지 새로운 프로세스 시작하지 않음

Page 28: inetd Daemon 의 이용

28HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

Wait 와 nowait 의 이해

• 시스템적 기술1. Inetd 서버에 들어온 datagram 때문에 looping UDP 서버

프로세스 시작2. 다른 이벤트 기다림3. 첫번째 UDP datagram 처리 마침4. 표준 입력으로부터 다른 UDP datagram 읽기 시도5. 더 이상 도착한 datagram 이 없어 서버에서 timeout 발생하고 exit(3) 호출에 의해 프로세스 종료

6. inetd SIGCHLD 신호 발생7. inetd 서버가 프로세스 ID 와 서버 프로세스 종료 상태 결정8. wait(2) 가 반환하는 datagram 서버의 프로세스 ID 기록

서비스를 기다리는 프로세스가 없음을 표시

Page 29: inetd Daemon 의 이용

29HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

Wait 와 nowait 의 이해

• datagram 서비스 정의시 유의사항– inetd daemon 은 형성된 datagram 서버가

wait 또는 nowait 인수가 필요한지 알수 없다 .

– wait datagram 서버에 nowait 를 지정하면 불필요한 서버 프로세스들이 복제된다 .

– nowait datagram 서버에 wait 를 지정하면 서비스에 대한 실행력이 떨어진다 .

Page 30: inetd Daemon 의 이용

30HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr

요약