Nfs-kernel-server: configurazione lato client

NFS

Sommario

Spazio Kernel
  1. Lato server
  2. Lato client

Linux

Installazione

Lenny

Installare i pacchetti necessari:

# apt-get install nfs-common portmap

Squeeze e successive

Controllare che sia presente il pacchetto nfs-common, in caso contrario installarlo:

# apt-get install nfs-common

Configurazione e connessione risorse

Una volta definite le risorse da condividere è possibile caricarle su un altro PC in modo permanente (statico) o su richiesta (dinamico). Il primo approccio è caratterizzato da un consumo di banda prolungato nel tempo, in quanto client e server devono costantemente scambiare informazioni (anche se non si utilizzano direttamente le risorse condivise), nel secondo invece il consumo di banda avviene solo quando si ha un effettivo accesso alle risorse. Nel caso di una LAN è ragionevole supporre che la banda non sia un problema, ma nel caso di condivisioni attraverso internet il discorso potrebbe cambiare. In generale se l'accesso alle risorse remote non è frequente è più logico utilizzare l'approccio dinamico.

Lenny

Creare la dirctory dove si vuol montare la directory condivisa, esempio: /media/condivisa

# mkdir /media/condivisa

editare il file /etc/fstab ed inserire

192.168.1.10:/media/storage /media/condivisa nfs user,rw,auto,hard  0   0

Nota:

  • 192.168.1.10:/media/storage sono l'indirizzo e la directory del server
    • aggiungere tante entry quante sono le directory condivise
  • /media/xxx directory raccomandata per montare le risorse
  • /media/condivisa è la directory dove sarà montata la risorsa
  • nfs è il tipo di file system
  • user permette a qualsiasi utente di montare,anche manualmente,la risorsa
  • rw sono i permessi di lettura e scrittura
    • modificare in ro se si desideramo solo permessi di lettura
  • auto la risorsa viene montata automaticamente
    • modificare in noauto se si vuole montare la partizione manualmente

Editare il file /etc/hosts.allow ed aggiungere

portmap: 192.168.1.10

Ora avviare il demone e montare la partizione:

# /etc/init.d/nfs-common start
# mount -a

Squeeze e successive

Sia che si voglia caricare le risorse remote in modo statico che dinamico, La prima cosa da fare è assicurarsi che sul PC client sia installato il pacchetto nfs-common, in caso contrario installarlo. Editare il file /etc/default/nfs-common ed assicurarsi che la riga contente la variabile NEED_IDMAPD= appaia così:

NEED_IDMAPD=yes

Fatto ciò l'utente deve decidere se montare le risorse in modo statico o dinamico, NON È POSSIBILE adottare entrambe le soluzioni contemporaneamente.

IMPORTANTE: si noti che sul PC cliente se si decide di montare le risorse remote sotto la cartella /home/nome_utente allora tutte le cartelle compariranno anche sul desktop, proprio come se fosse stato collegato un disco esterno o una chiavetta USB. È possibile aggirare il problema creando la cartella in un'altra posizione e poi creando un collegamento simbolico alla stessa nella cartella utente.

METODO STATICO

Per montare staticamente una risorsa il comando da usare è il solito mount, infatti questo comando supporta una valanga di protocolli e filesystem, tra cui appunto NFS. Prima di montare le risorse remote è necessario creare il punto di mount locale, si supponga per esempio di voler montare le suddette risorse in /home/nfs (si sconsiglia di montare le risorse direttamente in cartelle già esistenti che contengono già altri file/cartelle, come /home o peggio /), ergo restando all'esempio:

# mkdir /home/nfs

Fatto ciò è possibile montare le risorse remote digitando da terminale:

# mount -t nfs4 -o _netdev,hard,intr indirizzo_server:/ /home/nfs

