Sei sulla pagina 1di 6

NFS Network File System

Una breve introduzione

Sommario
Sommario............................................................................................................................................. 2
Network File System............................................................................................................................ 2
In breve................................................................................................................................................. 2
Lato server............................................................................................................................................ 3
Lato client............................................................................................................................................. 4
Comandi di amministrazione ...............................................................................................................5
Problemi di sicurezza .......................................................................................................................... 5

Network File System


NFS, ossia Network File System, un servizio di rete basato sul protocollo UDP (anche se in fase
di sviluppo una versione basata su TCP) che permette la condivisione di porzioni di file system da e
verso altri elaboratori connessi. NFS completamente trasparente allutente, compresi pochi
concetti di base decisamente semplice da implementare, pratico e veloce.
Fu introdotto da Sun Microsystem per le sue workstation diskless, ma ben presto fu adottato dagli
altri sistemi Unix e divenne lo standard de facto per la condivisione di file e directory per questa
famiglia di sistemi operativi.

In breve
Solitamente, sul sistema GNU/Linux del quale si vogliono condividere delle directory sufficiente
inserire queste nel file /etc/exports. I client potranno accedere ad esse attraverso un semplice
mount. Ovviamente ci potr avvenire solo se il sistema supporta questo protocollo e dopo che i
necessari servizi di rete saranno stati avviati.
Per poter condividere file attraverso NFS, sia come client che come server, occorre includere il
supporto al file system NFS nel kernel. Nella maggior parte delle distribuzioni (e nelle RedHat in
particolare) i kernel sono precompilati col questo supporto NFS attivato. 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)
nodev
nodev
nodev
nodev

ext2
proc
nfs
iso9660
autofs
devpts
reiserfs
vfat

Inoltre, sia sul server che sui client, dovranno essere attivati gli opportuni servizi. Senza scendere
troppo nel dettaglio su cosa fa ciascuno di questi servizi, vediamo cosa attivare nel server e nei
client, supponendo che il nostro sistema sia un Linux RedHat.

- Pag. 2 di 6 -

Lato server
Perch NFS possa funzionare, il servizio portmap deve essere attivo sul server. Con RedHat linux
lo possiamo eventualmente attivare in questo modo:
service portmap start

Un altro servizio da attivare sul server (e come vedremo anche sul client) il nfslock (che in realt
consiste di due parti: lockd e statd). Anche in questo caso con RedHat basta eseguire:
service nfslock start

Infine va lanciato il demone NFS vero e proprio (partiranno nfsd, mountd e quotad):
service nfs start

Verranno condivise le directory elencate nel file /etc/exports. La sintassi di questo file di
configurazione piuttosto semplice. E composto da diverse righe del tipo:
<percorso_dir> <host_o_rete1>(opzioni1) <host_o_rete2>(opzioni2)

Ecco alcuni esempi:


/home *.miodominio.com(rw)
/usr 192.168.199.12(ro,no_root_squash) 192.168.199.13(ro,no_root_squash)
/var/www/home 192.168.199.0/24 (ro)
/usr/local 192.168.200.* (ro,no_root_squash)

E possibile indicare intere sottoreti sia tramite la notazione classica (192.168.199.0/24) che
tramite luso di wildcard1 (*.miodominio.com). Praticamente per ogni directory si intende
condividere possibile specificare la lista di chi pu accedere e le modalit di accesso per ognuno.
Vediamo velocemente quali sono le opzioni di esportazione:
ro
rw
secure

insecure
Sync

async

Permette laccesso al file system locale in sola lettura. E unimpostazione di


default.
Permette laccesso al file system in lettura e scrittura
Le richieste di mount devono avvenire da una porta sicura (tra 0 e 1023). In
sostanza si richiede che solo un utente root possa richiedere il mounting. E
unimpostazione di default.
Permette richieste di mounting da qualsiasi porta (vedi lopzione precedente)
Ogni richiesta di scrittura determina limmediata memorizzazione dei dati sul
supporto fisico (disco fisso). Loperazione di scrittura considerata conclusa
solo se i dati sono stati memorizzati. Serve per garantire la sicurezza dei dati
in caso di crash del server, ma ha serie conseguenze dal punto di vista della
performance.
Il server autorizzato a scrivere i dati sul supporto fisico quando pu. E il
contrario di sync, ed unimpostazione di default.

Caratteri jolly
- Pag. 3 di 6 -

wdelay

E usata in combinazione con sync. Il server NFS normalmente ritarda la


scrittura dei dati su disco se ha il sospetto che unulteriore scrittura di dati
legata a questa sia in arrivo. Con questo trucco pi richieste di scrittura
contigue possono essere portate a termine in una sola volta, migliorando la
performance. E una impostazione di default.
no_wdelay
Anche questa usata in combinazione con sync ed la negazione della
precedente. Quando un server riceve principalmente molte richieste di
scrittura per pochi dati non correlati, la precedente politica degrada le
postazioni. Con questa opzione la si disabilita, e le richieste di scrittura non
sono mai ritardate.
root_squash
I file appartenenti allutente root e al gruppo root (UID=0 e GID=0) vengono
rimappati al gruppo anonymous ed allutente anonymous (UID=99 e
GID=99). E unimpostazione di default e serve per la sicurezza (si evita che
possano essere eseguiti programmi con il bit SUID impostato appartenenti a
root).
no_root_squash
I file con UID=0 e GID=0 restano tali. E il contrario dellopzione precedente.
all_root_squash Tutti i file e non solo quelli di root vengono rimappati allutente/gruppo
anonymous.
anonuid /anongid Permettono di definire gli identificativi dellutente e del gruppo anonymous.
Esempio: anonuid=499,anongid=280
N.B. per sincronizzare eventuali modifiche del file /etc/exports avvenute dopo lavvio del server
possibile utilizzare il comando:
exportfs r

