삽입하다

inetd

inetd(인터넷 서비스 데몬)는 인터넷 서비스를 제공하는 많은 유닉스 시스템의 슈퍼 서버데몬이다.구성된 각 서비스에 대해 클라이언트 연결 요청을 수신한다.요청은 적절한 실행 파일을 실행하는 프로세스를 생성하여 제공되지만, 에코와 같은 간단한 서비스는 자체적으로 제공된다.요청에 따라 실행되는 외부 실행 파일은 단일 또는 다중 스레드일 수 있다.4.3에 처음 등장BSD[1]일반적으로/usr/sbin/inetd.

함수

종종 슈퍼 서버라고 불리는 inetd는 FTP, POP3, 텔넷과 같은 인터넷 서비스에 의해 사용되는 지정된 포트에서 듣는다.TCP 패킷 또는 UDP 패킷이 특정 대상 포트 번호와 함께 도착하면, inetd는 연결을 처리하기 위해 적절한 서버 프로그램을 시작한다.높은 부하로 실행될 것으로 예상되지 않는 서비스의 경우, 이 방법은 특정 서버가 필요할 때만 실행되기 때문에 메모리를 더 효율적으로 사용한다.더욱이, inetd의 "nowait" 서비스 관리 모드에서는, 네트워크 스트림을 직접 산란 프로세스의 stdinstdout에 걸기 때문에, 서비스별 프로그램에는 네트워크 코드가 필요하지 않다.HTTP나 POP3와 같이 트래픽이 빈번한 프로토콜의 경우, inetd의 "대기" 작동 모드 또는 트래픽을 직접 가로채는 전용 서버가 선호될 수 있다.

세우다

서비스될 서비스 목록은 일반적으로 구성 파일에 제공되며,/etc/inetd.conf. 구성 파일을 관리하기 위한 GUI는 옵션 부속품이다.데몬은 구성을 다시 읽기 위해 신호가 필요할 수 있다.예를 들어, 텔넷은 다음과 같이 구성할 수 있다(AIX 버전 5.1을 실행하는 시스템에서 가져온 선).

telnet stream tcp6 nowait 루트 /usr/sbin/telnetd telnetd -a

첫마디.telnet는 서비스의 공식 이름이다.포트 번호와 프로토콜을 서비스 이름에 매핑하기 위해 시스템 데이터베이스를 사용하여 해결한다.이 경우,/etc/services다음을 포함해야 한다.

텔넷 23/11

두 번째와 세 번째 단어는 각각 소켓과 기본 프로토콜의 유형을 설명한다./etc/protocols데이터베이스를 참조한다.

네 번째 단어는 wait/nowait 스위치 입니다.단일 스레드 서버는 모든 데이터를 다 읽을 때까지 기다릴 것으로 예상한다.그렇지 않으면 서버가 새 요청을 위해 새 동시 프로세스를 실행하고 생성하도록 한다.

다섯 번째 단어는 사용자 이름이며,/etc/passwd데이터베이스(서비스 프로그램을 다음으로 실행해야 함).

마지막으로 외부 프로그램의 경로와 주장이 제시된다.늘 그렇듯이 첫 번째 인수는 프로그램 이름이다.이 예에서 inetd는 프로그램을 시작하라는 지시를 받는다./usr/sbin/telnetd명령줄 인수를 사용하여telnetd -a. inetd는 자동으로 소켓을 서버 프로그램의 stdin, stdout 및 stderr에 연결한다.

일반적으로 TCP 소켓은 각각의 연결을 동시에 처리하기 위해 별도의 서버를 생성하여 처리한다.UDP 소켓은 일반적으로 해당 포트의 모든 패킷을 처리하는 단일 서버 인스턴스에 의해 처리된다.

에코와 같은 일부 간단한 서비스는 외부 서버를 생성하지 않고 inetd에 의해 직접 처리된다.

inetd 서비스 생성

이것은 C로 쓰여진 간단한 inetd 서비스다.로그 파일의 파일 이름을 포함하는 명령줄 인수를 예상한 다음 소켓을 통해 전송된 모든 문자열을 로그 파일에 기록한다.이 프로그램은 매우 안전하지 않은 예제 프로그램이라는 점에 유의하십시오.

