INDIETRO SU AVANTI

Il superserver 'inetd' e la sua configurazione


Ogni server attivo e' un processo demone che occupa spazio in memoria, impiega tempo di schedulazione e in generale usa risorse di sistema.

Se un server riceve poche richieste da parte di clients non conviene averlo attivo continuamente.

E' stato percio' concepito un superserver, di nome inetd che amministra i server normalmente invocati di rado.

All'atto della partenza 'inetd' legge il suo file di configurazione, /etc/inetd.conf e scopre quali sono i server che deve amministrare. Apre quindi il porto ben conosciuto di ciascun server, facendo riferimento al file /etc/services e si mette in ascolto su tutti questi porti.

Quando dalla rete arriva una richiesta per un server amministrato, 'inetd' esegue una chiamata fork() seguita da una chiamata exec() e genera in tale momento il server richiesto.

Tale server apre un porto effimero e quindi gestisce la comunicazione con il client.

Un esempio di una linea di configurazione di /etc/inetd.conf puo' essere:

telnet  stream  tcp     nowait  root    /usr/sbin/in.telnetd  in.telnetd

La linea e' un record di configurazione composto di campi separati da spazio bianco:

vi e' la possibilita' di porre nel sesto campo non il nome dell'eseguibile vero da lanciare, ma quello di un cosiddetto programma wrapper, di sicurezza.

Per esempio la corrispondente linea puo' essere invece:


telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd

Il 'wrapper' /usr/sbin/tcpd consulta i sui files di configurazione che possono riportare liste di indirizzi IP o di nomi di dominio a cui l'uso del servizio non e' concesso. In tal caso il server vero non viene lanciato. Se invece il 'wrapper' concede il permesso di esecuzione del servizio, allora e' il 'wrapper' ad eseguire un exec() del servizio richiesto.

Se il file di configurazione /etc/inetd.conf viene cambiato, per far si' che il processo 'inetd' lo rilegga occorre inviare un segnale di Hangup all'identificativo del processo 'inetd':

kill -HUP <PIDinetd>