[successivo] [precedente] [inizio] [fine] [indice generale] [licenze] [indice analitico] [tomo] [parte]
NFS è un servizio di rete che, avvalendosi delle RPC, permette la condivisione di porzioni di file system da e verso altri elaboratori connessi.
Solitamente, in un sistema GNU/Linux è sufficiente predisporre il file /etc/exports
per permettere agli altri elaboratori della rete di accedere al proprio con un semplice mount.
Per poter condividere file attraverso NFS, sia come cliente che come servente, occorre includere il supporto al file system NFS nel kernel (21.2.15).
Per controllare che questo supporto esista, è sufficiente leggere il contenuto del file /proc/filesystems
. L'esempio seguente rappresenta una situazione in cui è possibile accedere a file system NFS (è la riga nodev nfs a rivelarlo).
ext2 minix umsdos msdos vfat nodev proc nodev nfs nodev smbfs iso9660
Dalla parte dell'elaboratore servente è necessario che oltre al Portmapper siano in funzione i demoni mountd e nfsd e che il file di configurazione /etc/exports
sia stato configurato correttamente.
$
rpcinfo -p
[Invio]
program vers proto port 100000 2 tcp 111 rpcbind 100000 2 udp 111 rpcbind 100005 1 udp 844 mountd 100005 1 tcp 846 mountd 100003 2 udp 2049 nfs 100003 2 tcp 2049 nfs
rpc.mountd [ opzioni ]
È il demone che si occupa di gestire il montaggio del file system di rete dal lato del servente. Generalmente, viene avviato dalla procedura di inizializzazione del sistema, in modo autonomo, cioè indipendente dal supervisore Inet. Mantiene il file /etc/rmtab
che elenca i montaggi in essere. Tuttavia, non è garantito che il contenuto di questo file sia esatto, per cui non lo si può utilizzare per determinare con certezza quali siano le connessioni in corso.
rpc.nfsd [ opzioni ]
È il demone che si occupa di gestire le richieste, da parte dei clienti, per i servizi NFS. Deve essere in funzione nel servente. Viene avviato generalmente dalla procedura di inizializzazione del sistema, subito dopo mountd. Anche rpc.nfsd funziona in modo autonomo rispetto al supervisore Inet.
Il funzionamento di questo programma dipende dal file /etc/exports
. Quando quest'ultimo dovesse essere riconfigurato, per fare in modo che rpc.nfsd lo rilegga, è necessario inviargli un segnale di aggancio.
kill -HUP PID_di_rpc.nfsd
Il file /etc/exports
contiene l'indicazione delle porzioni di file system locale da concedere in condivisione alla rete: NFS. Questo file viene utilizzato in pratica dai demoni mountd e nfsd.
Se il file manca o è vuoto, non viene concesso l'utilizzo di alcuna parte del file system locale all'esterno.
Ogni record del file è composto da:
l'indicazione di una directory a partire dalla quale si concede la condivisione;
una serie di nodi o reti cui viene concesso l'utilizzo di questa directory con l'eventuale specificazione di opzioni di accesso.
In pratica si utilizza la sintassi seguente:
directory_di_partenza [ host ][( opzioni )]...
Quando si fanno modifiche a questo file, è necessario riavviare il sistema di gestione del servizio NFS. Di solito è sufficiente inviare un segnale di aggancio ai demoni mountd e nfsd.
kill -HUP PID_di_rpc.mountd
kill -HUP PID_di_rpc.nfsd
Se non si riesce in questo modo, si può provare eliminando del tutto i due processi, riavviandoli manualmente subito dopo.
Gli elaboratori che possono accedere alla directory condivisa possono essere specificati in vari modi, alcuni dei quali sono elencati di seguito:
indicazione di un nodo singolo
quando si utilizza un nome o un indirizzo IP che fa riferimento da un elaboratore specifico;
uso di caratteri jolly
possono essere utilizzati i caratteri jolly * e ? per indicare un gruppo di nomi di elaboratore con una sola notazione, tenendo presente che questi simboli non possono sostituirsi ai punti di un nome di dominio;
rete IP
attraverso la notazione indirizzo_IP / maschera_di_rete è possibile indicare simultaneamente tutti gli elaboratori collocati all'interno della rete o della sottorete a cui si fa riferimento.
Alcune delle opzioni da applicare sono elencate di seguito.
---------
ro
Consente l'accesso in sola lettura. Questa è la modalità di funzionamento predefinita.
rw
Consente l'accesso in lettura e scrittura.
noaccess
Non concede la directory in condivisione. Può essere utile quando si vuole evitare l'accesso a una sottodirectory di una directory già concessa in condivisione.
link_relative
Trasforma i collegamenti simbolici assoluti, contenuti nel file system da condividere, in collegamenti relativi.
Un percorso è assoluto quando parte dalla directory radice (/), mentre è relativo quando parte dalla posizione corrente. Nello stesso modo, un collegamento simbolico può essere fatto utilizzando l'indicazione di un percorso assoluto o relativo. Quando si utilizza un file system di rete, difficilmente si ricostruisce la situazione del file system contenuto nell'elaboratore che opera da servente, di conseguenza, gli eventuali collegamenti simbolici assoluti, non sarebbero più validi. Questo tipo di trasformazione risolve il problema ed è anche la modalità di funzionamento predefinita.
link_absolute
Mantiene il collegamenti simbolici così come sono.
root_squash
Si tratta di un'opzione di sicurezza, attraverso la quale si impedisce l'accesso come utente root. In pratica, quando un utente root presso un cliente utilizza il file system condiviso, viene trattato come utente nobody.(1)
no_root_squash
Non effettua la trasformazione dell'UID root e ciò è necessario quando si utilizzano clienti senza disco fisso.(2)
/usr *.brot.dg(ro)
Concede ai nodi del dominio brot.dg l'accesso in lettura alla directory /usr/
e seguenti.
/ roggen.brot.dg(ro,root_squash)
Concede a roggen.brot.dg di accedere in sola lettura a partire dalla directory radice, escludendo i privilegi dell'utente root.
/home roggen.brot.dg(rw) weizen.mehl.dg(rw)
Concede a roggen.brot.dg e a weizen.mehl.dg di accedere in lettura e scrittura alla directory /home/
.
/ *(rw,no_root_squash)
Questa definizione non dovrebbe funzionare più. Sembrerebbe voler concedere a tutta la rete di accedere in lettura e scrittura a partire dalla directory radice, permettendo ai vari utenti root di mantenere i loro privilegi. Tuttavia l'asterisco non dovrebbe riuscire a rimpiazzare i punti che compongono i nomi di dominio, risolvendosi così in una directory che in pratica non viene condivisa.
Per verificare l'utilizzo effettivo del servizio da parte dei clienti, è disponibile il programma showmount, che viene descritto più avanti. Infatti, questo si presta anche all'utilizzo dal lato cliente per conoscere le directory esportate da un servente.
Con GNU/Linux, l'utilizzo di un file system di rete richiede solo che il kernel sia stato predisposto per questo. Non occorrono programmi demone, basta il normalissimo mount.
Per facilitare il compito degli amministratori dei clienti, è anche disponibile il programma showmount che permette di conoscere cosa viene messo a disposizione dai vari serventi.
Il montaggio di un file system di rete avviene in modo analogo a quello di una normale unità di memorizzazione, con la differenza fondamentale del modo di esprimere il dispositivo virtuale corrispondente al file system remoto da connettere.
host_remoto : directory_remota
La notazione sopra riportata rappresenta la porzione di file system remoto cui si vuole accedere, attraverso l'indicazione simultanea dell'elaboratore e della directory di partenza.
Supponendo che l'elaboratore dinkel.brot.dg conceda l'utilizzo della directory /usr/
e successive, l'elaboratore roggen.brot.dg potrebbe sfruttarne l'occasione attraverso il programma mount nel modo seguente:
mount -t nfs dinkel.brot.dg:/usr /usr
Inoltre, nell'elaboratore roggen si potrebbe aggiungere una riga nel file /etc/fstab
in modo da automatizzarne la connessione (54.3.6).
dinkel.brot.dg:/usr /usr nfs defaults
Sia attraverso il programma mount (preceduti dall'opzione -o), che nel file /etc/fstab
(nel campo delle opzioni) possono essere specificate delle opzioni particolari riferite a questo tipo di file system.
rsize= n
Permette di specificare la dimensione dei pacchetti (o datagrammi, dal momento che si tratta del protocollo UDP, che è di tipo non connesso) utilizzati in lettura da parte del cliente NFS. Il valore predefinito è di 1 024 byte.
wsize= n
Permette di specificare la dimensione dei pacchetti (o datagrammi, dal momento che si tratta del protocollo UDP, che è di tipo non connesso) utilizzati in scrittura da parte del cliente NFS. Il valore predefinito è di 1 024 byte.
timeo= n
Permette di definire il valore del timeout, espresso in decimi di secondo, per il completamento delle richieste. In pratica, se entro quel tempo non si ottiene una conferma, si verifica un minor timeout e l'operazione viene ritentata con una durata di timeout doppia. Quando si raggiunge un timeout massimo di 60 secondi si verifica un major timeout. Il valore predefinito è sette, corrispondente a 0,7 secondi.
hard
Stabilisce che la connessione deve essere ritentata all'infinito, anche dopo un major timeout. È la modalità di funzionamento predefinita.
soft
Stabilisce che venga generato un errore di I/O non appena si verifica un major timeout. Questa modalità si contrappone a quella hard.
intr
Permette l'interruzione di una chiamata NFS attraverso l'uso di segnali. Può essere utile per interrompere una connessione quando il servente non risponde.
showmount [ opzioni ] [ host ]
showmount è un programma collocato nella directory /usr/sbin/
, il cui utilizzo è rivolto prevalentemente all'utente root, ma che non viene impedito agli utenti comuni. showmount permette di verificare la disponibilità di un servente NFS a consentire il montaggio di determinate directory, oppure permette di verificare chi stia montando qualcosa dal proprio servente locale.
-a | --all
Elenca i clienti che utilizzano il proprio servizio e anche le directory che questi hanno montato.
-e | --exports
Elenca le directory esportate dal servente locale o dal servente remoto (se indicato come ultimo argomento del comando).
Nicolai Langfeldt, NFS HOWTO
1) L'utente nobody corrisponde spesso al numero UID 65 534 o -2. Tuttavia, questo utente non ha un numero UID standard, tanto che in alcuni sistemi si preferisce utilizzare un numero più basso di quelli assegnati agli utenti comuni.
2) Anche se in tutti i documenti che si incontrano, si afferma che la trasformazione dell'UID root non avviene se non è richiesto espressamente, in realtà, la maggior parte delle distribuzioni GNU/Linux compilano i sorgenti in modo che, se non viene specificato diversamente, avvenga tale trasformazione.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome nfs.html
[successivo] [precedente] [inizio] [fine] [indice generale] [licenze] [indice analitico] [tomo] [parte]