Torna al blog

Configurazione di un mount NFS su Ubuntu 20.04

Configurazione di un mount NFS su Ubuntu 20.04

Il Network File System (NFS) è una soluzione di archiviazione distribuita. Si tratta di un protocollo di file system che consente di montare directory remote sul server locale e di utilizzarle come se si trattasse di uno spazio di archiviazione locale. NFS consente a più client di condividere l'archiviazione remota. È particolarmente adatto per gli ambienti che richiedono regolarmente risorse condivise. NFS si basa sul sistema ONC RPC (Open Network Computing Remote Procedure Call). È uno standard aperto definito in RFC (Request for Comments). Ciò consente a chiunque di implementare il protocollo.

In questa guida, esamineremo i passaggi per configurare e impostare un montaggio NFS su Ubuntu 20.04.

Prerequisiti

Come suggerisce la descrizione di NFS, la configurazione di NFS si compone di due parti:

  • Host: Memorizza fisicamente i dati e condivide l'archiviazione con i sistemi "client".

  • Client: Il sistema che si connette all'"host" e utilizza l'archiviazione remota come se fosse locale.

Per la nostra dimostrazione, utilizzeremo due server, entrambi configurati con Ubuntu 20.04. Ecco una guida semplice su come configurare il tuo server Ubuntu. In tutta la guida, faremo riferimento a questi server come host e client. Nota che l'azione per il client sarà la stessa anche se ce n'è più di uno.

Ai server sono assegnati i seguenti indirizzi IP. Questi server sono ospitati da CloudSigma:

  • host: 31.171.240.79

  • client: 31.171.250.109

Assicurati di sostituirli con gli indirizzi IP appropriati.

Installazione di NFS

NFS è prontamente disponibile nei repository ufficiali di Ubuntu. Esistono diversi pacchetti software per i sistemi host e client .

  • Installazione di NFS sull'host

Sull'host, abbiamo bisogno dei componenti che abilitano la macchina a fungere da NFS host. Si presenta sotto forma del pacchetto nfs-kernel-server. Ubuntu utilizza APT come gestore dei pacchetti. Per prima cosa, avvia il terminale e aggiorna il database dei pacchetti APT :

Server Apt Update

Successivamente, installa il pacchetto nfs-kernel-server. Se necessario, APT si occuperà di eventuali dipendenze aggiuntive:

Install nfs kernel server

  • Installazione di NFS sul client

Sul sistema client, abbiamo bisogno della funzionalità per connetterci alle directory dell' host attraverso la rete. Non richiede la funzionalità del server NFS. Su Ubuntu, è incluso nel pacchetto nfs-common. Aggiorna il database dei pacchetti APT :

Client apt update

Quindi, installa il pacchetto nfs-common pacchetto:

Install nfs common

Directory condivise sull'host

Successivamente, condivideremo due directory separate, ciascuna con una configurazione diversa. Dimostreremo due modi principali in cui funzionano i montaggi NFS rispetto all'accesso come superutente. Per impostazione predefinita, i superutenti hanno l'autorità di eseguire qualsiasi operazione sull'intero sistema. Tuttavia, le directory montate tramite NFS non fanno parte del sistema su cui sono montate. Il server NFS rifiuterà di eseguire qualsiasi operazione che richieda i privilegi di superutente. Questa restrizione si traduce nel fatto che i client non hanno l'autorità di scrivere, riassegnare la proprietà e svolgere altre attività da superutente sui montaggi NFS.

È possibile consentire a determinati utenti fidati di eseguire queste attività sui file system montati. Tuttavia, ciò comporta un elemento di rischio, poiché un tale client può potenzialmente ottenere l'accesso completo all' host. Questo rischio può essere mitigato con una corretta gestione dei permessi degli utenti. Su Linux, il file sudoers controlla tutti i privilegi degli utenti sul sistema. Per ulteriori informazioni, puoi dare un'occhiata al nostro tutorial su come configurare il file sudoers di Linux.

  • Montaggio per scopi generali

