[successivo] [precedente] [inizio] [fine] [indice generale] [licenze] [indice analitico] [tomo] [parte]


Capitolo 99.   NFS

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.

99.1   Supporto nel kernel

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

99.2   Dal lato del servente

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

99.2.1   # rpc.mountd

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.

99.2.2   # rpc.nfsd

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

99.2.3   /etc/exports

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:

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.

Purtroppo, la configurazione di questo file non è sempre funzionante e questo a causa di difetti nei demoni mountd e nfsd. In generale, si è cercato sempre di garantire la sicurezza, a discapito della funzionalità. Se una configurazione di /etc/exports sembra non funzionare senza un motivo apparente, è bene provarne altre, limitando l'uso di opzioni particolari, o cercando di identificare meglio gli elaboratori a cui si concede di accedere. Eventualmente, si veda anche la pagina di manuale exports(5).

Identificazione degli elaboratori

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 opzioni

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)

Esempi
/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.

99.2.4   Verifica

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.

99.3   Dal lato del cliente

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.

99.3.1   Montaggio di un file system di rete

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.

99.3.2   # showmount

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.

Alcune opzioni
-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).

99.4   Riferimenti

Appunti di informatica libera 2001.01.30 --- Copyright © 2000-2001 Daniele Giacomini --  daniele @ swlibero.org

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]