Dove con indirizzo_server si identifica il server con le risorse condivise; può essere nella forma di un IP (es.: 192.168.5.92) oppure di un alias (es.: mioserver, in tal caso come sempre si presuppone che il computer client sia in grado di risolvere correttamente l'alias). Si noti che si è scritto indirizzo_server:/ e non indirizzo_server:/home poiché nel file /etc/exports del server la cartella /home è stata definita come radice (si ricorda che saranno esportate automaticamente anche tutte le sotto cartelle della cartella indicata col comando mount). A questo punto sarà sufficiente esplorare la cartella /home/nfs per vedere le risorse esportate. Per smontare le risorse remote è sufficiente digitare:

# umount /home/nfs

Se si desidera caricare automaticamente le risorse remote all'avvio del PC, evitando così di dover ridigitare ogni volta il precedente comando, è sufficiente editare il file /etc/fstab aggiungendo in coda la seguente riga:

indirizzo_server:/ /home/nfs nfs _netdev,auto,hard,intr 0 0
  NOTA
Per il solo /etc/fstab l'indicazione come filesystem della dicitura nfs4 invece di nfs è deprecata.

Dove _netdev e auto sono due opzioni che impongono rispettivamente di aspettare che i dispositivi di rete siano stati caricati e di caricare automanticamente le risorse remote presenti su indirizzo_server.

Qualora l'utente non voglia caricare automaticamente le risorse all'avvio, ma contemporaneamente desideri poter montare (ed esplorare) le risorse con un semplice click del mouse, è possibile creare nel menù un lanciatore che richiami uno script di questo tipo:

#!/bin/bash
if [ -f /home/nfs/test ]; then
	gnome-terminal --window-with-profile=nome_profilo -e "echo 'Risorse remote già caricate!'"
else
	gnome-terminal -e "su -c 'mount -t nfs4 -o _netdev,hard,intr server:/ /home/nfs'"
	nautilus /home/nfs
fi

/home/nfs/test è un file qualsiasi che deve essere incluso nelle risorse remote da montare, può benissimo essere un semplice file di testo vuoto. In pratica lo script verifica l'esistenza del file test ed agisce di conseguenza. Come facilmente intuibile il file di test esiste per la macchina client solo se le risorse remote sono già state montate, quindi se la condizione è vera allora non è necessario montare nuovamente le risorse. In caso contrario provvede a montare le risorse (che di norma è un operazione che richiede privilegi di root) e quindi a mostrare tramite nautilus la cartella contenente le risorse appena montate. L'opzione --window-with-profile=nome_profilo è un artificio per impedire che la finestra del terminale si chiuda immediatamente dopo aver stampato a video il messaggio d'avviso; si richiede infatti a tal proposito di creare preventivamente un profilo del terminale in cui si sia specificato nelle preferenze di non chiudere il terminale dopo aver concluso l'esecuzione di un comando: dalla seconda scheda "Titolo e comando" selezionare "Mantieni aperto il terminale" per la voce "Quando il comando termina:". La finestra deve essere chiusa manualmente dall'utente, in modo del tutto normale.

Se non si desidera creare un lanciatore, ma eseguire direttamente lo script da terminale, allora lo script diviene:

#!/bin/bash
if [ -f /home/nfs/test ]; then
	echo "Risorse remote già caricate!"
else
	su mount -t nfs4 -o _netdev,hard,intr server:/ /home/nfs
	nautilus /home/nfs
fi

METODO DINAMICO

NOTA BENE: qualora si decida di abbandonare il metodo statico per quello dinamico è evidente che prima cosa è necessario smontare tutte le risorse montate staticamente che si intende gestire dinamicamente, e poi eliminare (o commentare) la riga eventualmente aggiunta al file /etc/fstab.

Per usare questo metodo è necessario il pacchetto autofs, pertanto se non installato procedere alla sua installazione:

apt-get install autofs5

Se l'utente desidera cambiare le impostazioni di base, come il tempo trascorso il quale il sistema smonta automaticamente le risorse, può farlo editando il file /etc/default/autofs.

A questo punto è necessario modificare con un editor il file auto.master

# gedit /etc/auto.master

aggiungendo in coda una riga del tipo /home/nfs /etc/auto.nfs. Questa riga dice che le risorse remote specificate nel file /etc/auto.nfs (naturalmente l'utente è liberissimo di scegliere un altro nome al posto di auto.nfs, basta essere coerenti nel seguito) andranno montante all'interno della cartella /home/nfs (che deve esistere! Autofs non crea il punto di mount). Come già scritto nel caso statico si sconsiglia di montare le risorse direttamente in cartelle già esistenti che contengono già altri file/cartelle, come /home o peggio /. È possibile definire più tipi di risorse remote inserendo più righe, il punto è che per ognuna è necessario indicare il punto di mount e il file contenente le relative istruzioni. A questo punto per quanto detto l'utente deve creare il suo file auto.nfs (o come è stato chiamato) usando il suo editor di testo preferito, ad esempio:

# gedit /etc/auto.nfs

che ovviamente apparirà vuoto essendo appena stato creato dall'utente. Inserire la seguente riga:

nome_arbitrario -fstype=nfs4,hard,intr indirizzo_server:/

Quanto appena scritto viene definito in gergo indirect map. Osservando la riga si nota subito essere composta da tre parti:

  1. Key: in questo esempio è nome_arbitrario, a sottolineare che trattasi di una parola qualsiasi a scelta dell'utente. È il nome della sottocartella di /home/nfs/ in cui compariranno le risorse remote. Si badi bene che diversamente da quanto fatto in precedenza, la suddetta cartella viene creata al momento da autofs, quindi l'utente NON deve creare tale sottocartella in anticipo.
  2. Options: banalmente la sezione delle opzioni, in questo caso sono tre cioè -fstype=nfs4, hard e intr. È naturalmente possibile specificare ulteriori opzioni (si veda il manuale di mount), basta separarle con una virgola.
  3. Location: definisce il percorso per caricare le risorse remote. In quest'esempio è indirizzo_server:/ (si ricordi che / non indica la radice del filesystem del server, ma la cartella definita come radice in /etc/exports sul server, cioè /home restando all'esempio), che come già ripetuto può essere sia un IP che un alias.

Prima di rendere operativo automount assicurarsi di aver smontato eventuali risorse statiche relative al server per cui abbiamo configurato auto.nfs. Fatto ciò digitare:

# /etc/init.d/autofs reload

Un modo per testare se le risorse remote vengono montate correttamente è digitare da terminale:

$ ls /home/nfs/nome_arbitrario

Se il comando restituisce l'elenco di file e cartelle contenute nella cartella /home del server significa che l'operazione di automount è andata a buon fine. Le risorse remote rimangono montate di base fino a 10 minuti dall'ultimo accesso alle stesse (si veda il parametro timeo del file /etc/default/autofs).
Nota Bene: digitare ls /home/nfs/ non mostra nulla poiché il comando non è sufficiente ad innescare l'automount delle risorse remote, quindi viene mostrato il contenuto della sola cartella nfs che è vuota per costruzione (o meglio dovrebbe essere tale, visto che come già detto è sconsigliato montare risorse in una cartella contenente file e sotto cartelle). Per innescare l'automount serve proprio la parola chiave (la key) indicata nel file /etc/auto.nfs, cioè nome_arbitrario. Per lo stesso motivo in nautilus facendo click sulla cartella /home/nfs non apparirà nulla, bisogna invece cliccare su "vai --> posizione" e digitare /home/nfs/nome_arbitrario seguito da invio; in realtà anche questo non è detto che funzioni, in tal caso è d'obbligo l'uso del terminale digitando per esempio:

$ cd /home/nfs/nome_arbitrario

Fatto ciò le risorse risulteranno visibile anche in nautilus. Volendo è anche possibile creare un lanciatore cui associare miniscript per innescare automaticamente il montaggio delle cartelle remote in nautilus:

#!/bin/bash
gnome-terminal -e "ls /home/nfs/nome_arbitrario"
nautilus /home/nfs/nome_arbitrario

Windows

Xp

Installazione

Scaricare da Windows services for unix l'eseguibile e procedere con l'installazione.

  Nota
Il predetto installer funziona solo con la versione professional, tuttavia è possibile installare SFU anche nella versione home; a tal fine è necessario aprire con un editor esadecimale, tipo ghex in gnome, il file SfuSetup.msi, cercare "NOT (VersionNT = 501 AND MsiNTSuitePersonal)" e sostituire a 501 il numero 510.

Durante l'installazione verrà chiesto se usare un servizio NIS per la mappatura dei nomi oppure la coppia di file passwd e group se lo stesso non è disponibile; si tenga presente che tale scelta è tranquillamente modificabile anche in seguito.
Ad installazione conclusa sarà necessario riavviare il computer.

Configurazione

Qualora si intenda procedere alla mappatura delle utenze tramite la coppia di file passwd e group è innanzitutto necessario copiarli dal server linux in una cartella di windows a scelta dell'utente; fatto questo avviare il servizio User Name Mapping (Impostazioni --> Strumenti di amministrazione --> Servizi), dopo averlo abilitato per un avvio manuale o automatico.
Avviare Programmi --> Windows Services for Unix --> Services for UNIX Administration e selezionare "User Name Mapping"; in questa guida si esaminerà solo la mappatura tramite coppia di file passwd e group.
Dalla scheda Configuration selezionare Use Password and Group files, quindi selezionare i rispettivi file; dopo aver cliccato il tasto "apply" passare alla scheda Maps.
Cliccare su Show User Maps e Show Group Maps per associare rispettivamente nomi utenti e gruppi utenti di windows con i corripettivi unix; per ogni associazione è necessario cliccare sul tasto "add" così ché il risultato appaia nell'ultimo riquadro in basso. Una volta terminate le associazioni (non è necessario mappare tutte le utenze) premere "apply".

  ATTENZIONE
Chi scrive ha provato la procedura sia sotto "Xp Home" che "Xp Professional" virtualizzato; nel primo caso la mappatura è stata memorizzata, nel secondo no.


Si noti che la succitata procedura di mappatura deve essere eseguita subito dopo l'installazione ed ogni volta che i file passwd e/o group vengono modificati.

Seven

Installazione

Andare in Pannello di controllo --> Programmi e funzionalità --> Attivazione o disattivazione delle funzionalità di windows, cercare Servizi per NFS e spuntarlo, compreso Client per NFS e Strumenti di amministrazione, infine premere ok.

  Nota
Queste funzionalità non sono disponibili solo per le versioni "Enterprise" e "Ultimate".

Terminata l'installazione riavviare.

Configurazione

Diversamente da Windows Xp che offriva la possibilità di mappare nomi utenti e gruppi semplicemente copiandosi i file passwd e group della macchina con le risorse da esportare in locale, in windows 7 questo non è più possibile essendo disponibili solo il mapping tramite active directory o server di mapping nomi. In quest'ultimo caso non dovrebbe essere necessario Windows Server, ma dovrebbe essere sufficiente una macchina con windows XP su cui giri il servizio User Name Mapping.

Esiste tuttavia un piccolo escamotage per superare parzialmente il problema, ovvero quello di cambiare UID e GID automaticamente associati all'utente anonimo e gruppo anonimo (che sono quelli appunto usati in caso di assenza di una mappatura utenti); aggiungere tramite regedit in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default due nuove valori DWORD, ovvero AnomymousGid e AnomymousUid, avendo cura di a attribuire loro lo GID/UID desiderato in base decimale (se per esempio si vuole mappare l'utente caio di linux avente UID=1000 e GID=1000 entrambe le chiavi dovranno avere valore 1000). Fatto ciò riavviare.

Connessione risorse remote

La procedura è la stessa usata per caricare risorse presenti su altre macchine windows, infatti è sufficiente aprire "Esplora Risorse" e cliccare su Strumenti --> Connetti Unità di Rete.... Nella schermata che si apre inserire il percorso delle risorse remote da montare, del tipo:
mio_server:/percorso/risorse
Diversamente da client linux qui è necessario specificare il percorso assoluto delle risorse condivise, se per esempio queste risiedono sul server sempronio nella cartella "/export" allora il percorso da inserire sarà sempronio:/export e non sempronio:/.
Non appena premuto il tasto di conferma comparirà una finestra che riepiloga il nome utente e il relativo UID e GID; qualora questi fossero errati sarà necessario premere annulla e ricontrollare la mappatura dei nomi correggendo eventuali errori. Si tenga presente che è sempre possibile autenticarsi come utenti anonimi aventi UID e GID pari a -2, ma evidentemente in tal caso si avrà probabilmente un accesso estremamente limitato alle risorse (oppure nessuno del tutto).