.\" -*- coding: UTF-8 -*-
.\"	$OpenBSD: inetd.8,v 1.41 2017/10/04 19:52:26 jca Exp $
.\" Copyright (c) 1985, 1991 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"     from: @(#)inetd.8	6.7 (Berkeley) 3/16/91
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.Dd $Mdocdate: February 10 2020 $
.Dt INETD 8
.Os
.Sh NAZWA
.Nm inetd ,
.Nm inetd.conf
.Nd superserwer internetowy
.Sh SKŁADNIA
.Nm inetd
.Op Fl d
.Op Fl E
.Op Fl i
.Op Fl l
.Op Fl q Ar długość
.Op Fl R Ar częstość
.Op Ar plik-konfiguracyjny
.Sh OPIS
.Nm 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,
.Nm inetd
umożliwia używanie jednego demona
do wywoływania wielu innych, zmniejszając wymagane obciążenie systemu.
.Pp
Dostępne są następujące opcje:
.Bl -tag -width Ds
.It Fl d
Włącza debugowanie.
.It Fl E
Zapobiega ignorowaniu przez
.Nm inetd
środowiska. Bez tej opcji część
potencjalnie niebezpiecznych zmiennych środowiskowych, w tym
.Pa PATH
zostanie usuniętych i nie będzie dziedziczone przez usługi.
.It Fl i
Program nie przechodzi w tryb demona.
.It Fl 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
.Pa /usr/sbin/tcpd
nawet gdy jest ono obecne w
pliku
.Pa /etc/inetd.conf ,
a w zamian inetd bezpośrednio wywołuje
libwrap.
.It Fl q Ar długość
Określa długość kolejki połączeń
.Xr listen 2
(domyślnie 128).
.It Fl R Ar 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,
.Nm 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.
.El
.Pp
Podczas uruchamiania,
.Nm inetd
odczytuje swoją konfigurację z pliku
konfiguracyjnego, którym domyślnie jest
.Pa /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
.Dq #
na początku wiersza. Pola pliku konfiguracyjnego
są następujące:
.Bd -unfilled -offset indent
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)
.Ed
.Pp
Aby podać usługę opartą o
.Em Sun-RPC
, wpis powinien zawierać te pola:
.Bd -unfilled -offset indent
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)
.Ed
.Pp
W przypadku usług internetowych, pierwsze pole w wierszu może posiadać
również wyrażenie określające adres hosta, będące przedrostkiem oddzielonym
dwukropkiem. Łańcuch będący w pierwszym polu przed dwukropkiem określa
wówczas którego adresu lokalnego ma użyć
.Nm 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ą
.Fn getaddrinfo .
Jeśli dana nazwa ma przypisanych
kilka adresów, inetd tworzy gniazda do nasłuchu na każdym adresie.
.Pp
Pojedynczy znak
.Dq \&*
oznacza
.Dv INADDR_ANY ,
czyli
.Dq 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
.Dl *:
jest bezpośrednio udostępniony na początku pliku, z tego powodu tradycyjne
pliki konfiguracyjne (bez wyrażeń określających adres hosta) będą
interpretowane w tradycyjny sposób, czyli wszystkie usługi będą nasłuchiwać
na wszystkich adresach lokalnych. Jeśli protokół to
.Dq unix ,
to ta
wartość jest ignorowana.
.Pp
Wpis
.Em nazwa-usługi
jest nazwą prawidłowej usługi, zdefiniowanej w
pliku
.Pa /etc/services
lub portem. Dla usług
.Dq wewnętrznych
(internal) (opisanych niżej), nazwa usługi musi być oficjalną nazwą usługi
(to znaczy pierwszym wpisem w
.Pa /etc/services ) .
Podczas podawania
usługi opartej o Sun-RPC, pole to jest prawidłową nazwą usługi RPC,
zdefiniowaną w pliku
.Pa /etc/rpc .
Część na prawo od
.Dq /
jest
numerem wersji RPC. Może to być zwyczajny argument numeryczny, lub zakres
wersji. Zakres jest obramowany od niższej wersji do wyższej -
.Dq rusers/1-3 .
W przypadku gniazd
.Ux Ns -domain
pole to określa ścieżkę
gniazda.
.Pp
Wpis
.Em rodzaj gniazda
powinien być jednym z
.Dq stream
lub
.Dq dgram ,
zależnie od tego, czy gniazdo jest strumieniowe (stream) czy
datagramowe (datagram).
.Pp
.Em Protokół
musi być prawidłowym protokołem, podanym w pliku
.Pa /etc/protocols
lub w
.Dq unix .
Przykładami mogą być
.Dq tcp
lub
.Dq udp .
Usługi oparte na RPC są podawane z typem usługi
.Dq rpc/tcp
lub
.Dq rpc/udp .
.Dq tcp
i
.Dq udp
będą rozpoznawane jako
.Dq TCP lub UDP zarówno w IPv4 jak i w IPv6 .
Aby bezpośrednio wskazać IPv4 lub IPv6
należy zastosować zapis taki jak w przykładach:
.Dq tcp4 ,
.Dq udp6 .
.Em Protokół
równy
.Dq unix
służy do wskazania gniazda w
.Ux Ns -domain .
.Pp
Oprócz protokołu, plik konfiguracyjny może określać rozmiary buforów
nasłuchujących gniazd do wysyłania i otrzymywania danych. Jest to
szczególnie przydatne przy
.Tn TCP ,
jako współczynnik skalujący okna, co
bazuje na fakcie, że rozmiar bufora gniazda danych otrzymywanych jest
ogłaszany przy nawiązaniu połączenia, a zatem rozmiar bufora gniazda serwera
musi być ustawiony na gnieździe nasłuchującym. Zwiększając rozmiary buforów
gniazda, w pewnych sytuacjach można uzyskać lepszą wydajność
.Tn TCP .
Rozmiar buforów gniazda są podawane przez dołączanie ich wartości do
określenia protokołów, jak poniżej:
.Bd -literal -offset indent
tcp,rcvbuf=16384
tcp,sndbuf=64k
tcp,rcvbuf=64k,sndbuf=1m
.Ed
.Pp
Można podać wartość dosłowną lub zmodyfikować ją podając
.Sq k
do
wskazania kilobajtów lub
.Sq m
- jeśli chodzi o megabajty.
.Pp
Wpis
.Em wait/nowait
(zwłoka) jest używany do przekazania
.Nm 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
.Nm inetd
może odbierać dalsze
wiadomości z tego gniazda, to mówi się o nim jako o serwerze
.Dq wielowątkowym
(multi-threaded) i powinno się używać wpisu
.Dq nowait
Serwery datagramowe, które przetwarzają wszystkie nadchodzące do gniazda
datagram, które ostatecznie przedawniają się, nazywa się
.Dq jednowątkowymi
(single threaded) i powinno używać się dla nich wpisu
.Dq wait .
.Xr comsat 8
.Pq Xr biff 1
i
.Xr talkd 8
są przykładami tego
drugiego rodzaju serwerów datagramowych. Opcjonalny przyrostek
.Dq max
(oddzielony od
.Dq wait
lub
.Dq nowait
kropką) określa maksymalną
liczbę instancji serwera, jakie mogą zostać postawione przez
.Nm inetd
w czasie
60 sekund, domyślnie wynosi 256. Jeśli usługa przekroczy ten limit,
.Nm inetd
zapisze ten problem do dziennika i zaprzestanie obsługi żądań dla danej
usługi przez dziesięć minut. Proszę sprawdzić też opis opcji
.Fl R
(powyżej).
.Pp
Serwery strumieniowe są zwykle oznaczane jako
.Dq nowait ,
lecz jeśli
pojedynczy serwer strumieniowy ma obsługiwać wiele połączeń, można go
oznaczyć
.Dq 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ń.
.Nm 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.
.Pp
Wpis
.Em 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.
.Pp
Wpis
.Em program serwera
powinien zawierać ścieżkę programu, który ma być
wywoływany przez
.Nm inetd
po otrzymaniu żądania na gnieździe. Jeśli
.Nm inetd
udostępnia tę usługę wewnętrznie, to wpis ten powinien być
wpisem
.Dq internal .
.Pp
Wpis
.Em 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ę
.Dq internal.
.Pp
Program
.Nm inetd
udostępnia wiele
.Dq trywialnych
usług wewnętrznie,
używając do tego swoich własnych procedur. Tymi usługami są
.Dq echo ,
.Dq discard ,
.Dq chargen
(generator znaków),
.Dq daytime
(odczytywalny przez człowieka czas) oraz
.Dq 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).
.Pp
.Nm Inetd
odczytuje swój plik konfiguracyjny od nowa gdy otrzyma sygnał
zawieszenia (hangup), czyli
.Dv SIGHUP .
Usługi mogą być tak dodawane,
kasowane lub modyfikowane.
.Ss libwrap
Obsługa opakowań
.Tn TCP
jest włączona w program
.Nm inetd
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
.Pa /etc/inetd.conf
do włączenia tej funkcji.
.Nm inetd
używa
.Pa /etc/hosts.allow
i
.Pa /etc/hosts.deny
do konfiguracji usług kontroli
dostępu, zgodnie z opisem w podręczniku
.Xr hosts_access 5 .
.Ss Zachowanie TCP/UDP w IPv6
Domyślnie uruchamiane są dwa serwery: jeden do obsługi ruchu IPv4, a drugi
do IPv6. Przy innych wymaganiach, może być konieczne podanie jednego lub
dwóch odrębnych wierszy w pliku
.Pa inetd.conf ,
dla
.Dq tcp4
i
.Dq tcp6 .
.Pp
W zależności od różnych kombinacji ustawień demona IPv4/IPv6
.Nm inetd
będzie
wykazywał następujące zachowanie:
.Bl -bullet -compact
.It 
Jeśli ma się jedynie jeden serwer -
.Dq tcp4 ,
ruch IPv4 będzie
przekierowany na serwer. Ruch IPv6 nie będzie akceptowany.
.It 
Jeśli ma się dwa serwery, tzn.
.Dq tcp4
oraz
.Dq tcp6 ,
to ruch IPv4
będzie przekierowany na serwer
.Dq tcp4 ,
a ruch IPv6 będzie przekierowany
na serwer
.Dq tcp6 ,
co jest identyczne z domyślnym rozwiązaniem
stosowanym gdy poda się wyłącznie
.Dq tcp .
.It 
Jeśli ma się jedynie jeden serwer -
.Dq tcp6 ,
jedynie ruch IPv6 będzie
przekierowany na serwer.
.Pp
Specjalny parametr
.Dq 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.
.El
.Sh PLIKI
.Bl -tag -width /etc/inetd.conf -compact
.It Pa /etc/inetd.conf
.El
.Sh ZOBACZ TAKŻE
.Xr fingerd 8 ,
.Xr ftpd 8 ,
.Xr identd 8 ,
.Xr talkd 8
.Sh HISTORIA
Polecenie
.Nm inetd
pojawiło się w
.Bx 4.3 .
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.
.Pp
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.
.Sh USTERKI
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
.Dq \&*
i wyrażeniem określającym adres.
.Pp
Programy serwera używane z
.Dq dgram
.Dq udp
.Dq nowait
muszą
czytać z gniazd sieciowych lub
.Nm inetd
będzie mnożył procesy aż do
osiągnięcia limitu.
.Pp
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).
.Pp
.Sh TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika:
Przemek Borys <pborys@dione.ids.pl>
i
Michał Kułach <michal.kulach@gmail.com>
.
.Pp
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.Lk https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.Pp
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.Mt manpages-pl-list@lists.sourceforge.net
.Me .
