Come installare e configurare un server NFS su Ubuntu 20.04

13 apr 2021 8 min di lettura
Come installare e configurare un server NFS su Ubuntu 20.04
Indice dei contenuti

Introduzione

NFS o Network File System è un protocollo di file system distribuito che consente di condividere directory su una rete. Con NFS, puoi montare directory remote sul tuo sistema e lavorare con i file sulla macchina remota come se fossero file locali.

Per impostazione predefinita, il protocollo NFS non è crittografato e non fornisce l'autenticazione dell'utente. L'accesso al server è limitato dagli indirizzi IP o dall'hostname del client.

Questo articolo spiega come configurare un server NFSv4 su Ubuntu 20.04 LTS Focal Fossa. Ti mostreremo anche come montare un file system NFS sulla macchina client.

Prerequisiti

Useremo due macchine, una che esegue Ubuntu 20.04 LTS, che fungerà da server NFS, e un'altra che eseguirà qualsiasi altra distribuzione Linux su cui monteremo la condivisione. Il server e i client dovrebbero essere in grado di comunicare tra loro su una rete privata. È possibile utilizzare indirizzi IP pubblici e configurare il firewall del server per consentire il traffico sulla porta 2049 solo da fonti attendibili.

Le macchine in questo esempio hanno i seguenti IP:

NFS Server IP: 192.168.33.10
NFS Clients IPs: From the 192.168.33.0/24 range

Configurare il server NFS

Il primo passo è configurare il server NFS. Installeremo i pacchetti necessari, creeremo ed esporteremo le directory NFS e configureremo il firewall.

Installare server NFS

Il pacchetto del server NFS fornisce il supporto per lo spazio utente necessario per eseguire il server del kernel NFS. Per installare il pacchetto, esegui:

sudo apt update
sudo apt install nfs-kernel-server

Una volta completata l'installazione, i servizi NFS verranno avviati automaticamente.

Su Ubuntu 20.04, la versione 2 di NFS è disabilitata. Le versioni 3 e 4 sono abilitate. Puoi verificarlo eseguendo il seguente comando cat:

sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

NFSv2 è piuttosto vecchio adesso e non c'è motivo per abilitarlo.

La configurazione del server NFS è definita nei file file/etc/default/nfs-kernel-server e /etc/default/nfs-common. Le impostazioni predefinite sono sufficienti per la maggior parte delle situazioni.

Creare i file system

Il server NFSv4 utilizza una directory principale globale e le directory esportate sono relative a questa directory. È possibile collegare il punto di montaggio della condivisione alle directory che si desidera esportare utilizzando i montaggi bind.

In questo esempio, imposteremo la directory /srv/nfs4 come root NFS. Per spiegare meglio come possono essere configurati i montaggi NFS, condivideremo due directory (/var/wwwe /opt/backups) con diverse impostazioni di configurazione. La directory /var/www/ è di proprietà dell'utente www-data e /opt/backups è di proprietà di root.

Per prima cosa crea la directory principale e i punti di montaggio condivisi:

sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www

Associare il montaggio delle directory ai punti di montaggio della condivisione:

sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www

Per rendere permanenti i montaggi di bind durante i riavvii, apri il file /etc/fstab:

sudo nano /etc/fstab

Aggiungi le seguenti righe:

/opt/backups /srv/nfs4/backups  none   bind   0   0
/var/www     /srv/nfs4/www      none   bind   0   0
/etc/fstab

Esportare i file system

Il passaggio successivo consiste nell'aggiungere i file system che verranno esportati e i client autorizzati ad accedere a tali condivisioni al file /etc/exports.

Ogni riga per un file system esportato ha la seguente forma:

export host(options)

export indica la directory esportata, host è l'hostname o un indirizzo IP/intervallo che può accedere all'esportazione e options sono le opzioni dell'host.

Apri il file /etc/exports e aggiungi le seguenti righe:

sudo nano /etc/exports
/srv/nfs4         192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www     192.168.33.20(rw,sync,no_subtree_check)
/etc/exports

La prima riga contiene l'opzione fsid=0, che definisce la directory root di NFS (/srv/nfs4). L'accesso a questo volume NFS è consentito solo ai client dalla sottorete 192.168.33.0/24. L'opzione crossmnt è necessaria per condividere directory che sono sottodirectory di una directory esportata.

