Come configurare un mount NFS su Ubuntu 18.04

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.

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:

  1. sudo apt update

Successivamente, installare il pacchetto:

  1. sudo apt install nfs-kernel-server

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:

  1. sudo apt update

Quindi, installare il pacchetto:

  1. sudo apt install nfs-common

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:

  1. sudo mkdir /var/nfs/general -p

Poiché lo stai creando con sudo, la directory è di proprietà dell’utente root dell’host:

  1. ls -la /var/nfs/general
Output
total 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:

  1. sudo chown nobody:nogroup /var/nfs/general

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:

  1. sudo nano /etc/exports

Il file contiene dei commenti che mostrano la struttura generale di ogni riga di configurazione. La sintassi è la seguente:

/etc/exports
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:

/etc/exports
/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:

  1. sudo systemctl restart nfs-kernel-server

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:

  1. sudo ufw status
Output
Status: 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:

  1. sudo ufw allow from 203.0.113.24 to any port nfs

Puoi verificare la modifica eseguendo quanto segue:

  1. sudo ufw status

Dovresti ricevere un elenco di traffico consentito dalla porta 2049 nell’output:

Output
Status: 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::

  1. sudo mkdir -p /nfs/general

Poi eseguire questo comando per creare la seconda::

  1. sudo mkdir -p /nfs/home

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:

  1. sudo mount 203.0.113.0:/var/nfs/general /nfs/general
  2. sudo mount 203.0.113.0:/home /nfs/home

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:

  1. df -h
Output
Filesystem 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:

  1. du -sh /nfs/home
Output
44K /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:

  1. sudo touch /nfs/general/general.test

Quindi, controlla la sua proprietà:

  1. ls -l /nfs/general/general.test
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:

  1. sudo touch /nfs/home/home.test

Quindi esamina la proprietà del file:

  1. ls -l /nfs/home/home.test
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:

  1. sudo nano /etc/fstab

Alla fine del file, aggiungi una riga per ciascuna delle tue condivisioni, come segue:

/etc/fstab
. . .
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:

  1. man nfs

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:

  1. cd ~

Quindi smonta /nfs/home. Tieni presente che il comando si chiama umount e non unmount come potresti aspettarti:

  1. sudo umount /nfs/home

Successivamente, smonta /nfs/general:

  1. sudo umount /nfs/general

Questo rimuoverà le condivisioni remote, lasciando accessibile solo lo storage locale:

  1. df -h
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