Inetd Daemon의 이용 VLSI 석사 3학기 고재현.

Slides:



Advertisements
Similar presentations
7 장. 원격지에서 리눅스서버를 관리하자. 텔넷서버를 설치 / 운영한다. SSH 서버를 운영한다. VNC 서버를 설치 / 운영한다.
Advertisements

HTTPS Packet Capture Tutorial

정보 보안 개론과 실습 네트워크 해킹과 보안 3부 해킹 전 정보 획득 Chapter 10. 목록화.
한남대학교 컴퓨터공학과 소프트웨어공학실험실 최 용 준
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Chapter 6. 리눅스 백도어 황 선 환.
운영체제 설정과 취약점 인터넷공학/컴퓨터공학 이수백/허성욱.
Network Lab. Young-Chul Hwang
TCP Client/Server Program
Department of Computer Science and Engineering
Cross Compiler를이용한 커널 컴파일 및 포팅
컴퓨터 프로그래밍 기초 [Final] 기말고사
PHP입문 Izayoi 김조흔.
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
Load Balancing L4와 L7은 어떻게 동작할까?.
Chapter 09 솔라리스 서비스 관리(SMF)
16장.네트워크 보안 프로그래밍 소프트웨어공학연구실 최 상 수
호스트이름과 네트워크이름 찾기 (Hostname and Network Name Lookups)
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
네트워킹 CHAPTER 13 Section 1 네트워킹의 개요와 java.net 패키지 Section 2 인터넷 주소와 URL
Department of Computer Engineering
Department of Computer Engineering
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
Linux서버를 이용한 채팅프로그램 지도 교수님 : 이형원 교수님 이 름 : 이 은 영 학 번 :
12장 파이프.
07. 디바이스 드라이버의 초기화와 종료 김진홍
Chapter 06 프로세스와 예약작업 관리 Solaris 1. 프로세스 관리
Linux Socket Programming - Connection-Oriented Protocols for Clients –
FTP 프로그램 채계화 박재은 박수민.
Homework 6… 12월 2일(금) 11:59pm까지 자신의 이름과 학번을 출력해 주는 유닉스/리눅스 네트워크 소켓 서버 프로그램 과 클라이언트 프로그램 을 작성해 보세요 참고 (실습1) Hello 프로그램 helloserver.c helloclient.c 컴파일.
Chapter 8 연결형 프로토콜 서버 발표자 : SE Lab 황 성 하
Chapter 06. UDP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
모바일 자바 프로그래밍 JDBC / WAP Ps lab 오민경.
01. DHCP의 개념 조직의 네트워크에 연결되어 있는 워크스테이션의 TCP/IP 설정을 자동화하기 위한 표준 프로토콜
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
Department of Computer Science and Engineering
Socket Address Structure and Byte Ordering Functions
Socket Address Structure and Byte Ordering Functions
Cross Compiler를이용한 커널 컴파일 및 포팅
rc script, 특정 port로 telnet
인터넷응용프로그래밍 JavaScript(Intro).
Device Driver 임베디드 시스템 I.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
24장. 파일 입출력.
ACL(Access Control List)
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
오라클 넷(Oracle Net)의 개념 및 구성
웹디자인
CGI란 무엇인가? CGI(Common Gateway Interface)의 정의
Department of Computer Engineering
( Windows Service Application Debugging )
01. DHCP의 개념 조직의 네트워크에 연결되어 있는 워크스테이션의 TCP/IP 설정을 자동화하기 위한 표준 프로토콜
01. 개요 네트워크에 있는 컴퓨터와 그룹에 대한 NetBIOS 이름에 대응되는 IP 주소를 찾아주는 서비스
웹(WWW).
STS 에서 웹 서버 설치 방법.
시스템 인터페이스 Lab#5 쉡 실습.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
MIDP 네트워크 프로그래밍 ps lab 김윤경.
다자간 채팅프로그램 김형도 허영민
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
Network Lab. Young-Chul Hwang
숙제 작성 및 제출 과정 김진하 2008/03/14.
운영체제보안 SELinux 실습 박민재
Presentation transcript:

