TL;DR
Una guida molto più breve è disponibile nella Guida del server di Ubuntu Se hai bisogno di maggiori informazioni, leggi di seguito.
Introduzione
NFS (Network File System) consente di ‘condividere’ una directory situata su un computer in rete con altri computer / dispositivi su quella rete. Il computer in cui si trova la directory è chiamato server e i computer o i dispositivi che si connettono a tale server sono chiamati client. I client di solito “montano” la directory condivisa per renderla parte della propria struttura di directory.,
NFS è perfetto per la creazione di NAS (Networked Attached Storage) in ambiente Linux/Unix. Si tratta di un protocollo nativo Linux/Unix al contrario di Samba che utilizza il protocollo SMB sviluppato da Microsoft. Il sistema operativo Apple ha un buon supporto per NFS. Windows 7 ha un supporto per NFS.
NFS è forse la soluzione migliore per directory montate in rete più “permanenti” come le directory / home o le risorse condivise a cui si accede regolarmente. Se si desidera una condivisione di rete a cui gli utenti guest possono connettersi facilmente, Samba è più adatto., Questo perché gli strumenti esistono più facilmente attraverso i vecchi sistemi operativi proprietari per montare e staccare temporaneamente dalle condivisioni Samba.
Ubuntu Prima di distribuire NFS si dovrebbe avere familiarità con:
- Permessi di file e directory Linux
- Montaggio e distacco (smontaggio) dei filesystem
Questo HowTo rende Ubuntu server NFSv4 pronto.
NFS quick start
A condizione di capire cosa si sta facendo, utilizzare questo breve walk-through per impostare un server NFSv4 su Ubuntu (senza autenticazione di sicurezza). Quindi montare la condivisione su un client Ubuntu., È stato testato su Ubuntu 14.04.
Server NFS
Per verificare che il server NFS non sia installato, è possibile eseguire…
-
$ dpkg -l | grep nfs-kernel-server
Installa i pacchetti richiesti…
-
# apt-get install nfs-kernel-server
Per facilitare la manutenzione isoleremo tutte le esportazioni NFS in una singola directory, dove le directory reali verranno montate con l’opzione bind bind.
-
Diciamo che vogliamo esportare le directory home dei nostri utenti in/home / users., Per prima cosa creiamo il file system di esportazione:
# mkdir -p /export/users
È importante che /export e/export/users abbiano 777 permessi poiché accederemo alla condivisione NFS dal client senza autenticazione LDAP / NIS. Questo non si applica se si utilizza l’autenticazione (vedi sotto)., Ora montare il reale directory di utenti con:
# mount --bind /home/users /export/users
Per salvare noi da riscrivere questo dopo ogni riavvio si aggiunge il seguente
riga a /etc/fstab
/home/users /export/users none bind 0 0
-
L’unica opzione in /etc/default/nfs-kernel-server per ora è NEED_SVCGSSD. È impostato su “no” per impostazione predefinita, il che va bene, perché questa volta non stiamo attivando la sicurezza NFSv4.
Affinché i nomi degli ID siano mappati automaticamente, sia il client che il server richiedono/etc / idmapd.,file conf per avere lo stesso contenuto con i nomi di dominio corretti. Inoltre, questo file dovrebbe avere le seguenti righe nella sezione Mapping:
-
Nobody-User = nobodyNobody-Group = nogroup
Tuttavia, il client potrebbe avere requisiti diversi per l’Utente Nessuno e il Gruppo Nessuno. Ad esempio sulle varianti di RedHat, è nfsnobody per entrambi. cat / etc / passwd e cat/etc / group dovrebbero mostrare gli account “nessuno”.
In questo modo, server e client non hanno bisogno che gli utenti condividano lo stesso UID / GUID.,
Per coloro che utilizzano l’autenticazione basata su LDAP, aggiungere le seguenti righe all’idmapd del client.conf:
Method = nsswitch
Questo farà sì che idmapd sappia di guardare nsswitch.conf per determinare dove dovrebbe cercare le informazioni sulle credenziali (e se l’autenticazione LDAP è già funzionante, nsswitch non dovrebbe richiedere ulteriori spiegazioni).
Per esportare le nostre directory su una rete locale 192.168.1.0/24 aggiungiamo le seguenti due righe a /etc/exports
Portmap Lockdown
opzionale
Aggiungi la seguente riga a /etc/hosts.,nega:
rpcbind mountd nfsd statd lockd rquotad : ALL
Bloccando prima tutti i client, solo i client in/etc / hosts.consenti di seguito sarà consentito l’accesso al server.
Ora aggiungi la seguente riga a/etc / hosts.allow:
rpcbind mountd nfsd statd lockd rquotad : list of IP addresses
Dove si trova la stringa “elenco indirizzi IP”, è necessario creare un elenco di indirizzi IP composto dal server e da tutti i client. Questi devono essere indirizzi IP a causa di una limitazione in portmap (non gli piacciono i nomi host). Nota che se hai impostato NIS, basta aggiungerli alla stessa riga.,
Nota: Assicurarsi che l’elenco degli indirizzi IP autorizzati includa l’indirizzo localhost (127.0.0.1) come script di avvio nelle versioni recenti di Ubuntu utilizzare il comando rpcinfo per scoprire il supporto NFSv3, e questo verrà disabilitato se localhost non è in grado di connettersi.,unt l’esportazione completa di albero con un solo comando:
Si può anche montare un esportati sottostruttura con:
-
# mount -t nfs -o proto=tcp,port=2049 <nfs-server-IP>:/users /home/users
Per salvare noi da riscrivere questo dopo ogni riavvio aggiungiamo la seguente riga a /etc/fstab:
-
<nfs-server-IP>:/ /mnt nfs auto 0 0
Se dopo il montaggio, la voce in /proc/mounts appare come <nfs-server-IP>:// (con due barre), quindi potrebbe essere necessario specificare due barre in /etc/fstab, o altro umount potrebbe lamentarsi che non riesce a trovare il montaggio.,
L’opzione auto si monta all’avvio. Tuttavia questo non funzionerà se il tuo client utilizza una connessione wifi gestita a livello utente (dopo il login), perché la rete non sarà disponibile al momento dell’avvio. In Ubuntu 12.04 LTS e versioni successive, le connessioni wifi sono gestite a livello di sistema per impostazione predefinita, quindi il montaggio automatico delle condivisioni NFS al momento dell’avvio dovrebbe funzionare correttamente.
Ubuntu Server non viene fornito con alcun init.d / netfs o altri script per fare questo per voi.
Blocco portmap
opzionale
Aggiungi la seguente riga a/etc / hosts.,nega:
rpcbind : ALL
Bloccando prima tutti i client, solo i client in/etc / hosts.consenti di seguito sarà consentito l’accesso al server.
Ora aggiungi la seguente riga a/etc / hosts.allow:
rpcbind : NFS server IP address
Dove “NFS server IP address” è l’indirizzo IP del server. Questo deve essere numerico! È il modo in cui funziona portmap.
NFS Server
Configurazione di preinstallazione
Nessuna delle seguenti operazioni di preinstallazione è strettamente necessaria.
Autorizzazioni utente
Le autorizzazioni utente NFS sono basate sull’ID utente (UID)., Gli UID di qualsiasi utente sul client devono corrispondere a quelli sul server in modo che gli utenti abbiano accesso. I modi per farlo sono:
- Manuale della password di sincronizzazione di file
-
l’Uso di LDAP
-
Utilizzo del NIS
e ‘ anche importante notare che è necessario essere attenti nei sistemi in cui l’utente principale è l’accesso di root – che l’utente può cambiare UID sul sistema per consentire loro l’accesso a chiunque file. Questa pagina presuppone che il team amministrativo sia l’unico gruppo con accesso root e che siano tutti attendibili., Qualsiasi altra cosa rappresenta una configurazione più avanzata e non verrà affrontata qui.
Permessi di gruppo
Con NFS, l’accesso di un utente ai file è determinato dalla sua appartenenza a gruppi sul client, non sul server. Tuttavia, esiste una limitazione importante: un massimo di 16 gruppi vengono passati dal client al server e, se un utente è membro di più di 16 gruppi sul client, alcuni file o directory potrebbero essere inaspettatamente inaccessibili.
Nomi host
facoltativo se si utilizza DNS
Aggiungere qualsiasi nome client e indirizzi IP a/etc / hosts. Il vero (non 127.,0.0.1) L’indirizzo IP del server dovrebbe essere già qui. Questo assicura che NFS continuerà a funzionare anche se DNS va giù. Si potrebbe fare affidamento su DNS se si voleva, tocca a voi.
NIS
opzionale – eseguire i passaggi solo se si utilizza NIS
Nota: funziona solo se si utilizza NIS. In caso contrario, non è possibile utilizzare netgroups e specificare singoli IP o nomi host in /etc/exports. Leggi la sezione BUG in man netgroup.
Modifica / etc / netgroup e aggiungi una riga per classificare i tuoi client. (Questo passaggio non è necessario, ma è per comodità).,
myclients (client1,,) (client2,,)
Ovviamente, è possibile aggiungere più client. myclients può essere tutto ciò che ti piace; questo è un nome netgroup.
Esegui questo comando per ricostruire il database YP:
sudo make -C /var/yp
Portmap Lockdown
opzionale
Aggiungi la seguente riga a/etc / hosts.nega:
rpcbind mountd nfsd statd lockd rquotad : ALL
Bloccando prima tutti i client, solo i client in/etc / hosts.consenti di seguito sarà consentito l’accesso al server.
Ora aggiungi la seguente riga a/etc / hosts.,allow:
rpcbind mountd nfsd statd lockd rquotad : list of IP addresses
Dove si trova la stringa “elenco indirizzi IP”, è necessario creare un elenco di indirizzi IP composto dal server e da tutti i client. Questi devono essere indirizzi IP a causa di una limitazione in portmap (non gli piacciono i nomi host). Nota che se hai impostato NIS, basta aggiungerli alla stessa riga.,
Installazione e configurazione
Installa NFS Server
sudo apt-get install rpcbind nfs-kernel-server
Condivisioni
Modifica/etc/exports e aggiungi le condivisioni:
/home @myclients(rw,sync,no_subtree_check)/usr/local @myclients(rw,sync,no_subtree_check)
Le condivisioni sopra riportate / home e/usr / local a tutti i client del myclients netgroup.
Le azioni di cui sopra / home e / usr / local a due client con indirizzi ip fissi. Meglio utilizzato solo con macchine con indirizzi ip statici.
/home 192.168.0.0/255.255.255.0(rw,sync,no_subtree_check)/usr/local 192.168.0.0/255.255.255.0(rw,sync,no_subtree_check)
Quanto sopra condivide /home e/usr / local a tutti i client della rete privata che rientrano nell’intervallo di indirizzi ip designato.,
rw effettua la condivisione in lettura / scrittura e la sincronizzazione richiede che il server risponda alle richieste solo una volta che tutte le modifiche sono state scaricate su disco. Questa è l’opzione più sicura (async è più veloce, ma pericoloso. Si consiglia vivamente di leggere le esportazioni man.
Dopo aver impostato/etc/exports, esporta le condivisioni:
sudo exportfs -ra
Dovrai eseguire questo comando ogni volta che/etc / exports viene modificato.,
Riavviare i Servizi
Se /etc/default/portmap è stato modificato, portmap dovrà essere riavviato:
sudo service portmap restart
NFS kernel server sarà necessario riavviare il sistema:
sudo service nfs-kernel-server restart
Nota
a parte il liquido di problemi descritti sopra, va notato che un utente malintenzionato potrebbe potenzialmente mascherarsi come una macchina che ha permesso la mappatura di condivisione, che permette loro di creare arbitrario Uidi per accedere ai file. Una potenziale soluzione a questo è IPSec, vedere anche la sezione NFS e IPSec di seguito., Puoi impostare tutti i membri del tuo dominio per parlare solo tra loro su IPSec, il che autenticherà efficacemente che il tuo cliente è chi dice di essere.
IPSec funziona crittografando il traffico al server con la chiave del server e il server restituisce tutte le risposte crittografate con la chiave del client. Il traffico viene decifrato con le rispettive chiavi. Se il client non ha le chiavi che il client dovrebbe avere, non può inviare o ricevere dati.
Un’alternativa a IPSec è reti fisicamente separate., Ciò richiede uno switch di rete separato e schede ethernet separate, e la sicurezza fisica di quella rete.
Client NFS
Installazione
sudo apt-get install rpcbind nfs-common
Blocco portmap
opzionale
Aggiungi la seguente riga a/etc / hosts.nega:
rpcbind : ALL
Bloccando prima tutti i client, solo i client in/etc / hosts.consenti di seguito sarà consentito l’accesso al server.
Ora aggiungi la seguente riga a/etc / hosts.allow:
rpcbind : NFS server IP address
Dove “NFS server IP address” è l’indirizzo IP del server. Questo deve essere numerico!, È il modo in cui funziona portmap.
Nomi host
facoltativo se si utilizza DNS
Aggiungere il nome del server a/etc / hosts. Ciò garantisce che i supporti NFS funzionino ancora anche se il DNS va giù. Si potrebbe fare affidamento su DNS se si voleva, tocca a voi.
Monta
Controlla se tutto funziona
Dovresti provare a montarlo ora., Il modello di base che userai è:
sudo mount ServerIP:/folder/already/setup/to/be/shared /home/username/folder/in/your/local/computer
quindi per esempio:
sudo mount 192.168.1.42:/home/music /home/poningru/music
Monta all’avvio
I supporti NFS possono essere montati automaticamente quando si accede tramite autofs o possono essere configurati con supporti statici usando le voci in/etc / fstab. Entrambi sono spiegati di seguito.
Automounter
Installa autofs:
sudo apt-get install autofs
Il seguente esempio di configurazione imposta le directory home per il montaggio automatico di un server NFS al momento dell’accesso. Altre directory possono essere impostate per automount su access pure.,
Aggiungi la seguente riga alla fine di / etc / auto.master:
/home /etc/auto.home
Ora crea /etc / auto.home e inserire quanto segue:
* solarisbox1.company.com.au,solarisbox2.company.com.au:/export/home/&
Riavviare autofs per abilitare la configurazione:
sudo service autofs start
Supporti statici
Prima di configurare i supporti, assicurarsi che le directory che fungeranno da mountpoint siano già state create.
In/etc/fstab, aggiungi righe per condivisioni come:
servername:dir /mntpoint nfs rw,hard,intr 0 0
Il rw lo monta in lettura / scrittura., Ovviamente, se il server lo condivide in sola lettura, il client non sarà in grado di montarlo come qualcosa di più. L’hard monta la condivisione in modo tale che se il server diventa non disponibile, il programma attenderà fino a quando non sarà disponibile. L’alternativa è morbida. intr consente di interrompere/uccidere il processo. Altrimenti, ti ignorerà. La documentazione per questi può essere trovata nella sezione Mount options for nfs di man mount.
I filesystem possono ora essere montati con mount /mountpoint, o mount-a per montare tutto ciò che deve essere montato all’avvio.,
Note
Impostazione NFS minimalista
I passaggi precedenti sono molto completi. Il numero minimo di passaggi necessari per impostare NFS sono elencati qui:
http://www.ubuntuforums.org/showthread.php?t=249889
Utilizzo di gruppi con condivisioni NFS
Quando si utilizzano gruppi su condivisioni NFS (NFSv2 o NFSv3), tenere presente che ciò potrebbe non funzionare se un utente è membro di più di 16 gruppi. Ciò è dovuto a limitazioni nel protocollo NFS., Puoi trovare ulteriori informazioni su Launchpad (“Autorizzazione negata quando l’utente appartiene a un gruppo che possiede directory scrivibili o setgid di gruppo montate tramite NFS”) e in questo articolo: “Qual è l’accordo sulla limitazione dell’id di gruppo 16 in NFS?”
Note IPSec
Se si utilizza IPSec, l’ordine di spegnimento predefinito in Breezy / Dapper fa sì che il client si blocchi mentre viene spento perché IPSec va giù prima di NFS., Per risolvere il problema, fare:
sudo update-rc.d -f setkey removesudo update-rc.d setkey start 37 0 6 S .
Un bug è stato archiviato qui: https://launchpad.net/distros/ubuntu/+source/ipsec-tools/+bug/37536
Risoluzione dei problemi
Il montaggio di condivisioni NFS in home crittografate non funzionerà all’avvio
Il montaggio di una condivisione NFS all’interno di una directory home crittografata funzionerà solo dopo decifrato. Ciò significa che usare / etc / fstab per montare le condivisioni NFS all’avvio non funzionerà, perché la tua casa non è stata decrittografata al momento del montaggio., C’è un modo semplice intorno a questo usando il link Simbolico:
- Creare una directory alternativa per montare le condivisioni NFS in:
$ sudo mkdir /nfs$ sudo mkdir /nfs/music
-
Modificare il file /etc/fstab per montare la condivisione NFS nella directory invece:
nfsServer:musica /nfs/musica nfs auto 0 0
- Creare un link simbolico all’interno della vostra casa, indicando l’attuale posizione di montaggio (nel nostro caso eliminare la “Musica” directory già esistente prima):
$ rmdir /home/user/Music$ ln -s /nfs/music/ /home/user/Music