Configurare un sistema in modo che possa condividere file e directory tramite NFS è molto semplice. Tutti i filesystem esportati verso utenti remoti via NFS e, i relativi diritti di accesso per quei filesystem, si trovano nel file /etc/exports . Questo file viene letto dal comando exportfs per fornire a rpc.mountd e rpc.nfsd le informazioni necessarie per consentire il montaggio remoto di un filesystem da parte di un host autorizzato.
Il comando exportfs permette agli utenti root, di selezionare le directory da esportare o non esportare senza dover riavviare i vari servizi di NFS. Quando exportfs riceve le opzioni corrette, i filesystem da esportare vengono salvati in /var/lib/nfs/xtab. Poiché rpc.mountd si rivolge al file xtab nel decidere i privilegi di accesso a un filesystem, le modifiche all'elenco dei filesystem esportati hanno effetto immediato.
Sono disponibili varie opzioni per l'utilizzo del comando exportfs:
-r — Fa sì che tutte le directory elencate in /etc/exports vengano esportate mediante la creazione di un nuovo elenco export in /etc/lib/nfs/xtab. Questa opzione aggiorna in modo effettivo l'elenco delle esportazioni in base alle modifiche apportate a /etc/exports.
-a — Seleziona quali directory esportare e quali no, in base alle altre opzioni scelte per exportfs.
opzioni -o — Permette all'utente di specificare delle directory da esportare non presenti nell'elenco di /etc/exports. Queste condivisioni di filesystem aggiuntive devono essere salvate nello stesso modo in cui sono state speficicate in /etc/exports. Questa opzione viene utilizzata per testare un filesystem esportato prima di aggiungerlo in modo permanente all'elenco dei filesystem da esportare.
-i — Ignora /etc/exports; in questo caso, solo le opzioni fornite dalla linea di comando vengono usate per definire i filesystem esportati.
-u — Impedisce il montaggio di determinate directory da parte di utenti remoti. Il comando exportfs -ua sospende realmente la condivisione dei file di NFS, mentre mantiene attivi i vari demoni. Per riprendere la condivisione in NFS, digitate exportfs -r.
-v — Operazioni complesse: i filesystem da esportare o da non esportare vengono visualizzati molto più nel dettaglio quando viene eseguito il comando exportfs.
Se non viene fornita alcuna opzione al comando exportfs, visualizza un elenco degli attuali filesystem esportati.
Potete leggere le modifiche apportate a /etc/exports anche ricaricando il servizio NFS tramite il comando service nfs reload. In questo modo i demoni di NFS rimangono attivi durante la riesportazione del file /etc/exports.
Il file /etc/exports è il file standard per controllare verso quali host vengono esportati determinati filesystem e per specificare particolari opzioni. Le linee vuote vengono ignorate, i commenti si possono fare usando il # e le linee lunghe possono essere spezzate con il backslash (\). Ogni filesystem esportato dovrebbe avere la propria linea. Gli elenchi degli host autorizzati posti dopo un filesystem esportato devono essere separati tra loro da uno spazio. Le opzioni relative a ciascun host devono essere poste tra parentesi direttamente (ovvero senza spazi di separazione) dopo l'identificatore dell'host.
Nella sua forma più semplice, /etc/exports ha bisogno di conosceree soltanto la directory da esportare e gli host autorizzati a utilizzarla:
/some/directory bob.example.com /another/exported/directory 192.168.0.3 |
Dopo aver riesportato /etc/exports con il comando /sbin/service nfs reload, l'host bob.example.com è in grado di montare una certa directory (/some/directory), e 192.168.0.3 potrà montare la directory /another/exported/directory. Poiché in questo esempio non è stata specificata alcuna opzione, avranno effetto alcune preferenze predefinite di NFS:
ro — Solo lettura. Gli host che montano questo filesystem non saranno in grado di modificarlo. Per consentire agli host di apportare delle modifiche al filesystem, dovete specificare l'opzione rw (lettura/scrittura).
async — Consente al server di salvare i dati sul disco quando lo ritiene opportuno. Questo non ha grande importanza se l'host sta accedendo ai dati in modalità di sola lettura; se però sta apportando delle modifiche a un filesystem con opzione lettura/scrittura, in caso di crash del server i dati potrebbero andare perduti. Specificando l'opzione sync, tutte le modifiche apportate ai file vengono salvate sul disco prima che sia completata la la richiesta di scrittura da parte del client. L'attivazione di questa opzione può ridurre le prestazioni.
wdelay — Consente al server NFS di posticipare un salvataggio su disco nel caso sospetti l'arrivo imminente di un'altra richiesta di scrittura. Questo può accrescere le prestazioni riducendo il numero di volte in cui comandi di scrittura diversi devono accedere al disco. Utilizzate no_wdelay per disattivare questa opzione, che funziona solo se state utilizzando l'opzione sync.
root_squash — Fa in modo che tutti gli accessi dei client al filesystem esportato, effettuati da utenti root sulle macchine client, avvengano come UID "nobody". Questo in effetti declassa il potere dell'utente root remoto a quello del più semplice utente locale, impedendo agli utente root remoti di comportarsi come utenti root sul sistema locale. In alternativa, l'opzione no_root_squash disabilita questa funzione. Per applicare l'opzione di squash a tutti gli utenti remoti, compreso l'utente root, dovete usare l'opzione all_squash. Per specificare gli ID utente e di gruppo da utilizzare per gli utenti remoti da un particolare host, servitevi rispettivamente delle opzioni anonuid e anongid. In questo modo, potete creare uno speciale account utente per consentire agli utenti remoti di NFS di condividere e specificare (anonuid=<valore-uid>,anongid=<valore-gid>), dove il <valore-uid> rappresenta il numero dell'ID utente e il <valore-gid> rappresenta il numero dell'ID di gruppo.
Per sovrascrivere questi parametri di default, dovete specificare delle opzioni che li sostituiscano. Per esempio, se non specificate rw, l'esportazione viene condivisa soltanto in modalità di sola lettura. È necessario sovrascrivere in modo esplicito ogni singolo parametro di default per ciascuno dei filesystem esportati. Inoltre, sono disponibili altre opzioni in caso non sia presente alcun valore di default. Per esempio la capacità di disabilitare i controlli sui sottoalberi, il permesso di accedere da porte non sicure e di bloccare file in modo non sicuro (procedura necessaria per certe implementazioni dei client NFS meno recenti). Per maggiori dettagli su queste opzioni meno usate e diffuse, consultate la pagina man relativa alle esportazioni exports.
Quando si specificano gli hostname, potete utilizzare i metodi descritti di seguito:
host singolo — viene specificato un particolare host con un nome di dominio completamente qualificato, un hostname o un indirizzo IP.
caratteri jolly — un asterisco (*) o un punto di domanda (?) vengono utilizzati per prendere in considerazione un raggruppamento di nomi di dominio completamente qualificati o di indirizzi IP oppure quelli che corrispondono a una determinata stringa di lettere.
Tuttavia, fate attenzione con l'utilizzo di caratteri jolly nei nomi di dominio completamente qualificati, poiché tendono a essere più precisi di quanto si pensi. Per esempio, l'uso del carattere *.example.com consentirà al dominio sales.domain.com di accedere al filesystem esportato, mentre non lo permetterà a bob.sales.domain.com. Per abilitare entrambe queste possibilità, e includere anche sam.corp.domain.com, dovete usare *.example.com *.*.example.com.
reti IP — consente la corrispondenza per gli host sulla base dei loro indirizzi IP all'interno di una rete più ampia. Per esempio, 192.168.0.0/28 permette ai primi 16 indirizzi IP, dal 192.168.0.0 al 192.168.0.15, di accedere al filesystem esportato, mentre non lo consente all'indirizzo 192.168.0.16 e seguenti.
netgroup — permette l'utilizzo di un nome di gruppo di rete NIS, scritto @<nome-gruppo>. In questo modo, il server NIS diventa effettivamente responsabile del controllo degli accesi a questo filesystem esportato; si possono aggiungere e rimuovere utenti da un gruppo NIS senza intaccare /etc/exports.
![]() | Avvertenza | |
|---|---|---|
Il modo in cui viene formattato il file /etc/exports è molto importante, soprattutto per quanto riguardo l'uso degli spazi. Ricordatevi sempre di separare con uno spazio i filesystem esportati dagli host e gli host tra di loro. Non ci devono però essere altri spazi nel file, a parte quelli eventualmente usati nelle linee di commento. Per esempio, le due linee seguenti non hanno lo stesso significato:
La prima linea consente ai soli utenti di bob.example.com di accedere alla directory /home in modalità lettura/scrittura. La seconda linea permette agli utenti di bob.example.com di montare la directory in sola lettura (configurazione di default), mentre tutto il resto del mondo può montarla in modalità lettura/scrittura. |