La seconda riga mostra come specificare più regole di esportazione per un file system. L'accesso in lettura è consentito all'intero dell'intervallo 192.168.33.0/24 e l'accesso in lettura e scrittura solo all'indirizzo IP 192.168.33.3. L'opzione sync dice a NFS di scrivere le modifiche sul disco prima di rispondere.

L'ultima riga è autoesplicativa. Per ulteriori informazioni su tutte le opzioni disponibili, digita il comando man exports nel tuo terminale.

Salva il file ed esporta le condivisioni:

sudo exportfs -ar

È necessario eseguire il comando sopra ogni volta che si modifica il file /etc/exports. Se sono presenti errori o avvisi, verranno visualizzati sul terminale.

Per visualizzare le esportazioni attive correnti e il loro stato, utilizzare:

sudo exportfs -v

L'output includerà tutte le azioni con le relative opzioni. Come puoi vedere ci sono anche opzioni che non abbiamo definito nel file /etc/exports. Queste sono opzioni predefinite e se vuoi modificarle dovrai impostare esplicitamente quelle opzioni.

/srv/nfs4/backups
		192.168.33.3(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/www 	192.168.33.20(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4     	192.168.33.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/backups
		192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

Su Ubuntu, root_squash è abilitato per impostazione predefinita. Questa è una delle opzioni più importanti per quanto riguarda la sicurezza NFS. Impedisce agli utenti root collegati dai client di avere privilegi di root sulle condivisioni montate mappando root UID e GID su nobody/ nogroup UID/ GID.

Affinché gli utenti sulle macchine client abbiano accesso, NFS si aspetta che gli ID utente e gruppo del client corrispondano a quelli sul server. Un'altra opzione è quella di utilizzare la funzionalità di mappatura id NFSv4 che traduce gli ID utente e gruppo in nomi e viceversa.

Questo è tutto. A questo punto, hai configurato un server NFS sul tuo server Ubuntu. È ora possibile passare alla fase successiva e configurare i client e connettersi al server NFS.

Configurare il firewall

Se stai installando Jenkins su un server Ubuntu remoto protetto da un firewall, dovrai abilitare il traffico sulla porta NFS:

sudo ufw allow from 192.168.33.0/24 to any port nfs

Verifica la modifica:

sudo ufw status

L'output dovrebbe mostrare che il traffico sulla porta 2049 è consentito:

To                         Action      From
--                         ------      ----
2049                       ALLOW       192.168.33.0/24           
22/tcp                     ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)  

Configurare i client NFS

Ora che il server NFS è configurato e le condivisioni vengono esportate, il passo successivo è configurare i client e montare i file system remoti.

Ci concentreremo sui sistemi Linux, ma puoi anche montare la condivisione NFS su macchine macOS e Windows.

Installare il client NFS

Sulle macchine client, dobbiamo installare solo gli strumenti necessari per montare un file system NFS remoto.

Installare il client NFS su Debian e Ubuntu

Il nome del pacchetto che include programmi per il montaggio di file system NFS su distribuzioni basate su Debian è nfs-common. Per installarlo, esegui:

sudo apt update
sudo apt install nfs-common

Installare il client NFS su CentOS e Fedora

Su Red Hat e sui suoi derivati, installa il pacchetto nfs-utils:

sudo yum install nfs-utils

Montare i file system

Lavoreremo sulla macchina client con IP 192.168.33.20, che ha accesso in lettura e scrittura al file system /srv/nfs4/www e accesso in sola lettura al file system /srv/nfs4/backups.

Crea due nuove directory per i punti di montaggio:

sudo mkdir -p /backups
sudo mkdir -p /srv/www

Puoi creare le directory in qualsiasi posizione desideri.

Montare i file system esportati con il comando mount:

sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backups
sudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www

192.168.33.10 è l'IP del server NFS. È inoltre possibile utilizzare l'hostname al posto dell'indirizzo IP, ma deve essere risolto dalla macchina client. Questo di solito viene fatto mappando l'hostname sull'IP nel file /etc/hosts.

Quando si monta un filesystem NFSv4, omettere la directory root di NFS. Usa /backups, invece di /srv/nfs4/backups.

Verificare che i file system remoti siano montati correttamente utilizzando il montaggio o il comando df:

df -h

Il comando stamperà tutti i file system montati. Le ultime due righe sono le condivisioni montate:

Filesystem              Size  Used Avail Use% Mounted on
udev                    951M     0  951M   0% /dev
tmpfs                   199M  676K  199M   1% /run
/dev/sda3               124G  2.8G  115G   3% /
tmpfs                   994M     0  994M   0% /dev/shm
tmpfs                   5.0M     0  5.0M   0% /run/lock
tmpfs                   994M     0  994M   0% /sys/fs/cgroup
/dev/sda1               456M  197M  226M  47% /boot
tmpfs                   199M     0  199M   0% /run/user/1000
192.168.33.10:/backups  124G  2.8G  115G   3% /backups
192.168.33.10:/www      124G  2.8G  115G   3% /srv/www

Per rendere permanenti i montaggi al riavvio, apri il file /etc/fstab e aggiungi le seguenti righe:

sudo nano /etc/fstab
192.168.33.10:/backups /backups   nfs   defaults,timeo=900,retrans=5,_netdev	0 0
192.168.33.10:/www /srv/www       nfs   defaults,timeo=900,retrans=5,_netdev	0 0

Per informazioni sulle opzioni disponibili durante il montaggio di un file system NFS, digita il comando man nfs tuo terminale.

Un'altra opzione per montare i file system remoti consiste nell'usare lo strumento autofs o nel creare un'unità systemd.

Test dell'accesso NFS

Testiamo l'accesso alle condivisioni creando un nuovo file su ognuna di esse.

Innanzitutto, prova a creare un file di prova nella directory /backups utilizzando il comando touch:

sudo touch /backups/test.txt

Il file system /backup viene esportato in sola lettura e come previsto vedrai un messaggio di errore Permission denied:

touch: cannot touch ‘/backups/test’: Permission denied

Successivamente, prova a creare un file di prova nella directory /srv/www come root utilizzando il comando sudo:

sudo touch /srv/www/test.txt

Di nuovo, vedrai il messaggio Permission denied.

touch: cannot touch ‘/srv/www’: Permission denied

Se vi ricordate, la directory /var/www è di proprietà dell'utente www-data, e questa condivide l'opzione root_squash che mappa l'utente root all'utente nobody e al gruppo nogroup che non dispone di autorizzazioni di scrittura alla condivisione remota.

Supponendo che tu abbia utilizzato www-data sulla macchina client con lo stesso UID e GID come sul server remoto (che dovrebbe essere il caso se, ad esempio, hai installato nginx su entrambe le macchine), puoi provare a creare un file come utente www-data:

sudo -u www-data touch /srv/www/test.txt

Il comando non mostrerà alcun output, il che significa che il file è stato creato con successo.

Per verificarlo elenca i file nella directory /srv/www:

ls -la /srv/www

L'output dovrebbe mostrare il file appena creato:

drwxr-xr-x 3 www-data www-data 4096 Apr 10 22:18 .
drwxr-xr-x 3 root     root     4096 Apr 10 22:29 ..
-rw-r--r-- 1 www-data www-data    0 Apr 10 21:58 index.html
-rw-r--r-- 1 www-data www-data    0 Apr 10 22:18 test.txt

Smontaggio del file system NFS

Se la condivisione NFS remota non è più necessaria, è possibile smontarla come qualsiasi altro file system montato utilizzando il comando umount.

Ad esempio, per smontare la condivisione /backup, dovresti eseguire:

sudo umount /backups

Se il punto di montaggio è definito nel file /etc/fstab, assicurati di rimuovere la riga o commentarla aggiungendo # all'inizio della riga.

Conclusione

Ti abbiamo mostrato come configurare un server NFS e come montare i file system remoti sulle macchine client. Se stai implementando NFS in produzione e condividi dati sensibili, è una buona idea abilitare l'autenticazione Kerberos.

In alternativa a NFS, puoi usare SSHFS per montare directory remote su una connessione SSH. SSHFS è crittografato per impostazione predefinita ed è molto più facile da configurare e utilizzare.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.