Introduzione

Network File System (NFS) è un protocollo di file system distribuito che consente di condividere directory remote su una rete. Con NFS, è possibile montare directory remote sul proprio sistema e lavorare con i file sul computer remoto come se fossero file locali.

Il protocollo NFS non è crittografato per impostazione predefinita e, diversamente da Samba, non fornisce l'autenticazione dell'utente. L'accesso al server è limitato dagli indirizzi IP o dai nomi host dei client.

In questo tutorial, seguirai i passaggi necessari per configurare un server NFSv4 su CentOS 8. Ti mostreremo anche come montare un file system NFS sul client.

Prerequisiti

Supponiamo che tu abbia un server che esegue CentOS 8 su cui configureremo il server NFS e altre macchine che fungeranno da client NFS. Il server e i client dovrebbero essere in grado di comunicare tra loro su una rete privata. Se il tuo provider di hosting non offre indirizzi IP privati, puoi utilizzare gli 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.148
NFS Clients IPs: From the 192.168.33.0/24 range

Se desideri installare NFS server su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Configurare il server NFS

Questa sezione spiega come installare i pacchetti necessari, creare ed esportare le directory NFS e configurare il firewall.

Installare il server NFS

Il pacchetto "nfs-utils" fornisce le utilità e i daemon NFS per il server NFS. Per installarlo esegui il seguente comando:

sudo dnf install nfs-utils

Una volta completata l'installazione, abilitare e avviare il servizio NFS digitando:

sudo systemctl enable --now nfs-server

Per impostazione predefinita, su CentOS 8 NFS sono abilitate le versioni 3 e 4.x, la versione 2 è disabilitata. NFSv2 è piuttosto vecchio e non c'è motivo di abilitarlo. Per verificarlo, eseguire il comando cat seguente:

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

Le opzioni di configurazione del server NFS sono impostate nei file file /etc/nfsmount.conf e /etc/nfs.conf. Le impostazioni predefinite sono sufficienti per il nostro tutorial.

Creare i file system

Quando si configura un server NFSv4, è buona norma utilizzare una directory root NFS globale e associare il mount delle directory effettive al punto di mount della condivisione. In questo esempio, useremo il director /srv/nfs4 come root NFS.

Per spiegare meglio come è possibile configurare i montaggi NFS, condivideremo due directory (/var/www e /opt/backups) con impostazioni di configurazione diverse.

/var/www/ è di proprietà dell'utente e del gruppo apache e /opt/backups è di proprietà di root.

Creare il filesystem di esportazione usando il comando mkdir:

sudo mkdir -p /srv/nfs4/{backups,www}

Montare le directory effettive:

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

Per rendere permanenti i montaggi di bind, aggiungere le seguenti voci al file /etc/fstab.

In questo tutorial utilizziamo nano, se preferite potete utilizzare vi installato di default sulla maggior parte delle distribuzioni.

sudo dnf install nano
sudo nano /etc/fstab
/opt/backups /srv/nfs4/backups  none   bind   0   0
/var/www     /srv/nfs4/www      none   bind   0   0

Esportare i file system

Il passo successivo è definire i file system che verranno esportati dal server NFS, le opzioni di condivisione e i client a cui è consentito accedere a tali file system. Per fare ciò, apri il file /etc/exports:

sudo nano /etc/exports

Esportare le directory www e backups e consentire l'accesso solo dal client della rete 192.168.33.0/24:

/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.110(rw,sync,no_subtree_check)

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

La seconda riga mostra come specificare più regole di esportazione per un filesystem. Esporta la directory /srv/nfs4/backups e consenti solo l'accesso in lettura all'intero dell'intervallo 192.168.33.0/24 e l'accesso sia in lettura che in scrittura a 192.168.33.3. L'opzione sync permette a NFS di scrivere le modifiche sul disco prima di rispondere.

L'ultima riga dovrebbe essere autoesplicativa. Per ulteriori informazioni su tutte le opzioni disponibili, digitare nel terminale man exports.

Salvare il file ed esportare le condivisioni:

sudo exportfs -ra

È necessario eseguire il comando sopra ogni volta che si modifica il file /etc/exports. In caso di 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 condivisioni con le loro opzioni. Come puoi vedere, ci sono anche opzioni che non abbiamo definito nel file /etc/exports. Queste sono opzioni predefinite e se si desidera modificarle, è necessario impostarle in modo esplicito.

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

root_squash è una delle opzioni più importanti per quanto riguarda la sicurezza NFS. Impedisce agli utenti root connessi dai client di disporre dei privilegi di root sulle condivisioni montate. Mapperà root UID e GID su nobody / nogroup UID / GID.

