Nfs-kernel-server: configurazione lato server
NFS |
Sommario |
|
Installazione
Installare i pacchetti necessari:
nfsV2 e nfsV3
# apt-get install nfs-kernel-server portmap
nfsV4
# apt-get install nfs-kernel-server
Configurazione
nfsV2 e nfsV3
Convenzione IP della macchina server: 192.168.1.10 ; directory da condividere: /media/storage
|
Ora editare col vostro editor preferito (gedit, kate, vim, ...) il file /etc/exports
ed aggiungere la seguente riga:
/media/storage 192.168.1.0/24(rw,sync,no_subtree_check)
Nota:
- 192.168.1.0/24 indica l'abilitazione a tutte le macchine della rete 192.168.1
- se si vuole abilitare una o determinate macchine basta specificarne l'IP
- rw indica che tutti hanno i permessi di lettura e scrittura
- se si vogliono dare solo i permessi di lettura, sostituire rw con ro
- /media/storage è la directory del nostro filesystem che vogliamo condividere
Completare dando ai vari client i permessi per l'accesso alla macchina server:
editare il file /etc/hosts.allow
ed inserire
portmap: 192.168.1
Come si capisce, in questo modo si da il permesso di accedere a tutta la LAN; se si vogliono delle restrizioni agire di conseguenza inserendo l'indirizzo specifico del/i client.
Ora lanciamo il demone e rendiamo disponibile la directory condivisa:
# /etc/init.d/nfs-kernel-server start # exportfs -a
nfsV4
Editare il file /etc/default/nfs-common
ed assicurarsi che le righe contenti le variabili NEED_IDMAPD=
e NEED_GSSD=
appaiano così:
NEED_IDMAPD=yes NEED_GSSD=no
Editare il file /etc/default/nfs-kernel-server
ed assicurarsi che la riga contente la variabile NEED_SVCGSSD=
appaia così:
NEED_SVCGSSD=no
A questo punto è possibile definire le condivisioni editando il file /etc/exports
, ogni riga del quale descrive una directory. Ad esempio inserendo le seguenti righe:
/home 192.168.1.0/24(rw,fsid=0,no_subtree_check,crossmnt,sync) /home/altro 192.168.1.0/24(rw,no_subtree_check,sync)
Si condivide la cartella /home
e la sua sottocartella /home
. La dicitura 192.168.1.0/24 serve a restringere l'accesso alla risorsa /home
alle sole richieste provenienti dagli indirizzi IP che vanno da 192.168.1.1 a 192.168.1.254. Una richiesta che per esempio dovesse provenire da 192.168.2.15 sarebbe rifiutata. Tra ( ) si indicano le opzioni:
rw
: abilità la cartella in lettura e scrittura, ammesso comunque che l'utente abbia il permesso di scrivere su quella cartella; indicando ro si limita la possibilità di scrivere anche per quegli utenti che se non accedessero da remoto avrebbero di norma il permesso di scrivere.fsid=0
: identifica la cartella come radice per il filesystem da esportare. Una sola cartella può avere valore di fsid pari a 0.no_subtree_check
: velocizza l'accesso alle risorse a scapito di un minimo aumento del rischio sicurezza.sync
: impone sincronia tra client e server. L'alternativa è async, ma è meglio evitarla poiché in caso di crash o eventi imprevisti aumenta la probabilità di causare danni al filesystem.crossmnt
: questa opzione serve in teoria solo se si sono rimontate delle directory (si veda la successiva sottosezione dedicata al rimontaggio delle cartelle), tuttavia è possibile che omettendola si noti un crollo della velocità di trasferimento (per esempio fino a 150-200 kB/s) nel trasferire grossi file da un client al server.
Per rendere operative le modifiche al file /etc/exports
eseguire:
# /etc/init.d/nfs-kernel-server restart
In caso di ulteriori problemi a visualizzare il contenuto delle cartelle provare a riavviare server e client.
RIMONTARE LE DIRECTORY
È possibile rimontare una o più cartelle in una seconda posizione col risultato che il contenuto delle cartelle risulta accessibile da due differenti posizioni (quella originale e quella dove si rimonta). Per far ciò è prima necessario creare il punto di mount, per esempio:
# mkdir -p /export/utente # mkdir -p /export/altro
Supponendo di voler rimontare le cartelle /home/utente
e /altro
rispettivamente in /export/utente
e /export/altro
:
# mount --bind /home/utente /export/utente # mount --bind /altro /export/altro
Per evitare di dover ridigitare ad ogni riavvio i precedenti comandi basta aggiungere le seguenti due righe al file /etc/fstab
:
/home/utente /export/utente none bind 0 0 /altro /export/altro none bind 0 0
A questo punto per esportare la cartella /export
non rimane che editare il file etc/exports
/export 192.168.1.0/24(rw,fsid=0,no_subtree_check,sync,crossmnt) /export/utente 192.168.1.0/24(rw,no_subtree_check,sync) /export/altro 192.168.1.0/24(rw,no_subtree_check,sync)
Da notare l'aggiunta dell'opzione crossmnt
, che non deve essere omessa pena l'impossibilità di vedere il contenuto delle sottocartelle di export sulle macchine client. Quest'opzione DEVE ESSERE assegnata solo alla cartella cui viene attribuito fsid=0.
Stando al manuale l'opzione nohide
ha un effetto molto simile a quello di crossmnt
, con la differenza che quest'opzione NON DEVE ESSERE assegnata alla cartella cui viene attribuito fsid=0, ma solo alle sotto directory (in caso contrario l'export delle risorse fallisce), ovvero restando al soprastante esempio:
/export 192.168.1.0/24(rw,fsid=0,no_subtree_check,sync) /export/utente 192.168.1.0/24(rw,no_subtree_check,sync,nohide) /export/altro 192.168.1.0/24(rw,no_subtree_check,sync,nohide)
Sottolineo che per quanto riguarda la mia personale esperienza questo secondo metodo è risultato inadeguato, poiché nel caso di trasferimento di grossi file (>1GB) da client a server ho notato un sistematico crollo della velocità di trasferimento (170 kB/s circa, tipicamente dopo aver superato la soglia di 1,1-2,5 GB trasferiti). Nel trasferimento da server a client le due soluzioni mi risultano invece equivalenti.