#include <stdio.h> #include <stdlib.h>  인트로 본래의(인트로 argc, 마를 뜨다 **아그브) {   경시하다 마를 뜨다 *fn = 아그브[1];   파일 *fp = 터놓고 이야기(fn, "a+");    만일 (fp == NU LL)      퇴장하다(EXIT_Failure);    마를 뜨다 발을 동동 구르다[4096];   /* inetd는 stdin에서 우리에게 정보를 전달한다.*/   하는 동안에 (똥을 싸다(발을 동동 구르다, 의 크기 발을 동동 구르다, 스틴)) {     풋볼(발을 동동 구르다, fp);     푸르쉬(fp);   }   클로즈드(fp);   돌아오다 0; } 

이 예는 stdio 함수를 사용하며 stdin에서 들어오는 네트워크 트래픽에 응답한다.이 경우 모든 메시지를 단일 파일에 기록하여 모든 요청을 처리하기 위해 서비스 인스턴스를 하나만 실행하십시오.이것은 UDP가 사용하기에 올바른 프로토콜이라는 것을 의미한다.먼저 사용하지 않은 포트 번호를 선택해야 한다.이 샘플에는 9999가 사용될 것이다./etc/services입력 내용은 다음과 같을 것이다.

errorLogger 9999/udp

그리고 엔트리는/etc/inetd.conf이렇게 보일 것이다:

errorLogger dgram udp wait 루트 /usr/local/bin/errlogd errlogd /tmp/logfile.txt

이것은 inetd에게 실행하라고 말한다./usr/local/bin/errlogd프로그램(명령줄 포함):errlogd /tmp/logfile.txt(다른 인수에 대한 내용은 inetd.conf man 페이지를 참조하십시오.)첫 번째 인수에는 로그 파일에 사용할 파일 이름이 포함되어 있다./tmp/logfile.txt. inetd는 필요할 때 서비스를 실행하고 포트 9999를 입력 및 출력 스트림에 연결하며, 해당 포트에 전송된 모든 문자열이 파일에 기록된다.wait를 지정함으로써, 모든 요청을 처리하기 위해 서버의 한 인스턴스만 사용하도록 inetd에 지시한다.

참고: 위의 예제의 기능은 대개 syslog 및 syslogd와 같은 프로세스를 사용하여 구현된다.syslogd는 일반적으로 inetd 서비스가 아닌 inetd와 병렬로 시작될 것이다.

교체를 도입하다.

최근에는 inetd의 원래 설계에 있어서의 보안상의 한계 때문에, 많은 시스템의 sinetd, rlinetd, ucspi-tcp 등으로 대체되고 있다.Linux의 배포는 특히 많은 옵션을 가지고 있으며 Mac OS X(Mac OS X v10.2로 시작)는 sinetd를 사용한다.버전 맥 OS X v10.4를 기준으로 애플은 inetd의 기능을 launchd로 통합했다.

inetd가 제공하는 서비스는 완전히 생략할 수 있다.이것은 기계가 단일 기능에 전념하는 경우에 더 흔해지고 있다.예를 들어 HTTP 서버는 httpd만 실행하도록 구성될 수 있으며 다른 포트가 열려 있지 않다.전용 방화벽은 서비스를 시작할 수 없다.

systemd는 inetd 서비스를 지원하고, IP 메시징(AF INET+6)을 넘어 소켓 활성화를 확대하여 AF UNIX, AF NETLINK 등을 포함시킨다.[2][3]

보안 문제

서비스 디스패쳐로서의 inetd 개념은 본질적으로 불안정한 것은 아니지만, 전통적으로 제공되었던 서비스의 긴 목록은 컴퓨터 보안 전문가들을 잠시 멈추게 했다.서비스가 악용될 수 있는 결함을 가지고 있거나, 단지 악용될 수 있는 가능성을 고려해야 했다.불필요한 서비스가 비활성화되고 "기본적으로 꺼짐"이 만트라가 되었다.a를 발견하는 것은 드문 일이 아니다./etc/inetd.conf최신 유닉스 배포판에 언급된 거의 모든 서비스와 함께.

참고 항목

참조

  1. ^ inetd(8)FreeBSD 시스템 관리자 설명서
  2. ^ "Systemd for Developers I".
  3. ^ "Rethinking PID 1".

외부 링크