Network File System (NFS) è un protocollo di file system distribuito che consente di condividere directory remote 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.
Il protocollo NFS non è crittografato per impostazione predefinita e, a differenza di Samba, non fornisce l'autenticazione dell'utente. L'accesso al server è limitato dagli indirizzi IP o dai nomi host dei client.
In questo tutorial, eseguirai 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 agiranno come 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
Configura il server NFS #
Questa sezione spiega come installare i pacchetti necessari, creare ed esportare le directory NFS e configurare il firewall.
Installazione del server NFS #
Il pacchetto "nfs-utils" fornisce le utilità e i demoni NFS per il server NFS. Per installarlo esegui il seguente comando:
sudo dnf install nfs-utils
Una volta completata l'installazione, abilita e avvia il servizio NFS digitando:
sudo systemctl enable --now nfs-server
Per impostazione predefinita, su CentOS 8 NFS le versioni 3 e 4.x sono abilitate, la versione 2 è disabilitata. NFSv2 è piuttosto vecchio ora e non c'è motivo per abilitarlo. Per verificarlo, esegui il seguente cat
comando:
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
Le opzioni di configurazione del server NFS sono impostate in /etc/nfsmount.conf
e /etc/nfs.conf
File. Le impostazioni predefinite sono sufficienti per il nostro tutorial.
Creazione dei file system #
Quando si configura un server NFSv4, è buona norma utilizzare una directory radice NFS globale e associare il montaggio delle directory effettive al punto di montaggio della condivisione. In questo esempio useremo il /srv/nfs4
directory come radice NFS.
Per spiegare meglio come configurare i mount NFS, condivideremo due directory (/var/www
e /opt/backups
) con diverse impostazioni di configurazione.
Il /var/www/
è di proprietà dell'utente e del gruppo apache
e /opt/backups
è di proprietà di root
.
Crea il filesystem di esportazione usando mkdir
comando:
sudo mkdir -p /srv/nfs4/{backups,www}
Monta le directory effettive:
sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www
Per rendere permanenti i mount di binding, aggiungi le seguenti voci a /etc/fstab
file:
sudo nano /etc/fstab
/etc/fstab/opt/backups /srv/nfs4/backups none bind 0 0
/var/www /srv/nfs4/www none bind 0 0
Esportazione dei file system #
Il passaggio successivo consiste nel definire i file system che verranno esportati dal server NFS, le opzioni di condivisione ei client a cui è consentito accedere a tali file system. Per farlo, apri il /etc/exports
file:
sudo nano /etc/exports
Esporta il www
e backups
directory e consentire l'accesso solo ai client su 192.168.33.0/24
rete:
/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 radice NFS /srv/nfs4
. L'accesso a questo volume NFS è consentito solo ai client dal 192.168.33.0/24
sottorete. Il crossmnt
l'opzione è richiesta per condividere le directory che sono sottodirectory di una directory esportata.
La seconda riga mostra come specificare più regole di esportazione per un file system. Esporta il /srv/nfs4/backups
directory e consente solo l'accesso in lettura all'intero 192.168.33.0/24
intervallo e accesso in lettura e scrittura a 192.168.33.3
. La sync
opzione dice 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, digita man exports
nel tuo terminale.
Salva il file ed esporta le condivisioni:
sudo exportfs -ra
Devi eseguire il comando sopra ogni volta che modifichi /etc/exports
file. Eventuali 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 relative opzioni. Come puoi vedere, ci sono anche opzioni che non abbiamo definito in /etc/exports
file. Queste sono opzioni predefinite e, se desideri modificarle, dovrai 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 avere privilegi di root sulle condivisioni montate. Mapperà UID
radice e GID
a nobody
/nogroup
UID
/GID
.
Affinché gli utenti sulle macchine client abbiano accesso, NFS prevede che gli ID utente e gruppo del client corrispondano a quelli sul server. Un'altra opzione consiste nell'utilizzare la funzione di mappatura id NFSv4 che traduce gli ID di utenti e gruppi in nomi e viceversa.
Questo è tutto. A questo punto, hai configurato un server NFS sul tuo server CentOS. Ora puoi passare al passaggio successivo e configurare i client e connetterti al server NFS.
Configurazione 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 permanentemente l'accesso dal 192.168.33.0/24
sottorete:
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
Configura 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.
Installazione del client NFS #
Sulle macchine del client, installa 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 esegui:sudo apt update
sudo apt install nfs-common
-
Installa il client NFS su CentOS e Fedora
Su Red Hat e sui suoi derivati installa
nfs-utils
pacchetto:sudo yum install nfs-utils
Montaggio dei file system #
Lavoreremo sulla macchina client con IP 192.168.33.110
, che ha accesso in lettura e scrittura a /srv/nfs4/www
file system e accesso in sola lettura a /srv/nfs4/backups
sistema di file.
Crea due nuove directory per i punti di montaggio. Puoi creare queste directory in qualsiasi posizione desideri.
sudo mkdir -p /backups
sudo mkdir -p /srv/www
Monta i file system esportati con mount
comando:
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. Puoi anche utilizzare il nome host invece dell'indirizzo IP, ma deve essere risolvibile dalla macchina client. Questo di solito viene fatto mappando il nome host sull'IP in /etc/hosts
file.
Quando si monta un filesystem NFSv4, è necessario omettere la directory radice NFS, quindi invece di /srv/nfs4/backups
devi usare /backups
.
Verificare che i file system remoti siano montati correttamente utilizzando mount o df
comando:
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 mount al riavvio, apri /etc/fstab
file:
sudo nano /etc/fstab
e aggiungi le seguenti righe:
/etc/fstab192.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 trovare maggiori informazioni sulle opzioni disponibili durante il montaggio di un file system NFS, digitare man nfs
nel tuo terminale.
Un'altra opzione per montare i file system remoti consiste nell'usare autofs
strumento o per creare un'unità systemd.
Test dell'accesso NFS #
Testiamo l'accesso alle condivisioni creando un nuovo file in ognuna di esse.
Per prima cosa, prova a creare un file di prova in /backups
directory utilizzando il touch
comando:
sudo touch /backups/test.txt
Il /backup
il file system viene esportato in sola lettura e, come previsto, vedrai un Permission denied
messaggio di errore:
touch: cannot touch ‘/backups/test’: Permission denied
Quindi, prova a creare un file di prova in /srv/www
directory come root usando sudo
comando:
sudo touch /srv/www/test.txt
Di nuovo, vedrai Permission denied
messaggio.
touch: cannot touch ‘/srv/www’: Permission denied
Il /var/www
la directory è di proprietà di apache
utente e questa condivisione ha root_squash
set di opzioni, che associa l'utente root a nobody
utente e nogroup
gruppo che non dispone delle autorizzazioni di scrittura per la condivisione remota.
Supponendo che un utente apache
esiste sul computer client con lo stesso UID
e GID
come sul server remoto (che dovrebbe essere il caso se, ad esempio, hai installato apache su entrambe le macchine), puoi provare a creare un file come utente apache
con:
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 nel /srv/www
directory:
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
Smontaggio del 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 il /backup
condividere che eseguiresti:
sudo umount /backups
Se il punto di montaggio è definito in /etc/fstab
file, assicurati di rimuovere la riga o di commentarla aggiungendo #
all'inizio della riga.