inetd Daemon의 이용 VLSI 석사 3학기 고재현

목차 개요 inetd의 소개 간단한 stream tcp 서버 구현 inetd를 이용한 datagram 서버 요약

개요 inetd Daemon은 무엇인가? inetd를 이용한 서버 자원의 활용 문제 해결

모든 서버의 공통 단계 소켓 생성 소켓을 well-known 주소와 바인드 클라이언트 연결을 listen 클라이언트 연결을 accept

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하는지 요청이 왔을때 어떤 서버에 요청을 넘길지

/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

/etc/inetd.conf 필드 – (1) 인터넷 서비스 이름 필드 /etc/services 파일에 있는 서비스 이름 telnet : tcp 서비스이고 23번 포트로 설정 inetd daemon이 감시 할 포트 결정 # grep telnet /etc/services telnet 23 / tcp rtelnet 107 / tcp # Remote Telnet rtelnet 107 / tcp

/etc/inetd.conf 필드 – (2) 소켓 타입 필드 stream과 dgram 타입만 언급 inetd(8) man page에 소켓리스트 포함 raw, rdm, seqpacket 타입 stream 타입 : SOCK_STREAM과 대응 socket(2) 함수 호출에 사용 Dgram 타입 : SOCK_DGRAM과 대응

/etc/inetd.conf 필드 – (3) 프로토콜 필드 소켓에서 사용할 프로토콜 선택 /etc/protocols 파일에 있는 목록의 값 가장 일반적으로 사용되는 프로토콜 TCP 프로토콜을 위한 tcp UDP 프로토콜을 위한 udpㅁ

/etc/inetd.conf 필드 – (4) 플래그 필드 datagram에만 사용 비 datagram 소켓에는 nowait 값을 설정 두 가지 datagram-oriented 서버 읽은 UDP 패킷을 timeout 되거나 종료(wait 값 설정)될 때까지 보관하는 서버 하나의 패킷만 읽고 종료(nowait로 설정)하는 서버 datagram traffic 처리를 위해 사용

/etc/inetd.conf 필드 – (5) 사용자 ID 필드 inetd는 root에서 동작 다른 사용자 계정을 inetd daemon의 식별자로 바꾸도록 지원 보안과 관련 최소의 권한으로 서버를 구동하기 위해 사용

/etc/inetd.conf 필드 – (6) 실행 경로 필드 서버 인수 필드 Inetd에게 실행 가능한 완전 경로명 표시 daemon이 fork(2)를 호출한 후 exec(2)가 호출하는 파일 서버 인수 필드 Exec(2)를 호출할 때 사용하는 명령어라인 인수 인수는 argv[0]부터 시작 경로명과 다른 명령어 이름을 허용 실행파일이 이름에 따라 다른 특성 나타낼 때 사용

inetd 서버 설계 파라미터 소켓은 시작된 서버에 다음 파일 유닛 전달 단일 소켓 함수 호출 없도록 설계 File unit 0는 표준 입력을 위한 클라이언트 소켓 File unit 1는 표준 출력을 위한 클라이언트 소켓 File unit 2는 표준 에러를 위한 클라이언트 소켓 단일 소켓 함수 호출 없도록 설계

간단한 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> 소켓 헤더파일이 없다

간단한 stream tcp 서버 구현 30: int z; 31: int n; 32: time_t td; /* Current data&time */ 33: char dtbuf[128]; /* Date/Time Info */ 소켓 주소 구조체 필요없다.

간단한 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)"); 소켓 호출이 필요없다.

간단한 stream tcp 서버 구현 Shell을 이용한 테스트 Port 13을 이용한 daytime 서비스 $ make inetdserv gcc –c –D_GNU_SOURCE –Wall –Wreturn –type inetdserv.c gcc inetdserv.o –o inetdserv $ ./inetdserv Tuesday Nov 02 16:29:45 1999 $ telnet 192.168.0.1 13 Trying 192.168.0.1… Connected to 192.168.0.1. Escape character is ‘^]’. Tue Nov 2 16:31:09 1999 Connection closed by foreign host. $

