inetd,
inetd.conf
—
internet super-server
inetd
[
-d]
[
-E]
[
-i]
[
-l]
[
-q
długość]
[
-R
częstość]
[
plik-konfiguracyjny]
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 są następujące 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.
Podczas uruchamiania,
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)
Aby podać usługę opartą o
Sun-RPC , wpis powinien zawierać te pola:
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)
For internet services, the first field of the line may also have a host address
specifier prefixed to it, separated from the service name by a colon. If this
is done, the string before the colon in the first field indicates what local
address
inetd should use when listening for that
service. Multiple local addresses can be specified on the same line, separated
by commas. Numeric IP addresses in dotted-quad notation can be used as well as
symbolic hostnames. Symbolic hostnames are looked up using
getaddrinfo(). If a hostname has multiple address
mappings, inetd creates a socket to listen on each address.
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
*:
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 “unix”, to ta wartość
jest ignorowana.
Wpis
nazwa-usługi jest nazwą
prawidłowej usługi, zdefiniowanej w pliku
/etc/services lub portem. Dla usług
“wewnętrznych” (internal) (opisanych niżej), nazwa
usługi musi być oficjalną nazwą usługi (to
znaczy pierwszym wpisem w
/etc/services). Podczas
podawania usługi opartej o Sun-RPC, pole to jest
prawidłową nazwą usługi RPC, zdefiniowaną w
pliku
/etc/rpc. Część na
prawo od “/” jest numerem wersji RPC. Może to być
zwyczajny argument numeryczny, lub zakres wersji. Zakres jest obramowany od
niższej wersji do wyższej - “rusers/1-3”. W
przypadku gniazd
UNIX-domain pole to określa
ścieżkę gniazda.
The
socket type should be one of
“stream” or “dgram”, depending on whether the
socket is a stream or datagram socket.
The
protocol must be a valid protocol as given in
/etc/protocols or “unix”. Examples
might be “tcp” or “udp”. RPC based services are
specified with the “rpc/tcp” or “rpc/udp” service
type. “tcp” and “udp” will be recognized as
“TCP or UDP over both IPv4 and IPv6.” If you need to specify
IPv4 or IPv6 explicitly, use something like “tcp4” or
“udp6”. A
protocol of
“unix” is used to specify a socket in the
UNIX-domain.
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 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ść TCP. Rozmiar buforów gniazda są podawane
przez dołączanie ich wartości do określenia
protokołów, jak poniżej:
tcp,rcvbuf=16384
tcp,sndbuf=64k
tcp,rcvbuf=64k,sndbuf=1m
Można podać wartość dosłowną lub
zmodyfikować ją podając ‘k’ do wskazania
kilobajtów lub ‘m’ - jeśli chodzi o megabajty.
Wpis
wait/nowait (zwłoka) jest
używany do przekazania
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.”
inetd provides several “trivial”
services internally by use of routines within itself. These services are
“echo”, “discard”, “chargen”
(character generator), “daytime” (human readable time), and
“time” (machine readable time, in the form of the number of
seconds since midnight, January 1, 1900). All of these services are TCP based.
For details of these services, consult the appropriate RFC from the Network
Information Center.
inetd rereads its configuration file when it
receives a hangup signal,
SIGHUP
. Services
may be added, deleted or modified when the configuration file is reread.
Obsługa opakowań TCP jest włączona w program
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
/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).
The default is to run two servers: one for IPv4 and one for IPv6 traffic. If you
have different requirements then you may specify one or two separate lines in
inetd.conf, for “tcp4” and
“tcp6”.
W zależności od różnych kombinacji ustawień
demona IPv4/IPv6
inetd 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.
- If you have two servers on “tcp4” and
“tcp6”, IPv4 traffic will be routed to the server on
“tcp4”, and IPv6 traffic will go to the server on
“tcp6”, which is identical to the default behaviour when
only “tcp” is specified.
- 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.
- /etc/inetd.conf
-
fingerd(8),
ftpd(8),
identd(8),
talkd(8)
Polecenie
inetd 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.
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 lub
inetd 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).
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Przemek Borys <
[email protected]> i Michał
Kułach <
[email protected]>
Niniejsze tłumaczenie jest wolną dokumentacją.
Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z
GNU
General Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy
zgłaszać na adres listy dyskusyjnej
[email protected]