I servizi di rete vengono attivati all'avviamento di Linux attraverso la procedura di inizializzazione (init), dopo che sono state assegnati gli indirizzi alle interfaccie di rete e che gli instradamenti sono stati definiti.
I daemon in grado di fornire servizi di rete, ricadono in due possibili categorie:
Nel primo caso, si tratta di programmi avviati normalmente che si occupano si ``ascoltare'' su una certa porta e di provvedere da soli ai controlli necessari contro gli accessi indesiderati.
Nel secondo, si tratta di programmi che vengono avviati nel momento in cui ne esiste effettivamente l'esigenza, e questo attraverso inetd che è il programma che si occupa di ``ascoltare'' su tutte le porte dei servizi che controlla.
Il primo modo è preferibile quando non è possibile attendere l'avvio di un programma ogni volta che si presenta una richiesta: il tipico caso è dato dal sistema di condivisione dei filesystem in rete, o NFS.
La gestione da parte di inetd permette di ridurre il carico del sistema, avviando solo i servizi necessari nel momento in cui ne viene fatta richiesta, e di introdurre un ulteriore sistema di controllo attraverso un altro programma: tcpd
Il daemon inetd è il supervisore dei servizi di rete. La ``supervisione'' si articola in due parti:
La presenza di questo meccanismo che si applica alla maggior parte dei servizi di rete (cioè tutti quelli che non sono standalone) permette di inserire un ulteriore controllo attraverso il programma tcpd, il quale si occupa di verificare che le richieste dei servizi provengano da indirizzi autorizzati.
inetd [
-
d]
[<file-di-configurazione>]
Si tratta del daemon principale per la gestione dei servizi server da offrire all'esterno. Di solito viene avviato automaticamente dalla procedura di inizializzazione del sistema. Quando è in funzione, si mette in ascolto di un determinato gruppo di porte e quando rivela una comunicazione in una di queste, determina qual'è il servizio corrispondente e lo avvia. In sostanza, inetd, demanda ad altri daemon la gestione dei servizi specificatamente richiesti. inetd, una volta avviato, legge il contenuto del suo file di configurazione che, se non viene espressamente nominato, è /etc/inetd.conf. inetd rilegge la configurazione quando riceve un segnale di SIGHUP:
kill
-
HUP <numero-del-PID-di-inetd>
L'opzione -
d attiva la modalità diagnostica (debug).
Si tratta del file di configurazione utilizzato dal daemon inetd. In particolare sono indicati i daemon per la gestione di servizi di rete specifici. In molti casi, l'avvio di questi daemon è controllato da tcpd. Se si effettuano modifiche a questo file e si vuole che abbiano effetto, è necessario inviare a inetd un segnale SIGHUP:
kill
.
-
HUP <PID-di-inetd>
#
# inetd.conf This file describes the services that will be available
# through the INETD TCP/IP super server. To re-configure
# the running INETD process, edit this file, then send the
# INETD process a SIGHUP signal.
#
# Version: @(#)/etc/inetd.conf 3.10 05/27/93
#
# Authors: Original taken from BSD UNIX 4.3/TAHOE.
# Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
# Modified for Debian Linux by Ian A. Murdock <imurdock@shell.portal.com>
#
# Modified for RHS Linux by Marc Ewing <marc@redhat.com>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Echo, discard, daytime, and chargen are used primarily for testing.
#
# To re-read this file after changes, just do a 'killall -HUP inetd'
#
#echo stream tcp nowait root internal
#echo dgram udp wait root internal
#discard stream tcp nowait root internal
#discard dgram udp wait root internal
#daytime stream tcp nowait root internal
#daytime dgram udp wait root internal
#chargen stream tcp nowait root internal
#chargen dgram udp wait root internal
#
# These are standard services.
#
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
gopher stream tcp nowait root /usr/sbin/tcpd gn
# do not uncomment smtp unless you *really* know what you are doing.
# smtp is handled by the sendmail daemon now, not smtpd. It does NOT
# run from here, it is started at boot time from /etc/rc.d/rc#.d.
#smtp stream tcp nowait root /usr/bin/smtpd smtpd
#nntp stream tcp nowait root /usr/sbin/tcpd in.nntpd
#
# Shell, login, exec and talk are BSD protocols.
#
shell stream tcp nowait root /usr/sbin/tcpd in.rshd
login stream tcp nowait root /usr/sbin/tcpd in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
talk dgram udp wait root /usr/sbin/tcpd in.talkd
ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd
#dtalk stream tcp waut nobody /usr/sbin/tcpd in.dtalkd
#
# Pop and imap mail services et al
#
pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d
pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
imap stream tcp nowait root /usr/sbin/tcpd imapd
#
# The Internet UUCP service.
#
#uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l
#
# Tftp service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers." Do not uncomment
# this unless you *need* it.
#
#tftp dgram udp wait root /usr/sbin/tcpd in.tftpd
#bootps dgram udp wait root /usr/sbin/tcpd bootpd
#
# Finger, systat and netstat give out user information which may be
# valuable to potential "system crackers." Many sites choose to disable
# some or all of these services to improve security.
#
# cfinger is for GNU finger, which is currently not in use in RHS Linux
#
finger stream tcp nowait root /usr/sbin/tcpd in.fingerd
#cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd
#systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx
#netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f inet
#
# Time service is used for clock syncronization.
#
time stream tcp nowait nobody /usr/sbin/tcpd in.timed
time dgram udp wait nobody /usr/sbin/tcpd in.timed
#
# Authentication
#
auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -l -e -o
#
# End of inetd.conf
Si tratta di un programma intermedio per il controllo dei servizi TCP/IP, di solito quelli che si trovano già sotto la supervisione di inetd. In pratica, esegue alcuni controlli, si occupa di registrare attraverso il log di sistema le richieste di esecuzione di questi servizi, e infine avvia i programmi daemon competenti.
Lo scopo più importante di questo daemon è quello di controllare che le richieste di utilizzo dei vari servizi offerti attraverso la rete provengano da host autorizzati. Questa selezione avviene attraverso l'analisi della coppia di file /etc/hosts.allow e /etc/hosts.deny. In pratica, quando tcpd rileva un tentativo di accesso, verifica che l'indirizzo del chiamante sia incluso nell'elenco di /etc/hosts.allow. Se è così non esegue altri controlli e permette l'accesso, altrimenti verifica che questo non sia incluso nell'elenco di /etc/hosts.deny.
Viene utilizzato da tcpd per determinare se il computer host che richiede uno dei servizi di rete del computer locale ha diritto di accedere. La struttura dei record di questo file ha la sintassi seguente.
<elenco-di-daemon> : <elenco-di-client>
Alla sinistra dei due punti si elencano i programmi daemon il cui utilizzo si vuole concedere ai computer host elencati alla destra. Gli elementi appartenenti a un elenco possono essere separati con una virgola o uno spazio.
È consentito l'uso di speciali nomi jolly e altri simboli che facilitano l'indicazione di gruppi di nomi.
.<indirizzo>
L'indirizzo di un host che inizia con un punto indica in realtà tutti gli indirizzi che finiscono con quel suffisso. Se si utilizzano nomi di dominio invece di indirizzi numerici, si fa riferimento a un intero dominio. Per esempio, .paperopoli.com rappresenta tutti gli host del dominio paperopoli.com.
<indirizzo>.
L'indirizzo di un host che finisce con un punto indica in realtà tutti gli indirizzi che iniziano con quel prefisso. Se si utilizzano indirizzi IP numerici, si fa riferimento a una rete intera. Per esempio, 192.168. rappresenta tutti gli host della rete 192.168.0.0.
<indirizzo-IP>/<maschera-IP>
Rappresenta gli indirizzi che si ottengono eseguendo l'
ALL
Rappresenta ``tutto''. Se si trova alla sinistra dei due punti rappresenta tutti i servizi daemon; se si trova alla destra, tutti gli host.
LOCAL
Rappresenta tutti i computer locali, intendendosi con questo, quelli rappresentabili senza alcun punto.
EXCEPT
Può essere utilizzato all'interno di un elenco di nomi per escluderne i successivi.
<!> Per maggiori dettagli conviene consultare hosts_access(5).
ALL : ALL
Consente l'utilizzo di qualsiasi servizio da parte di qualsiasi host.
ALL : ALL EXCEPT .topolinia.com
Consente l'utilizzo di qualsiasi servizio da parte di qualsiasi host a eccezione di quelli il cui dominio è topolinia.com.
ALL : .zigozago.dg
Consente l'utilizzo di qualsiasi servizio da parte degli host appartenenti al dominio zigozago.dg.
ALL : .zigozago.dg EXCEPT caino.zigozago.dg
Consente l'utilizzo di qualsiasi servizio da parte degli host appartenenti al dominio zigozago.dg, a esclusione del computer caino.zigozago.dg.
ALL : 192.168.
Consente l'utilizzo di qualsiasi servizio da parte degli host appartenenti alla sottorete 192.168.0.0.
<!> Per un più facile controllo degli accessi, conviene indicare all'interno del file /etc/hosts.deny soltanto ALL : ALL in modo da impedire tutti gli accessi che non siano esplicitamente consentiti da /etc/hosts.allow.
Viene utilizzato da tcpd per determinare quali host non possono accedere ad alcuni o a tutti i servizi di rete del computer locale. La struttura dei record di questo file ha la sintassi seguente.
<elenco-di-daemon> : <elenco-di-client>
Alla sinistra dei due punti si elencano i programmi daemon il cui utilizzo si vuole impedire ai computer host elencati alla destra. Gli elementi appartenenti a un elenco possono essere separati con una virgola o uno spazio. Il funzionamento di questo file è analogo a quello di /etc/hosts.allow.
Per questioni di sicurezza, è conveniente indicare all'interno di questo file solo la riga seguente:
ALL : ALL
in modo da impedire qualsiasi accesso che non sia stato espressamente concesso da parte di /etc/hosts.allow.
Per maggiori dettagli conviene consultare hosts_access(5)
1997.10.26 - Scritto da Daniele Giacomini daniele@calion.com (vedi copyright: Appunti Linux).