/etc/inetd.conf 파일 수정 실행파일 복사 및 실행 가능하도록 설정 /etc/inetd.conf 파일 수정 $ cp inetdserv /tmp/inetdserv $ chmod a+rx /tmp/inetdserv $ tail –1 /etc/inetd.conf 9099 stream tcp nowait root /tmp/inetdserv inetdserv

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

설정 변화를 inetd에 통보 root 계정에서 다음을 수행 의미 inetd daemon의 process id를 얻는다 Inetd에 HUB 신호를 보내 환경 설정파일을 다시 읽도록 한다. 프로세스는 종료하지 않는다. # ps -ax | grep inetd 314 ? S 0:00 inetd # kill -HUP 314 #

설정 변화를 inetd에 통보 설정 변경 확인 TCP *:9099로 표시된 부분이 새로 추가된 서버 # lsof -i COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME portmap 238 root 3u inet 369 UDP *:sunrpc portmap 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는 어떤 포트로부터의 연결도 받는다는 의미

새로운 서비스 테스트 localhost 주소를 이용한 테스트 카드 인터페이스 주소 이용한 테스트 $ telnet localhost 9099 Trying 127.0.0.1... Connected to localhost Escape character is '^]'. Tuesday Nov 2 17:10:37 1999 Connection closed by foreign host. $ $ telnet 192.168.0.1 9099 Trying 192.168.0.1... Connected to 192.168.0.1. Escape character is '^]'. Tuesday Nov 2 17:13:28 1999 Connection closed by foreign host. $

새로운 서비스 테스트 daytime 서버와 비교 $ telnet 192.168.0.1 13 Trying 192.168.0.1... Connect to 192.168.0.1. Escape character is '^]'. Tue Nov 2 17:16:57 1999 Connection closed by foreign host. $

새로운 서비스 중단 /etc/inetd.conf 파일에서 추가된 내용 삭제 root 계정에서 다음을 수행 # ps -ax | grep inetd 314 ? S 0:00 inetd # kill -HUP 314 #

inetd를 이용한 datagram 서버 UDP 서버에 적용된 inetd inetd 서버가 UDP 포트를 listen Inetd가 select(2) 호출해 datagram의 도착을 알린다. Inetd가 UDP 서버 시작을 위해 fork(2)와 exec(2)를 호출 UDP 서버가 하나의 패킷을 읽기 위해 file unit 0(stdin)을 사용

inetd를 이용한 datagram 서버 UDP 서버의 선택 단계 4에서 UDP 패킷을 처리한 후 Exit(종료) 다른 UDP 패킷을 기다림(timeout 후에 종료)

Wait와 nowait의 이해 nowait wait 하나의 datagram을 처리하고 종료할 때 Inetd가 시작시킨 서버 프로세스가 datagram이 끝날 때까지 datagram 처리 wait(2) 시스템 호출이 inetd에게 서버 종료를 알릴 때까지 새로운 프로세스 시작하지 않음

Wait와 nowait의 이해 시스템적 기술 Inetd 서버에 들어온 datagram때문에 looping UDP 서버 프로세스 시작 다른 이벤트 기다림 첫번째 UDP datagram 처리 마침 표준 입력으로부터 다른 UDP datagram 읽기 시도 더 이상 도착한 datagram이 없어 서버에서 timeout 발생하고 exit(3) 호출에 의해 프로세스 종료 inetd SIGCHLD 신호 발생 inetd 서버가 프로세스 ID와 서버 프로세스 종료 상태 결정 wait(2)가 반환하는 datagram 서버의 프로세스 ID기록 서비스를 기다리는 프로세스가 없음을 표시

Wait와 nowait의 이해 datagram 서비스 정의시 유의사항 inetd daemon은 형성된 datagram 서버가 wait 또는 nowait 인수가 필요한지 알수 없다. wait datagram 서버에 nowait를 지정하면 불필요한 서버 프로세스들이 복제된다. nowait datagram 서버에 wait를 지정하면 서비스에 대한 실행력이 떨어진다.

요약