Introduzione
NFS, o Network File System, è un protocollo di sistema di file distribuito che consente di montare directory remote sul proprio server. Questo ti permette di gestire lo spazio di archiviazione in una posizione diversa e scrivere in tale spazio da più client. NFS fornisce un modo relativamente standard e performante per accedere ai sistemi remoti su una rete e funziona bene in situazioni in cui le risorse condivise devono essere accessibili regolarmente.
In questa guida, imparerai come installare il software necessario per la funzionalità NFS su Ubuntu 18.04, configurare i mount NFS su un server e un client, e montare e smontare le condivisioni remote.
Prerequisiti
Utilizzeremo due server in questo tutorial, con uno che condivide parte del suo filesystem con l’altro. Per completare questo tutorial, avrai bisogno:
-
Due server Ubuntu 18.04. Ciascuno di questi dovrebbe avere un utente non root con privilegi
sudo
configurati, un firewall impostato con UFW e una rete privata se disponibile.-
Per assistenza nella configurazione di un utente non root con privilegi
sudo
e un firewall, segui la nostra guida Configurazione Iniziale del Server con Ubuntu 18.04. -
Se stai utilizzando Droplet DigitalOcean per il tuo server e il client, leggi Come Creare una VPC per configurare una rete privata.
-
In questo tutorial, ci riferiamo al server che condivide le sue directory come l’host e al server che monta queste directory come il cliente. Utilizzeremo i seguenti indirizzi IP come sostituti per i valori dell’host e del cliente:
- Host:
203.0.113.0
- Cliente:
203.0.113.24
Quando questi indirizzi IP appaiono in comandi e file di configurazione, sostituiscili con i tuoi rispettivi indirizzi IP dell’host e del cliente.
Passaggio 1 — Scaricamento e Installazione dei Componenti
Inizia prima installando i componenti necessari su ciascun server.
Sull’Host
Sul server host, installare il pacchetto nfs-kernel-server
, che ti consentirà di condividere le tue directory. Poiché questa è la prima operazione che stai eseguendo con apt
in questa sessione, aggiorna l’indice dei pacchetti locali prima dell’installazione:
Successivamente, installare il pacchetto:
Una volta installati questi pacchetti, passare al server client.
Sul Client
Sul server client, installare un pacchetto chiamato nfs-common
, che fornisce funzionalità NFS senza includere componenti del server. Di nuovo, aggiornare l’indice dei pacchetti locali prima dell’installazione per assicurarsi di avere informazioni aggiornate:
Quindi, installare il pacchetto:
Ora che entrambi i server dispongono dei pacchetti necessari, è possibile iniziare a configurarli.
Passaggio 2 — Creare le Directory di Condivisione sull’Host
Condivideremo due directory separate con diverse impostazioni di configurazione per illustrare due modi principali con cui i montaggi NFS possono essere configurati per quanto riguarda l’accesso da superutente.
Gli utenti super possono fare qualsiasi cosa ovunque sul proprio sistema. Tuttavia, le directory montate tramite NFS non fanno parte del sistema su cui sono montate, quindi per impostazione predefinita il server NFS rifiuta di eseguire operazioni che richiedono privilegi di superutente. Questa restrizione predefinita significa che gli utenti super sul client non possono scrivere file come root, riassegnare la proprietà o eseguire altre attività da superutente sul mount NFS.
A volte, tuttavia, ci sono utenti fidati sul sistema del client che devono eseguire queste azioni sul file system montato ma che non hanno bisogno di accesso da superutente sull’host. È possibile configurare il server NFS per consentire ciò, anche se introduce un elemento di rischio, poiché un tale utente potrebbe ottenere l’accesso root all’intero sistema dell’host.
Esempio 1: Esportazione di un Mount a Uso Generale
Nel primo esempio, verrà creato un mount NFS a uso generale che utilizza il comportamento predefinito di NFS per rendere difficile a un utente con privilegi di root sulla macchina client interagire con l’host utilizzando quei privilegi di superutente del client. Si potrebbe utilizzare qualcosa del genere per memorizzare file che sono stati caricati utilizzando un sistema di gestione dei contenuti o per creare spazio per gli utenti per condividere file di progetto.
Innanzitutto, creare una directory condivisa:
Poiché lo stai creando con sudo
, la directory è di proprietà dell’utente root dell’host:
Outputtotal 8
drwxr-xr-x 2 root root 4096 Feb 7 23:21 .
drwxr-xr-x 3 root root 4096 Feb 7 23:21 ..
NFS tradurrà qualsiasi operazione di root sul client nelle credenziali nobody:nogroup
come misura di sicurezza. Pertanto, è necessario cambiare la proprietà della directory per corrispondere a tali credenziali:
Ora sei pronto per esportare questa directory.
Esempio 2: Esportazione della Directory Home
Nel nostro secondo esempio, l’obiettivo è rendere disponibili sulle server client le directory home degli utenti memorizzate sull’host, consentendo nel contempo agli amministratori affidabili di tali client l’accesso necessario per gestire comodamente gli utenti.
Per fare ciò, esporterai la directory /home
. Poiché esiste già, non è necessario crearla. Non cambierai neanche i permessi. Se lo facessi, potrebbe causare una serie di problemi a chiunque abbia una directory home sulla macchina host.
Passaggio 3 — Configurazione delle Esportazioni NFS sul Server Host
Successivamente, ci immergeremo nel file di configurazione NFS per impostare la condivisione di queste risorse.
Sulla macchina host, apri il file /etc/exports
nel tuo editor di testo preferito con i privilegi di root. Qui useremo nano
:
Il file contiene dei commenti che mostrano la struttura generale di ogni riga di configurazione. La sintassi è la seguente:
directory_to_share client(share_option1,...,share_optionN)
Dovrai creare una riga per ciascuna delle directory che intendi condividere. Poiché il nostro esempio client ha un IP di 203.0.113.24
, le nostre righe avranno l’aspetto seguente. Assicurati di cambiare l’indirizzo IP con quello del tuo client:
/var/nfs/general 203.0.113.24(rw,sync,no_subtree_check)
/home 203.0.113.24(rw,sync,no_root_squash,no_subtree_check)
Qui, stiamo utilizzando le stesse opzioni di configurazione per entrambe le directory ad eccezione di no_root_squash
. Esaminiamo cosa significano ciascuna di queste opzioni:
rw
: Questa opzione concede al computer client sia l’accesso in lettura che in scrittura al volume.sync
: Questa opzione forza NFS a scrivere le modifiche su disco prima di rispondere. Ciò garantisce un ambiente più stabile e coerente poiché la risposta riflette lo stato effettivo del volume remoto. Tuttavia, riduce anche la velocità delle operazioni sui file.no_subtree_check
: Questa opzione impedisce il controllo del sottoalbero, che è un processo in cui l’host deve verificare se il file è effettivamente ancora disponibile nell’albero esportato per ogni richiesta. Ciò può causare molti problemi quando un file viene rinominato mentre il client lo ha aperto. Nella quasi totalità dei casi, è meglio disabilitare il controllo del sottoalbero.no_root_squash
: Per impostazione predefinita, NFS traduce le richieste da un utente root in remoto in un utente non privilegiato sul server. Questo è stato pensato come misura di sicurezza per impedire a un account root sul client di utilizzare il file system dell’host come root.no_root_squash
disabilita questo comportamento per determinate condivisioni.
Dopo aver completato le modifiche, salva e chiudi il file. Se stai usando nano
, puoi farlo premendo CTRL + X
, poi Y
e INVIO
. Quindi, per rendere le condivisioni disponibili ai client configurati, riavvia il server NFS con il seguente comando:
Prima di poter effettivamente utilizzare le nuove condivisioni, tuttavia, assicurati che il traffico verso le condivisioni sia consentito dalle regole del firewall.
Passaggio 4 — Adattamento del Firewall sull’Host
Innanzitutto, controlla lo stato del firewall per confermare se è abilitato e, in caso affermativo, verifica cosa è attualmente consentito:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nel nostro sistema, viene permesso solo il traffico SSH, quindi sarà necessario aggiungere una regola per il traffico NFS.
Con molte applicazioni, puoi usare sudo ufw app list
e abilitarle per nome, ma nfs
non è una di quelle. Tuttavia, poiché ufw
controlla anche /etc/services
per la porta e il protocollo di un servizio, puoi comunque aggiungere NFS per nome. La prassi migliore consiglia di abilitare la regola più restrittiva che consentirà comunque il traffico che desideri permettere, quindi anziché abilitare il traffico da qualsiasi parte, sarai specifico.
Utilizza il seguente comando per aprire la porta 2049
sull’host, assicurandoti di sostituire l’indirizzo IP del tuo client:
Puoi verificare la modifica eseguendo quanto segue:
Dovresti ricevere un elenco di traffico consentito dalla porta 2049
nell’output:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2049 ALLOW 203.0.113.24
OpenSSH (v6) ALLOW Anywhere (v6)
Questo conferma che UFW consentirà solo il traffico NFS sulla porta 2049
dal tuo client.
Passaggio 5 — Creazione dei punti di mount e montaggio delle directory sul client
Ora che il server host è configurato e fornisce le sue condivisioni, preparerai il tuo client.
Per rendere le condivisioni remote disponibili sul client, è necessario montare le directory sull’host che desideri condividere in directory vuote sul client.
Nota: Se ci sono file e directory nel punto di montaggio, diventeranno nascosti non appena si monta la condivisione NFS. Per evitare la perdita di file importanti, assicurarsi che se si monta in una directory che già esiste, la directory sia vuota.
Creare due directory per i tuoi montaggi. Eseguire il seguente comando per creare la prima::
Poi eseguire questo comando per creare la seconda::
Ora che hai un luogo dove mettere le condivisioni remote e hai aperto il firewall, puoi montare le condivisioni utilizzando l’indirizzo IP del tuo server host, che in questa guida è 203.0.113.0
:
Questi comandi monteranno le condivisioni dal computer host sulla macchina client. È possibile verificare che siano state montate con successo in diversi modi. È possibile controllare questo con un comando mount
o findmnt
, ma df -h
fornisce un output più leggibile che illustra come l’utilizzo del disco sia visualizzato in modo diverso per le condivisioni NFS:
OutputFilesystem Size Used Avail Use% Mounted on
udev 480M 0 480M 0% /dev
tmpfs 99M 5.6M 94M 6% /run
/dev/vda1 25G 1.3G 23G 6% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 4.4M 100M 5% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
203.0.113.0:/var/nfs/general 25G 1.3G 23G 6% /nfs/general
203.0.113.0:/home 25G 1.3G 23G 6% /nfs/home
Entrambe le condivisioni che hai montato appaiono in fondo. Poiché sono state montate dallo stesso filesystem, mostrano lo stesso utilizzo del disco. Per verificare quanto spazio è effettivamente utilizzato sotto ciascun punto di montaggio, utilizzare il comando di utilizzo del disco du
e il percorso del montaggio. Il flag -s
fornisce un riepilogo dell’uso anziché visualizzare l’uso per ogni file. Il flag -h
stampa un output leggibile:
Output44K /nfs/home
Questo ti mostra che i contenuti dell’intera directory home stanno utilizzando solo 44K dello spazio disponibile.
Passaggio 6 — Test dell’Accesso NFS
Successivamente, testa l’accesso alle condivisioni scrivendo qualcosa su ciascuna di esse.
Esempio 1: La Condivisione a Scopo Generale
Prima di tutto, scrivi un file di test nella condivisione /var/nfs/general
:
Quindi, controlla la sua proprietà:
Output-rw-r--r-- 1 nobody nogroup 0 Feb 7 23:53 /nfs/general/general.test
Poiché hai montato questo volume senza modificare il comportamento predefinito di NFS e hai creato il file come utente root della macchina client tramite il comando sudo
, la proprietà del file sarà impostata su nobody:nogroup
. Gli amministratori delle macchine client non saranno in grado di eseguire azioni amministrative tipiche, come cambiare il proprietario di un file o creare una nuova directory per un gruppo di utenti, su questa condivisione montata da NFS.
Esempio 2: La Condivisione della Directory Home
Per confrontare i permessi della condivisione a Scopo Generale con quelli della condivisione della Directory Home, crea un file in /nfs/home
allo stesso modo:
Quindi esamina la proprietà del file:
Output-rw-r--r-- 1 root root 0 Feb 7 23:56 /nfs/home/home.test
Hai creato home.test
come root usando il comando sudo
, esattamente nello stesso modo in cui hai creato il file general.test
. Tuttavia, in questo caso è di proprietà di root perché hai sovrascritto il comportamento predefinito quando hai specificato l’opzione no_root_squash
su questo mount. Ciò consente ai tuoi utenti root sulla macchina client di agire come root e rende molto più comoda l’amministrazione degli account utente. Allo stesso tempo, significa che non devi concedere a questi utenti l’accesso root sull’host.
Passaggio 7 — Montaggio delle Directory NFS Remote all’Avvio
Puoi montare automaticamente le condivisioni NFS remote all’avvio aggiungendole al file /etc/fstab
sul client.
Apri il seguente file con privilegi di root nel tuo editor di testo preferito:
Alla fine del file, aggiungi una riga per ciascuna delle tue condivisioni, come segue:
. . .
203.0.113.0:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
203.0.113.0:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Nota: Puoi trovare ulteriori informazioni sulle opzioni specificate qui nella pagina man
di NFS. Puoi accedere a questa eseguendo il seguente comando:
Il server client monterà automaticamente le partizioni remote all’avvio, anche se potrebbe richiedere alcuni istanti per stabilire la connessione e rendere disponibili le condivisioni.
Passaggio 8 — Smontare una Condivisione Remota NFS
Se non desideri più che la directory remota sia montata sul tuo sistema, puoi smontarla uscendo dalla struttura della directory della condivisione e smontandola.
Prima cambia nella directory home:
Quindi smonta /nfs/home
. Tieni presente che il comando si chiama umount
e non unmount
come potresti aspettarti:
Successivamente, smonta /nfs/general
:
Questo rimuoverà le condivisioni remote, lasciando accessibile solo lo storage locale:
Output
Filesystem Size Used Avail Use% Mounted on
udev 480M 0 480M 0% /dev
tmpfs 99M 5.5M 94M 6% /run
/dev/vda1 25G 1.3G 23G 6% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 4.4M 100M 5% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
Se vuoi anche impedire che vengano rimontate al successivo riavvio, modifica /etc/fstab
ed elimina la riga o commentala inserendo un carattere #
all’inizio della riga. Puoi anche impedire il montaggio automatico rimuovendo l’opzione auto
, che ti permetterà di montarlo manualmente.
Conclusione
In questo tutorial, hai creato un host NFS e hai illustrato alcuni comportamenti chiave di NFS creando due diverse montature NFS, che hai condiviso con il tuo cliente NFS. Se stai cercando di implementare NFS in produzione, è importante notare che il protocollo stesso non è criptato. Nei casi in cui si condividono file su una rete privata, questo potrebbe non essere un problema. In altri casi, sarà necessario utilizzare una VPN o qualche altro tipo di tunnel crittografato per proteggere i tuoi dati. Tieni presente che questo spesso comporta una significativa riduzione delle prestazioni. Se le prestazioni sono un problema, considera l’utilizzo di SSHFS.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-18-04