Il primo esempio sarà un montaggio NFS per scopi generali con i comportamenti NFS predefiniti. In questo approccio, è estremamente difficile per il client eseguire azioni da superutente sui montaggi. Questo tipo di montaggio NFS viene comunemente distribuito per l'archiviazione di file, il caricamento tramite un CMS (Content Management System) o la condivisione di file di progetto, ecc.

I seguenti passaggi devono essere eseguiti sul sistema host. Per prima cosa, crea una directory per la condivisione denominata nfs:

Create nfs general dir

Poiché la directory è stata creata con sudo privilegi, il proprietario sarà root:

List nfs general

Come configurazione predefinita, NFS tradurrà qualsiasi operazione root dal lato client nelle credenziali nobody:nogroup per misure di sicurezza. Per coerenza, cambia la proprietà della directory per farla corrispondere alle credenziali:

Change owner nogroup

  • Directory home

Il secondo esempio consiste nel rendere disponibile per i client la directory home dell'utente host . Gli amministratori fidati dei client selezionati possono accedere per gestire comodamente gli utenti. La /home directory esiste già per impostazione predefinita, quindi non è necessario creare alcuna directory. Per quanto riguarda i permessi della directory, non è necessario apportare modifiche poiché ciò causerebbe più problemi che benefici.

Configurazione delle esportazioni NFS

Le directory da condividere sono ora create. Successivamente, NFS deve essere configurato per renderle disponibili per i client. NFS utilizza un file di configurazione per tenere traccia di quali directory condividere. Apri il seguente file di configurazione NFS nel tuo editor di testo preferito:

exports file

La sezione dei commenti del file descrive la struttura sintattica generale della configurazione. In breve, qualsiasi directory deve essere dichiarata nel seguente formato:

Per le due directory che abbiamo deciso di condividere, la configurazione sarà simile a questa. Entrambe le directory hanno quasi le stesse opzioni di configurazione:

exports file mod

Ecco una rapida analisi delle opzioni di configurazione:

  • rw: Al client vengono concessi sia i permessi di lettura che di scrittura sul volume.

  • sync: Forza NFS a scrivere le modifiche sul disco prima di rispondere. Offre un'esperienza più stabile e coerente. La risposta rifletterà lo stato effettivo del volume remoto. Tuttavia, le operazioni sui file saranno più lente.

  • no_subtree_check: Impedisce il controllo della sottoalberatura. Se non disabilitato, gli host saranno costretti a verificare l'esistenza del file nell'albero esportato per ogni singola richiesta del client. Ciò può causare molti problemi, ad esempio se un file viene rinominato mentre il client lo sta utilizzando. Nella maggior parte dei casi, disabilitare i controlli della sottoalberatura è la scelta migliore.

  • no_root_squash: Come accennato in precedenza, NFS tradurrà qualsiasi richiesta dell'utente root remoto in un utente non privilegiato. Questa è una funzionalità di sicurezza intenzionale per impedire l'accesso indesiderato al sistema host. Tuttavia, l'utilizzo di questa opzione disabiliterà questo comportamento.

Salva il file di configurazione ed esci dall'editor. Per rendere effettive le modifiche, riavvia il server NFS:

Restart nfs kernel server

Regolazione del firewall

Per qualsiasi server, una corretta configurazione del firewall è d'obbligo. Supponendo che tu abbia configurato di conseguenza il tuo server Ubuntu 20.04, il firewall UFW dovrebbe essere attivo. È un firewall semplice ma potente in dotazione con la maggior parte delle distribuzioni Linux. Per i principianti, ecco una guida rapida che spiega UFW, come funziona e l'uso comune di UFW con esempi.

Per impostazione predefinita, il firewall bloccherà tutto il traffico in entrata e in uscita. Per garantire che il server NFS possa connettersi e scambiare traffico correttamente, dobbiamo aggiungere un'eccezione per il protocollo NFS. Innanzitutto, controlla lo stato del firewall. Verranno stampate anche tutte le regole correnti:

ufw status

Come possiamo vedere, al sistema è consentito solo il traffico SSH. Dobbiamo aggiungere un'eccezione per consentire il traffico NFS.

Nella maggior parte dei casi, si raccomanda vivamente di utilizzare la regola più restrittiva che consenta comunque il traffico necessario. Pertanto, consentiremo solo ai client selezionati di connettersi all'host:

ufw allow ports

Dopodiché, verifica nuovamente lo stato del firewall:

ufw status after change

Creazione del punto di montaggio

Il server è ora pronto a consentire al sistema client di connettersi al protocollo NFS. Successivamente, dobbiamo preparare il client. Per accedere al volume remoto, questo deve essere montato localmente sul client. Per quanto riguarda il punto di montaggio, si consiglia di utilizzare una directory vuota dedicata.

Per i due volumi remoti, crea due punti di montaggio separati:

Create client nfs general directory

Create client nfs home directory

Ora che i punti di montaggio sono pronti, è necessario montare i volumi remoti:

Mount general directory on client

Mount home directory on client

Possiamo verificare se i montaggi sono andati a buon fine. Controlla l'elenco di tutti i volumi montati:

Disk free in client

Ecco fatto! I volumi remoti sono stati montati con successo. Possiamo anche verificare l'utilizzo dello spazio usando il seguente comando:

Disk usage in client home

Test dell'accesso NFS

Finora, i volumi remoti sono stati montati correttamente. Tuttavia, non servirà a nulla se il client non può leggere/scrivere dati sul volume remoto. Per verificare, crea un file fittizio sui punti di montaggio NFS. Qui, il file verrà creato con privilegi di root per verificare se le configurazioni specifiche di root funzionano correttamente:

Create file in nfs

Successivamente, verifica la proprietà del file:

Check ownership of file created

Come possiamo vedere, NFS sta traducendo il proprietario del file in nobody:nogroup. La directory /var/nfs/ general appartiene a nobody:nogroup, quindi NFS sta traducendo la proprietà del file. È ora di testare l'altro montaggio NFS:

Create home file

Verifica l'esistenza e la proprietà del file:

Check ownership of home file

In questo caso, NFS non ha tradotto la proprietà del file. Questo client è stato configurato per poter eseguire azioni amministrative. Inoltre, l'originale host directory /home non appartiene a nobody:nogroup.

Trucchi aggiuntivi

  • Montaggio all'avvio

Finora abbiamo dovuto montare manualmente il volume NFS su una directory locale. Se non vengono smontati, i montaggi NFS dureranno fino al riavvio del sistema. Se il volume NFS viene utilizzato regolarmente, il montaggio manuale diventa estremamente noioso. Nel caso di più montaggi NFS, diventa poco pratico montarli manualmente uno per uno.

Utilizzando il file /etc/fstab , possiamo automatizzare il processo. Durante l'avvio, questo script monterà automaticamente i volumi NFS sui punti di montaggio di destinazione. Apri il file in un editor di testo:

fstab file

Aggiungi le seguenti righe per montare i volumi remoti del sistema host:

fstab file after change

Salva lo script e chiudi l'editor di testo. Al prossimo avvio, Linux monterà automaticamente i volumi remoti. Nota che l'avvio del sistema potrebbe richiedere del tempo poiché si connette e monta i volumi.

  • Smontaggio del volume NFS

Se il volume remoto non è più necessario, lo smontaggio dei volumi li rimuoverà dal sistema client. Prima di smontare, tuttavia, assicurati che nessuna applicazione o script stia utilizzando il volume remoto. Lo smontaggio dei montaggi NFS è simile allo smontaggio di qualsiasi altro montaggio. In questo caso, smonta /nfs/home e /nfs/general:

Unmount nfs

Quindi, verifica l'azione:

Disks after unmount

Considerazioni finali

In questa guida abbiamo creato un server NFS e mostrato alcune delle basi della condivisione remota NFS. Se sei interessato a implementare NFS in un ambiente di produzione, tieni presente che il protocollo NFS non è crittografato. Ciò potrebbe comportare alcuni problemi di sicurezza, ad esempio attacchi man-in-the-middle.

Buon computing!

author

Pranay Kapgate

Autore · CloudSigma

Preslav Dobrev è un designer creativo presso CloudSigma, con un focus su un'identità aziendale coerente attraverso l'uso di canali di marketing tradizionali e innovativi. È abile nel fondere la visione artistica con il marketing strategico per creare narrazioni di brand di grande impatto.

Commenti

Ancora nessun commento. Scrivi il primo.