2.7.2 inetd e xinetd

Esiste anche un altro metodo di avvio automatico dei daemon, attraverso l’utilizzo del daemon inetd (Internet services daemon) o derivato. Tale daemon, detto anche super daemon, è stato pensato principalmente per l’avvio automatico dei daemon relativi ai servizi di rete: anziché lanciare in esecuzione i daemon relativi a tali servizi all’avvio del sistema, viene lanciato soltanto inetd che rimane in attesa sulle varie porte42 di eventuali richieste di uno dei servizi elencati nel file di configurazione /etc/inetd.conf. Non appena arriva una richiesta di un servizio, inetd lancia in esecuzione il daemon relativo. In questo modo è possibile risparmiare risorse di sistema piuttosto che avere processi che consumano risorse e non vengono utilizzati per gran parte del tempo che il sistema rimane acceso.

Le informazioni riportate in questa sezione presuppongono una conoscenza dei processi e dei protocolli di rete. Si raccomanda pertanto di leggere i cap. 7 e 16 prima di proseguire con la lettura di questa sezione.

Generalmente le distribuzioni di GNU/Linux forniscono un comando che estende le funzionalità di inetd, xinetd (extended inetd) (man page xinetd(8)).

____________________________________________________________________

Comando: xinetd
Path: /usr/sbin/xinetd

SINTASSI  
# xinetd [option]  
DESCRIZIONE

Il processo xinetd effettua le operazioni elencate in corrsipondenza dei seguenti segnali.

________________________________________________________________________

Il file di configurazione di xinetd (/etc/xinetd.conf) è un file di testo che indica i servizi gestiti da xinetd. Contiene delle sezioni, ognuna delle quali identifica un servizio, con la seguente sintassi:

 
service service_name
{
    attribute assign_op [value] [value] [...]
    [...]
}  
dove

Non è necessario specificare tutti gli attributi per ogni servizio, ma quelli necessari (per ogni tipologia di servizio) sono riportati nella tab. 2.6.


Attributo--|Tipo di-servizio--|
socketxtype-|Tutti------------|
user       |Non interno a xinetd
server     |Non interno a xinetd
wait       |Tutti            |
prorpctxovceolrsion |RRPPCC e unlisted    |
rpcxnumber  |unlisted RPC      |
port--------unlisted non RPC---

Tabella 2.6: Attributi necessari per i servizi avviati da xinetd.

Il file di configurazione può anche contenere una sezione defaults che indica gli attributi di default per tutti i servizi che non li specificano.

 
defaults
{
    attribute = value [value] [...]
    [...]
}  
Alcuni attributi (log_on_success, log_on_failure, only_from, no_access, passenv, disabled, enabled) hanno un effetto cumulativo ed ogni volta che vengono specificati accumulano il valore a quello precedente, cioè per essi, l’operatore = equivale a +=.

Un esempio del contenuto del file di configurazione di xinet è riportato di seguito

          defaults
          {
                log_type            = FILE /var/log/servicelog
                log_on_success      = PID
                log_on_failure      = HOST RECORD
                only_from           = 128.138.193.0 128.138.204.0
                only_from           = 128.138.252.1
                instances           = 10
                disabled            = rstatd
          }
          #
          # Note 1: the protocol attribute is not required
          # Note 2: the instances attribute overrides the default
          #
          service login
          {
                socket_type         = stream
                protocol            = tcp
                wait                = no
                user                = root
                server              = /usr/etc/in.rlogind
                instances           = UNLIMITED
          }
          #
          # Note 1: the instances attribute overrides the default
          # Note 2: the log_on_success flags are augmented
          #
          service shell
          {
                socket_type         = stream
                wait                = no
                user                = root
                instances           = UNLIMITED
                server              = /usr/etc/in.rshd
                log_on_success      += HOST RECORD
          }
          service ftp
                                                                        
                                                                        
          {
                socket_type         = stream
                wait                = no
                nice                = 10
                user                = root
                server              = /usr/etc/in.ftpd
                server_args         = -l
                instances           = 4
                log_on_success      += DURATION HOST USERID
                access_times        = 2:00-9:00 12:00-24:00
          }
          # Limit telnet sessions to 8 Mbytes of memory and a total
          # 20 CPU seconds for child processes.
          service telnet
          {
                socket_type         = stream
                wait                = no
                nice                = 10
                user                = root
                server              = /usr/etc/in.telnetd
                rlimit_as           = 8M
                rlimit_cpu          = 20
          }
          #
          # This entry and the next one specify internal services. Since
          # this is the same service using a different socket type, the
          # id attribute is used to uniquely identify each entry
          #
          service echo
          {
                id                  = echo-stream
                type                = INTERNAL
                socket_type         = stream
                user                = root
                wait                = no
          }
          service echo
          {
                id                  = echo-dgram
                type                = INTERNAL
                socket_type         = dgram
                user                = root
                wait                = no
          }
          service servers
          {
                type                = INTERNAL UNLISTED
                protocol            = tcp
                port                = 9099
                socket_type         = stream
                wait                = no
          }
          #
          # Sample RPC service
          #
          service rstatd
          {
                                                                        
                                                                        
                type                = RPC
                socket_type         = dgram
                protocol            = udp
                server              = /usr/etc/rpc.rstatd
                wait                = yes
                user                = root
                rpc_version         = 2-4
                env                 = LD_LIBRARY_PATH=/etc/securelib
          }
          #
          # Sample unlisted service
          #
          service unlisted
          {
                type                = UNLISTED
                socket_type         = stream
                protocol            = tcp
                wait                = no
                server              = /home/user/some_server
                port                = 20020
          }
Per ogni servizio può essere specificato un grado di tracciamento (log) quando il relativo daemon serve le richieste. xinetd genera dei messaggi di log con la seguente sintassi

 
entry: service_id data  
dove