Affinché gli utenti sui computer client abbiano accesso, NFS prevede che gli ID utente e gruppo del client corrispondano a quelli sul server. Un'altra opzione è quella di utilizzare la funzione idmapping NFSv4 che traduce gli ID utente e gruppo in nomi e viceversa.

Questo è tutto. A questo punto, hai impostato un server NFS sul tuo server CentOS. È ora possibile passare al passaggio successivo e configurare i client e connettersi al server NFS.

Configurare il firewall

FirewallD è la soluzione firewall predefinita su Centos 8.

Il servizio NFS include regole predefinite per consentire l'accesso al server NFS.

I seguenti comandi consentiranno in modo permanente l'accesso dalla sottorete 192.168.33.0/24:

sudo firewall-cmd --new-zone=nfs --permanent
sudo firewall-cmd --zone=nfs --add-service=nfs --permanent
sudo firewall-cmd --zone=nfs --add-source=192.168.33.0/24 --permanent
sudo firewall-cmd --reload

Configurare i client NFS

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

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

Installare il client NFS

Sulle macchine del client, installare gli strumenti necessari per montare i file system NFS remoti.

Installa 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 eseguire:

sudo apt update
sudo apt install nfs-common

Installa il client NFS su CentOS e Fedora

Su Red Hat e i suoi derivati ​​installare il pacchetto nfs-utils:

sudo yum install nfs-utils

Montare i file system

Lavoreremo sul computer client con IP 192.168.33.110, che ha accesso in lettura e scrittura al file system /srv/nfs4/www e accesso in sola lettura al file system /srv/nfs4/backups.

Creare due nuove directory per i punti di montaggio. È possibile creare queste directory in qualsiasi posizione desiderata.

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

Montare i file system esportati con il comando mount:

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

Dove 192.168.33.148 è l'IP del server NFS. È inoltre possibile utilizzare il nome host anziché l'indirizzo IP, ma deve essere risolvibile dal computer client. Questo di solito viene eseguito mappando il nome host sull'IP nel file /etc/hosts.

Quando si monta un filesystem NFSv4, è necessario omettere la directory root NFS, quindi invece di utilizzare /srv/nfs4/backups, usare /backups.

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

df -h

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

...
192.168.33.148:/backups           9.7G  1.2G  8.5G  13% /backups
192.168.33.148:/www               9.7G  1.2G  8.5G  13% /srv/www

Per rendere permanenti i montaggi al riavvio, aprire il file /etc/fstab:

sudo nano /etc/fstab

Aggiungi le seguenti righe:

192.168.33.148:/backups /backups   nfs   defaults,timeo=900,retrans=5,_netdev	0 0
192.168.33.148:/www /srv/www       nfs   defaults,timeo=900,retrans=5,_netdev	0 0

Per ulteriori informazioni sulle opzioni disponibili durante il montaggio di un file system NFS, digitare man nfs nel terminale.

Un'altra opzione per montare i file system remoti è utilizzare lo strumento autofs o creare un'unità systemd.

Test dell'accesso NFS

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

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

sudo touch /backups/test.txt

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

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

Quindi, prova a creare un file di test nella directory /srv/www come root usando il comando sudo:

sudo touch /srv/www/test.txt

Ancora una volta, vedrai un messaggio Permission denied.

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

La directory /var/www  è di proprietà dell'utente apache, e questa condivisione ha l'opzione root_squash impostata, che mappa l'utente root all'utente nobody e il gruppo nogroup, che non dispone di autorizzazioni di scrittura, alla condivisione remota.

Supponendo che esista un utente apache sul computer client con lo stesso UID e GID sul server remoto (che dovrebbe essere il caso se, ad esempio, hai installato apache su entrambi i computer ), puoi provare a creare un file come utente apache con il seguente comando:

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

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

Per verificarlo, elenca i file nella directory /srv/www con il comando ls:

ls -la /srv/www

L'output dovrebbe mostrare il file appena creato:

drwxr-xr-x 3 apache apache 4096 Jun 23 22:18 .
drwxr-xr-x 3 root     root     4096 Jun 23 22:29 ..
-rw-r--r-- 1 apache apache    0 Jun 23 21:58 index.html
-rw-r--r-- 1 apache apache    0 Jun 23 22:18 test.txt

Smontare il file system NFS

Se non hai più bisogno della condivisione NFS remota, puoi smontarla come qualsiasi altro file system montato usando il comando umount. Ad esempio, per smontare la condivisione di /backup si eseguirà:

sudo umount /backups

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

Conclusione

In questo tutorial, ti abbiamo mostrato come impostare un server NFS e come montare i file system remoti sui computer client. Se stai implementando NFS in produzione e condividendo dati sensibili, è una buona idea abilitare l'autenticazione Kerberos.

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