table of contents
INETD(8) | System Manager's Manual | INETD(8) |
NAZWA¶
inetd
—
Internetowy “superserwer”
SKŁADNIA¶
inetd
[-d
-E
-i
-l
-q
długość-R
częstośćplik-konfiguracyjny
]
OPIS¶
Inetd
nasłuchuje
połączeń na określonych gniazdach internetowych.
Gdy na jednym z gniazd zaistnieje połączenie, decyduje on,
jakiej usłudze to gniazdo odpowiada i wywołuje program,
który obsłuży żądanie. Po
zakończeniu programu, inetd kontynuuje nasłuchiwania gniazda
(poza niektórymi wypadkami, opisanymi poniżej). Ogólnie,
inetd
umożliwia używanie
jednego demona do wywoływania wielu innych, zmniejszając
wymagane obciążenie systemu.
Dostępne opcje:
-d
- Włącza debugowanie.
-E
- Zapobiega ignorowaniu przez
inetd
środowiska. Bez tej opcji część potencjalnie niebezpiecznych zmiennych środowiskowych, w tym PATH zostanie usuniętych i nie będzie dziedziczone przez usługi. -i
- Program nie przechodzi w tryb demona.
-l
- Włącza logowanie połączeń i kontrolę dostępu przez libwrap. Usługi wewnętrzne nie mogą być opakowywane. Gdy opcja jest aktywna, po cichu nie dokonuje się wykonania /usr/sbin/tcpd nawet gdy jest ono obecne w pliku /etc/inetd.conf, a w zamian inetd bezpośrednio wywołuje libwrap.
-q
długość- Określa długość kolejki połączeń listen(2) (domyślnie 128).
-R
częstość- Określa maksymalną częstość, z
jaką usługa może być wywołana w
ciągu minuty (domyślnie 256). Jeśli usługa
przekroczy ten limit,
inetd
zapisze problem do dziennika i zaprzestanie obsługi żądań dla danej usługi przez dziesięć minut. Więcej informacji można przeczytać też w poniższym opisie pól wait/nowait.
inetd
odczytuje
swoją konfigurację z pliku konfiguracyjnego, którym
domyślnie jest /etc/inetd.conf. Musi
tam być wpis dla każdego pola pliku konfiguracyjnego, z
poszczególnymi wpisami dla danego pola; wpisy są oddzielane
znakiem tabulacji lub spacji. Komentarze są zaznaczane przez
“#” na początku wiersza. Pola pliku konfiguracyjnego
są następujące:
nazwa usługi (service name) rodzaj gniazda (socket type) protokół[,sndbuf=rozmiar][,rcvbuf=rozmiar] (protocol[,sndbuf=size][,rcvbuf=size]) określenie, czy usługa ma "zwlekać" (wait/nowait[.max]) użytkownik[.grupa] lub użytkownik[:grupa] (user[.group] lub user[:group]) program serwera (server program) argumenty programu serwera (server program arguments)
nazwa usługi/wersja (service name/version) rodzaj gniazda (socket type) rpc/protokół[,sndbuf=rozmiar][,rcvbuf=rozmiar] (rpc/protocol[,sndbuf=size][,rcvbuf=size]) zwłoka (wait/nowait[.max]) użytkownik[.grupa] lub użytkownik[:grupa] (user[.group] or user[:group]) program serwera (server program) argumenty programu serwera (server program arguments)
inetd
przy nasłuchiwaniu dla tej
usługi. W jednym wierszu można podać wiele adresów
lokalnych, oddzielonych dwukropkiem. Można wpisać adresy w
postaci numeru IP (cztery liczby oddzielone kropkami) lub nazw symbolicznych
domen. Nazwy domenowe są sprawdzane za pomocą
gethostbyname
(). Jeśli dana nazwa ma
przypisanych kilka adresów, inetd tworzy gniazda do nasłuchu na
każdym adresie.
Pojedynczy znak “*” oznacza
INADDR_ANY
, czyli “wszystkie adresy
lokalne”. Aby zapobiec powtarzaniu adresów
występujących wielokrotnie, wiersz z wyrażeniami
określającymi adresy hosta i dwukropkiem, bez kolejnych
pól, powoduje że adresy są zapamiętywane i
używane do wszystkich kolejnych wierszy bez bezpośrednio
podanego wyrażenia określającego adres (do momentu
napotkania kolejnego tak skonstruowanego wiersza lub dotarcia do końca
pliku). Wiersz
*:
tcp,rcvbuf=16384 tcp,sndbuf=64k tcp,rcvbuf=64k,sndbuf=1m
inetd
czy
powinien on czekać na powrót programu serwera, czy
kontynuować obsługę połączeń na
gnieździe. Jeśli serwer datagramowy łączy
się ze swoim rozmówcą, zwalniając gniazdo w ten
sposób, że inetd
może
odbierać dalsze wiadomości z tego gniazda, to mówi
się o nim jako o serwerze “wielowątkowym”
(multi-threaded) i powinno się używać wpisu
“nowait” Serwery datagramowe, które przetwarzają
wszystkie nadchodzące do gniazda datagram, które ostatecznie
przedawniają się, nazywa się
“jednowątkowymi” (single threaded) i powinno
używać się dla nich wpisu “wait”.
comsat(8) (biff(1))
i talkd(8) są przykładami tego
drugiego rodzaju serwerów datagramowych. Opcjonalny przyrostek
“max” (oddzielony od “wait” lub
“nowait” kropką) określa maksymalną
liczbę instancji serwera, jakie mogą zostać postawione
przez inetd
w czasie 60 sekund,
domyślnie wynosi 256. Jeśli usługa przekroczy ten limit,
inetd
zapisze ten problem do dziennika i
zaprzestanie obsługi żądań dla danej usługi
przez dziesięć minut. Proszę sprawdzić też
opis opcji -R
(powyżej).
Serwery strumieniowe są zwykle oznaczane jako “nowait”,
lecz jeśli pojedynczy serwer strumieniowy ma obsługiwać
wiele połączeń, można go oznaczyć
“wait”. Główne gniazdo zostanie wówczas
przekazane jako fd 0 do serwera, który następnie będzie
musiał akceptować połączenia przychodzące.
Serwer powinien ostatecznie przedawnić się i wyjść
gdy nie będzie już aktywnych połączeń.
inetd
będzie kontynuował
nasłuch na głównym gnieździe czekając na
połączenia, więc serwer nie powinien zamykać go
przy wychodzeniu.
Wpis użytkownik powinien zawierać
nazwę użytkownika, pod którym powinien uruchamiać
się serwer. Umożliwia to serwerom posiadanie mniejszych praw
niż prawa roota. Opcjonalnie, po dodaniu kropki do nazwy
użytkownika, można podać w tym polu nazwę grupy.
Umożliwia to serwerom pracę z innym (podstawowym)
identyfikatorem grupy niż ten, podany w pliku z hasłami.
Jeśli grupa jest podana, a użytkownik nie jest rootem, to
uzupełniające grupy związane z użytkownikiem
wciąż będą ustawione.
Wpis program serwera powinien zawierać
ścieżkę programu, który ma być
wywoływany przez inetd
po otrzymaniu
żądania na gnieździe. Jeśli
inetd
udostępnia tę
usługę wewnętrznie, to wpis ten powinien być
wpisem “internal”.
Wpis argumenty programu serwera powinien
wyglądać tak jak zwykłe argumenty, poczynając od
argv[0], który jest nazwą programu. Jeśli usługa
jest udostępniana wewnętrznie, to wpis powinien
przyjąć nazwę “internal.”
Program inetd
udostępnia wiele
“trywialnych” usług wewnętrznie,
używając do tego swoich własnych procedur. Tymi
usługami są “echo”, “discard”,
“chargen” (generator znaków), “daytime”
(odczytywalny przez człowieka czas) oraz “time” (czas
odczytywalny przez maszynę, liczba sekund od północy 1
stycznia 1900). Wszystkie te usługi są oparte o tcp. Dla
dalszych szczegółów o tych usługach, skonsultuj
się z odpowiednim RFC z Centrum Informacji Sieci (Network Information
Center).
Inetd
odczytuje swój plik
konfiguracyjny od nowa gdy otrzyma sygnał zawieszenia (hangup), czyli
SIGHUP
. Usługi mogą
być tak dodawane, kasowane lub modyfikowane.
Inetd
tworzy plik
/var/run/inetd.pid który zawiera jego
identyfikator procesu (PID).
libwrap¶
Obsługa opakowań TCP jest włączona w programinetd
w celu zapewnienia wbudowanej funkcji
kontroli dostępu podobnej do tcpd. Zewnętrzny program tcpd nie
jest wymagany. Nie ma potrzeby zmian wpisu programu serwera w
/etc/inetd.conf do włączenia
tej funkcji. inetd
używa
/etc/hosts.allow i
/etc/hosts.deny do konfiguracji
usług kontroli dostępu, zgodnie z opisem w podręczniku
hosts_access(5).
Zachowanie TCP/UDP w IPv6¶
Aby uruchomić serwer do obsługi ruchu IPv4 i IPv6 konieczne jest uruchomienie dwóch odrębnych procesów dla tego samego programu serwera, dzięki podaniu dwóch odrębnych wierszy w pliku inetd.conf osobnych dla “tcp4” i “tcp6”. W zależności od różnych kombinacji ustawień demona IPv4/IPv6inetd
będzie
wykazywał następujące zachowanie:
- Jeśli ma się jedynie jeden serwer - “tcp4”, ruch IPv4 będzie przekierowany na serwer. Ruch IPv6 nie będzie akceptowany.
- Jeśli ma się dwa serwery, tzn. “tcp4” oraz “tcp6”, to ruch IPv4 będzie przekierowany na serwer “tcp4”, a ruch IPv6 będzie przekierowany na serwer “tcp6”.
- Jeśli ma się jedynie jeden serwer - “tcp6”, jedynie ruch IPv6 będzie przekierowany na serwer. Specjalny parametr “tcp46” można wykorzystać przy przestarzałych serwerach, które wymagają połączenia IPv4 przepisanego na gniazdo IPv6. Nie zaleca się używania tego parametru.
ZOBACZ TAKŻE¶
fingerd(8), ftpd(8), identd(8), talkd(8)HISTORIA¶
Polecenieinetd
pojawiło się w
4.3BSD. Obsługa usług opartych na
Sun-RPC została utworzona wg udostępnionej przez Sun-OS 4.1.
Obsługę IPv6 dodano w projekcie KAME w 1999.
Marco d'Itri przeniósł ten kod z OpenBSD latem 2002 roku oraz
dodał możliwość modyfikacji buforów gniazd
oraz obsługę libwrap z drzewa źródeł
NetBSD.
BŁĘDY¶
Na systemach linuksowych demon nie może przeładować swojej konfiguracji. Trzeba go zrestartować jeśli zmienił się adres hosta dla usługi pomiędzy “*” i wyrażeniem określającym adres. Programy serwera używane z “dgram” “udp” “nowait” muszą czytać z gniazd sieciowych lubinetd
będzie mnożył
procesy aż do osiągnięcia limitu.
Wyrażenia określające adres hosta, choć ich
koncepcja ma sens przy usługach RPC, nie działają do
końca poprawnie. Dzieje się tak w dużej
części z powodu faktu, iż interfejs portmappera nie
udostępnia metody rejestracji różnych portów dla
tej samej usługi na różnym adresie lokalnym. Jeśli
nie będzie się używało więcej niż
jednego wpisu dla danej usługi RPC, to wszystko powinno
działać poprawnie (proszę zauważyć,
że do wierszy RPC bez bezpośredniego określenia adresu ma
zastosowanie domyślne wyrażenie określające adres
hosta).
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Przemek Borys (PTM) <pborys@dione.ids.pl> i Michał Kułach <michal.kulach@gmail.com>.$Mdocdate: 18 kwietnia 2014 $ | Debian |