Questo comando provoca la chiusura di eventuali condivisioni rimosse, lapertura di quelle nuove a
la variazione delle modalit di accesso per le righe modificate. Per altre opzioni rimandiamo alla
documentazione on-line (man exportfs).

Lato client
Sul lato client occorre che sia in funzione, come sul server, il servizio nfslock:
service nfslock start

Non occorre altro, se non montare la condivisione remota su un mount-point esistente, col
comando:
mount t nfs indirizzo_server:/condivisione /mount/point/valido

Tutto qui. Ecco un esempio di montaggio riferito alla tabella di esportazione del paragrafo
precedente:
mount t nfs 192.168.199.1:/home /home o rsize=65536,wsize=65536

Sono state specificate alcune opzioni di mount. Queste possono avere un impatto notevole sulla
performance. Vediamo le pi importanti:

- Pag. 4 di 6 -

rsize

wsize

hard

soft

timeo

Imposta la dimensione in byte del buffer di lettura. Il default varia a seconda


della versione di NFS (1024 per NFS2 e 2048 per NFS3). Aumentarlo a 8192
pu migliorare drasticamente la performance. Se la rete veloce lo si pu
portare a 65536 (64k).
Imposta la dimensione in byte del buffer di scrittura. Il default varia a seconda
della versione di NFS (1024 per NFS2 e 2048 per NFS3). Aumentarlo a 8192
pu migliorare drasticamente la performance. Se la rete veloce lo si pu
portare a 65536 (64k).
Se quando si tenta di montare la directory remota il server non
raggiungibile, i processi che fanno affidamento sui file contenuti nella
directory condivisa non possono essere interrotti, ed il client rimane congelato
fino a che il server non risulta nuovamente raggiungibile. Questa
limpostazione di default.
Se il server non raggiungibile al momento del mounting, dopo un certo
periodo il kernel del client genera un timeout, ed il mount fallisce. Il timeout
pu essere specificato con la seguente opzione.
Funziona con soft e permette di specificare dopo quanti secondi di
irraggiungibilit del serve il mount deve fallire. Es: timeo=60.

Comandi di amministrazione
Oltre al gi citato exportfs, un comodo comando che ci permette di ricavare informazioni su
esportazioni e connessioni stabilite showmount.
showmount a server

showmount d server
showmount e server

Mostra quali client stiano montando delle partizioni NFS del server
specificato. Vengono elencati il nome/indirizzo del client e la directory
montata.
Elenco delle directory montate da qualche client
Elenco delle directory che il server esporta (montate o meno da
qualche server)

Se il server non viene specificato il programma fa riferimento a localhost.

Problemi di sicurezza
Perch sia possibile montare le condivisioni del server essenziale che eventuali firewall o
protezioni via tcp-wrapper lascino ai nostri client libero accesso a certe porte TCP/UDP. Daltra
parte anche necessario che gli host non autorizzati non possano in alcun modo accedere a tali
risorse.
Le impostazioni fatte nel file /etc/exports hanno un carattere puramente pratico. Come sistema di
sicurezza sono un filtro blando e facilmente aggirabile. Per avere un livello di sicurezza un po pi
elevato, NFS di solito compilato con il supporto per il tcp-wrapper2. Non questa la sede per
2

Anche la protezione offerta dal tcp-wrapper, per quanto molto superiore rispetto alle impostazioni di /etc/exports,
comunque relativa. E sempre meglio avere anche quella di un solido firewall tipo IPCHAINS o IPTABLES.
- Pag. 5 di 6 -

spiegare il funzionamento di tale supporto. Basti dire che con questo sistema la verifica degli
accessi a una porta TCP o UDP avviene tramite due file: /etc/hosts.deny e /etc/hosts.allow.
Il deny ha precedenza rispetto allallow. In questi file possibile specificare rispettivamente a quali
servizi si nega e a quali si garantisce laccesso (e in entrambi i casi a chi).
E prassi comune prima negare tutto a tutti in /etc/hosts.deny con:
ALL: ALL

Il primo ALL indica tutti i servizi, quello dopo i due punti indica tutti gli host. Poi si garantisce
laccesso a chi si desidera per certi servizi nel file /etc/hosts.allow. Nel nostro caso
aggiungiamo le linee:
portmap: 127.0.0.1, host1_address, host2_address,
mountd: 127.0.0.1, host1_address, host2_address,

Concediamo cio laccesso a quelle porte ai soli host specificati (pi il localhost). Possiamo
specificare singolarmente gli indirizzi degli host che vogliamo abilitare o eventualmente tutta la
sottorete locale (qualcosa tipo: 192.168.1. ).
Nel (malaugurato) caso che in /etc/hosts.deny ci siano impostazioni dettagliate (e non ALL:
ALL), dobbiamo aggiungere le righe:
portmap: ALL
mountd: ALL

per blocchiamo qualunque tentativo di accesso alle porte specificate. Le modifiche al file allow
saranno le stesse del caso precedente.

- Pag. 6 di 6 -

Potrebbero piacerti anche