NOME¶
inetd —
internet
“super-server”
SINTASSI¶
inetd [
-d]
[
-R rate]
[
configuration_files ...]
DESCRIZIONE¶
Il programma
inetd deve essere eseguito all'avvio da
/etc/rc (vedere
rc(8)). Esso quindi resta
in ascolto di connessioni su certi socket internet. Quando su uno dei suoi
socket viene trovata una connessione, esso decide a quale servizio il socket
corrisponde, e invoca il programma per servire la richiesta. Il programma
server è invocato con il socket del servizio come suo standard input,
output e descrittori di errore. Dopo che il programma è finito
inetd continua ad ascoltare il socket (tranne in alcuni casi
che verranno descritti sotto). Essenzialmente
inetd permette
l'esecuzione di un demone per invocarne molti altri, riducendo il carico del
sistema.
Opzioni disponibili per
inetd:
- -d,
---debug
- Attiva il debugging.
- -R,
---rate rate
- Specifica il numero massimo di volte che un servizio
può essere invocato in un minuto; il default è 1000.
- ---version
- Mostra la versione.
- ---help
- Mostra l'help.
Una volta eseguito,
inetd legge le sue informazioni di
configurazione da un percorso di configurazione sulla linea di comando, per
default,
/etc/inetd.conf and /etc/initd.d. Se il percorso di
configuraizone è una directory, tutti i file nella directory sono letti
come un file di configurazione. Tutti i file di configurazione sono letti e
uniti. Ci deve essere una voce per ciascun campo nel file di confiuraizone,
con voci per ciascun campo separate da un tab o uno spazio. Commenti sono
segnati da un ``#'' all'inizio di una linea. Ci deve essere una voce per
ciascun campo. I campi del file di configurazione sono i seguenti:
nome del servizio
tipo di socket
protocollo
wait/nowait
utente
programma server
argomenti del programma server
Ci sono due tipi di servizi che
inetd può avviare:
standard e TCPMUX. Un servizio standard ha una porta nota assegnata ad esso;
esso può essere un servizio che implementa uno standard ufficiale
Internet o è un servizio specifico BSD. Come descritto in RFC 1078, i
servizi TCPMUX sono servizi non standard che non hanno una porta nota
assegnata ad essi. Essi sono invocati da
inetd quando un
programma si connette alla porta nota “tcpmux” e specifica il nome
del servizio. Questa caratteristica è utile per aggiungere server
sviluppati localmente.
Il campo
service-name è il nome di un servizio valido nel
file
/etc/services. Per i servizi “interni”
(discussi sotto), il servizio nome
deve essere il nome
ufficiale del servizio (che è il primo campo in
/etc/services). Per i servizi TCPMUX, il valore del campo
service-name consiste nella stringa “tcpmux”
seguita da uno slash e il nome del servizio scelto localmente. I nomi del
servizio elencati in
/etc/services e il nome
“help” sono riservati. Provare a scegliere nomi unici pir i propri
servizi TCPMUX prefissandoli con il nome della propria organizzazione e
aggiungendo come suffisso un numero di versione.
Il
socket-type deve essere uno tra “stream”,
“dgram”, “raw”, “rdm”, o
“seqpacket”, in funzione di quale socket sia uno stream,
datagramma, raw, messaggio recapitato affidabilmente, o socket sequenced
packet. I servizi TCPMUX devono usare “stream”.
Il
protocollo deve essere un protocollo valido come dato in
/etc/protocols. Esempi possono essere “tcp” o
“udp”. I servizi TCPMUX devono usare “tcp”.
Il campo
wait/nowait specifica se il server che è
invocato da inetd si approprierà del socket associato con il punto di
accesso del servizio, e quindi se
inetd deve aspettare che
il server esca prima di ascoltare nuove richieste di servizio. I server
datagrammi devono usare “wait”, poiché essi sono sempre
invocati con il datagramma socket originale legato all'indirizzo del servizio
specificato. Questi server devono leggere almento un datagramma dal socket
prima di uscire. Se un server datagramma si connette al suo peer, lliberando
il socket in modo che
inetd possa ricevere ulteriori
messaggi sul socket, si dice che esso è un server
“multi-threaded”; esso deve leggere un datagramma dal socket e
creare un nuovo socket connesso al peer. Può esserci un fork, e il
genitore deve quindi uscire per permettere a
inetd di
verificare nuove richieste di servizio per generare nuovi server. I server
datagrammi che processano tutti i datagrammi in arrivo su un socket ed
eventuali time out sono detti “single-threaded”.
Comsat(8), (
biff(1)) e
talkd(8) sono entrambi esempi dell'ultimo tipo di server
datagramma.
Tftpd(8) è un esempio di un server
datagramma multi-threaded.
I server che usano stream socket generalmente sono multi-threaded e usano il
campo “nowait”. Le richieste di connessione per questi servizi
sono accettate da
inetd, e al server è dato solo il
nuovo socket accettato connesso a un client del servizio. La maggior parte dei
servizi stream-based operano in questo modo. I server stream-based che usano
“wait” sono avviati con il servizio di ascolto del socket, e
devono accettare almeno una richiesta di connessione prima di uscire. Tali
server normalmente accetteranno e processeranno le richieste di connessione in
arrivo fino a un timeout. I servizi TCPMUX devono usare “nowait”.
Il campo
user deve contenere il nome utente dell'utente il cui
server deve funzionare. Questo permette che ai server vengano dati permessi
minori di root.
Il campo
server-program deve contenere il percorso del
programma che viene eseguito da
inetd quando viene rilevata
una richiesta sul suo socket. Se
inetd fornisce il servizio
internamente, questo campo deve essere “internal”.
Gli
argomenti del programma server devono essere dei normali
argomenti, che iniziano con argv[0], che è il nome del programma. Il
servizio è fornito internamente, la parola “internal” deve
prendere il posto di questo campo.
Il programma
inetd fornisce internamente numerosi servizi
“elementari” con l'uso delle sue routine. Questi servizi sono
“echo”, “discard”, “chargen” (generatore
caratteri), “daytime” (ora leggibile dell'uomo), e
“time” (tempo leggibile dalla macchina, nella forma del numero di
secondi a partire dalla mezzanotte dell'1 gennaio 1900). Tutti questi servizi
sono basati su tcp. Per dettagli su questi servizi consultare le RFC
appropriate dal Network Information Center.
Il programma
inetd rilegge il suo file di configurazione
quando riceve un segnale hangup,
SIGHUP
. I servizi
possono essere aggiunti, cancellati o modificati quando il file di
configurazione viene riletto.
TCPMUX¶
RFC 1078 descrive il protocollo TCPMUX: ``A TCP client connects to a foreign
host on TCP port 1. It sends the service name followed by a carriage-return
line-feed <CRLF>. The service name is never case sensitive. The server
replies with a single character indicating positive (+) or negative (-)
acknowledgment, immediately followed by an optional message of explanation,
terminated with a <CRLF>. If the reply was positive, the selected
protocol begins; otherwise the connection is closed.'' Il programma è
passato alla connessione TCP come file descrittori 0 e 1.
Se il nome del servizio TCPMUX comincia con un ``+'',
inetd
restituisce la risposta positiva per il programma. Questo permette di invocare
programmi che usano stdin/stdout senza mettere in essi alcun codice speciale
del server.
Il nome del servizio speciale “help” fa sì che
inetd elenchi i servizi TCPMUX in
inetd.conf.
ESEMPI¶
Qui ci sono numerosi esempi di campi del servizio per vari tipi di servizio:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
ntalk dgram udp wait root /usr/libexec/ntalkd ntalkd
tcpmux/+date stream tcp nowait guest /bin/date date
tcpmux/phonebook stream tcp nowait guest /usr/local/bin/phonebook phonebook
MESSAGGI DI ERRORE¶
Il server
inetd fa il log dei messaggi di errore usando
syslog(3). Messaggi di errore importanti e le loro
spiegazioni sono:
service/protocol server failing (looping), service terminated.
Il numero di richieste per il servizio specificato negli ultimi minuti eccede il
limite. Il limite esiste per impedire a un programma malfunzionante o a un
utente malizioso di impantanare il sistema. Questo messaggio può apparire
per numerose ragioni: 1) ci sono molti host che richiedono il servizio in un
breve lasso di tempo, 2) un programma client malfunzionante richiede il
servizio troppo frequentemente, 3) un utente malizioso sta eseguendo un
programma per invocare il servizio in un attacco 'denial of service', o 4) il
programma di servizio invocato ha un errore che fa che i client riprovino
rapidamente. Usare l'opzione [
-R]
come descritto sopra per cambiare l'ammontare limite. Quando il limite è
raggiunto il servizio viene riabilitato automaticamente in 10 minuti.
service/protocol: No such user 'user', service ignored
service/protocol: getpwnam: user: No such user
Non esiste nessun campo per
user nel file
passwd. Il primo messaggio avviene quando
inetd (ri)legge il file di configurazione. Il secondo
messaggio avviene quando il servizio viene invocato.
service: can't set uid number
service: can't set gid number
L'ID dell'utente o del gruppo per il campo
user non è
valido.
VEDERE ANCHE¶
comsat(8),
fingerd(8),
ftpd(8),
rexecd(8),
rlogind(8),
rshd(8),
telnetd(8),
tftpd(8)
HISTORY¶
Il comando
inetd è apparso nella
4.3BSD. TCPMUX è basato su codice e
documentazione di Mark Lottor.