Un Network File System (NFS) consente di montare delle partizioni su un sistema remoto e utilizzarle come se fossero filesystem locali. Ció permette l'amministratore del sistema di immagazzinare le risorse in una posizione centrale sulla rete, garantendo agli utenti autorizzati la possibilità di accedervi costantemente.
In questo capitolo, vengono presentati solo i concetti fondamentali relativi a NFS, con l'aggiunta di qualche informazione supplementare; pertanto, se desiderate delle istruzioni specifiche circa la configurazione e il funzionamento di NFS su macchine client o server, dovrete consultare il capitolo Network File System (NFS) nella Red Hat Enterprise Linux System Administration Guide.
Al momento sono disponibili due versioni di NFS. La versione 2 (NFSv2), che esiste già da alcuni anni, è ampiamente supportata. La versione 3 (NFSv3) offre alcune opzioni aggiuntive, come un file handling di lunghezza variabile e report di errore più completi. Red Hat Enterprise Linux ha il supporto per entrambi le versioni dei clientr NFSv2 e NFSv3 e utilizza NSFv3 per default in caso di connessione con un server che supporta tale versione.
NFSv2 utilizza User Datagram Protocol (UDP) per fornire un collegamento di rete di tipo 'stateless' tra il client e il server. NFSv3 può utilizzare UDP o Transmission Control Protocol (TCP) in esecuzione attraverso una rete IP.
Il collegamento UDP di tipo stateless in condizioni normali minimizza il traffico di rete, in quanto il server NFS invia un cookie al client dopo che lo stesso client viene autorizzato ad accedere al volume condiviso. Questo cookie, un valore casuale memorizzato dalla parte del server, viene trasmesso con le richieste RPC inviate dal client. Tuttavia UDP è di tipo stateless, se il server si arresta inaspettatamente, i client UDP continuano a saturare la rete con delle richieste per il server. Per questa ragione, TCP è il protocollo preferito quando ci si collega ad un server NFSv3.
![]() | Nota Bene |
---|---|
Per compatibilità, sotto Red Hat Enterprise Linux, per default UDP è il protocollo di trasporto. Consultate il capitolo intitolato Network File System (NFS) nella Red Hat Enterprise Linux System Administration Guide per maggiori informazioni sul collegamento ai server NFS usando TCP. |
NFS effettua l'autenticazione solo quando un sistema client cerca di eseguire un montaggio della risorsa NFS condivisa. Per limitare l'accesso al servizio NFS, vengono usati i wrappers TCP, che leggono i file /etc/hosts.allow e /etc/hosts.deny per stabilire se concedere o negare a un determinato client l'accesso al server NFS. Per maggiori informazioni su come configurare i controlli di accesso con wrapper TCP, consultate il Capitolo 16.
Una volta che il client ha passato i wrapper TCP, il server NFS fa riferimento al suo file di configurazione, /etc/exports, per determinare se il client possiede i privilegi minimi necessari per montare i filesystem esportati. Dopo aver consentito l'accesso, tutte le operazioni di file e directory sono disponibili per l'utente.
![]() | Avvertenza |
---|---|
I privilegi di montaggio NFS vengono garantiti all'host del client e non l'utente. Quindi, i filesystem esportati sono accessibili da un utente su di un host del client con i permessi di accesso. Quando si configurano le condivisioni NFS, fate molta attenzione su quale host ottenere i permessi di lettura/scrittura (rw). |
Per consentire la condivisione dei file NFS, Red Hat Enterprise Linux utilizza il supporto a livello del kernel combinato con una serie di processi demoni in continua esecuzione. Per instradare le richieste tra client e server, NFS utilizza delle chiamate Remote Procedure Calls (RPC). I servizi RPC sotto Linux sono controllati dal servizio portmap. Per condividere o montare i filesystem NFS, i seguenti servizi insieme, garantiscono il corretto funzionamento:
nfs — Inizia i processi RPC appropriati per le richieste del servizio per i filesystem NFS condivisi.
nfslock — Un servizio facoltativo che inizia i processi RPC appropriati, per abilitare i client NFS ad eseguire un bloccaggio dei file sul server.
portmap — Il servizio RPC, per Linux, risponde alle richieste per i servizi RPC e imposta i collegamenti ai servizi RPC richiesti.
I seguenti processi RPC lavorano insieme per facilitare i servizi NFS:
rpc.mountd — Questo processo riceve la richiesta di montaggio da un client NFS ed esegue un controllo per vedere se corrisponde con un filesystem correntemente esportato. Viene iniziato automaticamente dal servizio nfs e non richiede una configurazione da parte dell'utente.
rpc.nfsd — Questo processo implementa il server NFS. Funziona con il kernel di Linux per soddisfare le richieste dinamiche dei client NFS, come per esempio l'aggiunta di thread del server ogni qualvolta che si collega un client NFS. Questo processo corrisponde al servizio nfs.
rpc.lockd — Un processo facoltativo che permette ai client NFS di bloccare i file presenti sul server. Questo processo corrisponde al servizio nfslock.
rpc.statd — Questo processo implementa il protocollo RPC Network Status Monitor (NSM). Fornisce una notifica di riavvio quando un server NFS viene riavviato in seguito ad uno spegnimento non regolare. Questo processo viene avviato automaticamente dal servizio nfslock e non richiede una configurazione da parte dell'utente.
rpc.rquotad — Questo processo fornisce le informazioni sulla user quota per gli utenti remoti. Questo processo viene iniziato automaticamente dal servizio nfs e non necessita della configurazione da parte dell'utente.
Il servizio portmap è necessario per mappare le richieste RPC ai servizi corretti. I processi RPC notificano al portmap quando si avviano, rivelando il numero della porta che stanno monitorando e quali numeri di programmi RPC sono pronti a servire. Il sistema client poi contatta portmap sul server con un particolare numero di programma RPC. A questo punto, il servizio portmap reindirizza il client al numero di porta corretto perché possa comunicare con il servizio desiderato.
Dal momento che i servizi basati su RPC si affidano al portmap per effettuare tutte le connessioni con le richieste in ingresso dei client, è chiaro che portmap deve essere disponibile prima che i servizi di cui sopra siano avviati.
Il servizio portmap utilizza i wrappers TCP per il controllo all'accesso, e le regole del controllo all'accesso per portmap influenzano tutti i servizi basati su RPC. Alternativamente, potete specificare a quale demone RPC di NFS applicare una determinata regola. Le pagine man relative a rpc.mountd e rpc.statd contengono informazioni sulla sintassi precisa di queste regole.
Poiché portmap serve per coordinare i servizi RPC con i numeri di porta utilizzati per comunicare con loro, può essere utile farsi un'idea dei servizi RPC che attualmente usano portmap nelle operazioni di troubleshooting. Il comando rpcinfo mostra ogni singolo servizio RPC con accanto il suo numero di porta, il numero di programma RPC, la versione e il tipo di protocollo IP (TCP o UDP).
Se volete accertarvi che i servizi RPC di NFS corretti siano abilitati per il portmap, emettere il seguente comando come root:
rpcinfo -p |
Quanto segue è un esempio di output del seguente comando:
program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100021 1 udp 32774 nlockmgr 100021 3 udp 32774 nlockmgr 100021 4 udp 32774 nlockmgr 100021 1 tcp 34437 nlockmgr 100021 3 tcp 34437 nlockmgr 100021 4 tcp 34437 nlockmgr 100011 1 udp 819 rquotad 100011 2 udp 819 rquotad 100011 1 tcp 822 rquotad 100011 2 tcp 822 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100005 1 udp 836 mountd 100005 1 tcp 839 mountd 100005 2 udp 836 mountd 100005 2 tcp 839 mountd 100005 3 udp 836 mountd 100005 3 tcp 839 mountd |
Osservando l'output di questo comando, si nota che i servizi NFS corretti sonoin esecuzione. Se uno dei servizi NFS non si avvia in modo corretto, portmap non sarà in grado di mappare sulla porta corretta, le richieste RPC dei client relative a quel servizio. In molti casi, se NFS non è presente nell'output rpcinfo, il riavvio di NFS causa la corretta registrazione del servizio con portmap, con un consequente avvio delle sue funzioni. Per informazioni su come iniziare NFS, consultare la Sezione 9.2.
Altre utili opzioni sono disponibili per il comando rpcinfo. Consultate la pagina man per maggiori informazioni.