Linux

Come installare e configurare un server NFS su Ubuntu 20.04

Come installare e configurare un server NFS su Ubuntu 20.04

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 dai nomi host del client.

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

Prerequisiti #

Useremo due macchine, una con Ubuntu 20.04, che fungerà da server NFS, e un altro che esegue 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:

IP server NFS: 192.168.33.10 IP client NFS: dal 192.168.33.intervallo 0/24 

Configura il server NFS #

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

Installazione del server NFS #

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

sudo apt updatesudo apt install nfs-kernel-server

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

Su Ubuntu 20.04, NFS versione 2 è disabilitato. Le versioni 3 e 4 sono abilitate. Puoi verificarlo eseguendo quanto segue gatto comando:

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

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

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

Creazione dei file system #

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

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

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

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

Associa montare le directory ai punti di montaggio condivisi:

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

Per rendere permanenti i montaggi del binding durante i riavvii, apri il pulsante /etc/fstab file:

sudo nano /etc/fstab

e aggiungi le seguenti righe:

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

Esportazione dei file system #

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

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

esporta host (opzioni) 

Dove esportare è la directory esportata, ospite è un nome host o un indirizzo/intervallo IP che può accedere all'esportazione e opzioni sono le opzioni dell'host.

Apri il /etc/export file e aggiungere le seguenti righe:

sudo nano /etc/exports
/etc/export
/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) 

La prima riga contiene il fsid=0 opzione, 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 è 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. L'accesso in lettura è consentito all'intero 192.168.33.0/24 intervallo e sia l'accesso in lettura che in scrittura solo al 192.168.33.3 indirizzo IP. Il sincronizzare l'opzione dice a NFS di scrivere le modifiche sul disco prima di rispondere.

L'ultima riga è autoesplicativa. Per maggiori informazioni su tutte le opzioni disponibili type l'uomo esporta nel tuo terminale.

Salva il file ed esporta le condivisioni:

sudo exportfs -ar

Devi eseguire il comando sopra ogni volta che modifichi il /etc/export file. Se ci sono errori o avvisi, verranno mostrati 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 in /etc/export file. Quelle sono opzioni predefinite e se vuoi cambiarle dovrai impostare esplicitamente quelle opzioni.

/srv/nfs4/backup 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 riguardo alla sicurezza NFS. Impedisce agli utenti root connessi dai client di avere i privilegi di root sulle condivisioni montate mappando root UID e GID per nessuno/nessun gruppo 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 è usare la funzione 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 puoi passare al passaggio successivo e configurare i client e connetterti al server NFS.

Configurazione firewall #

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

sudo ufw consenti da 192.168.33.0/24 a qualsiasi porta nfs

Verifica la modifica:

sudo ufw status

L'output dovrebbe mostrare che il traffico sulla porta 2049 È permesso:

All'azione da -- ------ ---- 2049 PERMETTI 192.168.33.0/24 22/tcp CONSENTI ovunque 22/tcp (v6) CONSENTI ovunque (v6) 

Configura i client NFS #

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

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

Installazione del client NFS #

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

Montaggio dei file system #

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

Crea due nuove directory per i punti di montaggio:

sudo mkdir -p /backupssudo mkdir -p /srv/www

Puoi creare le directory in qualsiasi posizione tu voglia.

Montare i file system esportati con il montare comando:

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

Dove 192.168.33.10 è l'IP del server NFS. Puoi anche usare il nome host invece dell'indirizzo IP, ma deve essere risolvibile dal computer client. Questo di solito viene fatto mappando il nome host sull'IP nel /etc/host file.

Quando si monta un filesystem NFSv4, omettere la directory radice di NFS. Uso /backup, invece di /srv/nfs4/backup.

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:

Dimensione del filesystem utilizzata Avail Use% Montato su 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:/backup 124G 2.8G 115G 3%/backup 192.168.33.10:/www 124G 2.8G 115G 3% /srv/www

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

sudo nano /etc/fstab
/etc/fstab
192.168.33.10:/backup/backup nfs default,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, digitare uomo nfs nel tuo terminale.

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

Test dell'accesso NFS #

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

Per prima cosa, prova a creare un file di prova nel /backup directory utilizzando il toccare comando:

sudo touch /backup/test.TXT

Il /backup il file system viene esportato in sola lettura e come previsto vedrai un Permesso negato messaggio di errore:

touch: impossibile toccare '/backups/test': Permesso negato 

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

sudo touch /srv/www/test.TXT

Di nuovo, vedrai Permesso negato Messaggio.

touch: impossibile toccare '/srv/www': Permesso negato 

Se ricordi, il /var/www directory è di proprietà del www-dati utente e questa condivisione ha root_squash set di opzioni che associa l'utente root al nessuno utente e nessun gruppo gruppo che non ha i permessi di scrittura sulla condivisione remota.

Supponendo che tu abbia un www-dati utilizzare 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-dati:

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 elencare i file nel in /srv/www elenco:

ls -la /srv/www

L'output dovrebbe mostrare il file appena creato:

drwxr-xr-x 3 www-data www-data 4096 10 aprile 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 smontare comando.

Ad esempio, per smontare il /backup condividi, eseguiresti:

sudo umount /backups

Se il punto di montaggio è definito nel /etc/fstab file, assicurati di rimuovere la riga o commentala 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 utilizzare SSHFS per montare directory remote su una connessione SSH. SSHFS è crittografato per impostazione predefinita e molto più facile da configurare e utilizzare.

Sentiti libero di lasciare un commento se hai domande.

Come utilizzare AutoKey per automatizzare i giochi Linux
AutoKey è un'utilità di automazione desktop per Linux e X11, programmata in Python 3, GTK e Qt. Utilizzando la sua funzionalità di scripting e MACRO, ...
Come mostrare il contatore FPS nei giochi Linux
I giochi Linux hanno avuto una grande spinta quando Valve ha annunciato il supporto Linux per il client Steam e i loro giochi nel 2012. Da allora, mol...
Come scaricare e giocare a Sid Meier's Civilization VI su Linux
Introduzione al gioco Civilization 6 è una versione moderna del concetto classico introdotto nella serie dei giochi Age of Empires. L'idea era abbasta...