Configurare un server NFS su Linux: condividere directory | INTROSERV
EUR
european

EUR

usa

USD

Italy It
Ex. VAT Ex. VAT 0%

Configurare un server NFS su Linux per condividere una directory tramite NFS

Livello: Avanzato
Tempo stimato: ~30 minuti
Obiettivo: Configurare un server NFS su Linux per condividere una directory con più client, facilitando l'automazione delle attività di routine e l'audit di sicurezza proattivo.

Introduzione

La gestione dello storage condiviso su un insieme di server è un requisito fondamentale per mantenere ambienti di produzione con elevati requisiti di uptime. Il protocollo NFS (Network File System) consente a un sistema di condividere una directory tramite NFS in rete, operando come un NAS (Network Attached Storage). Implementando un server NFS su Linux, è possibile fornire un accesso centralizzato ai file a più client NFS contemporaneamente. Questo tutorial spiega come configurare un server NFS su Linux in modo efficiente, utilizzando NFSv4.2 per impostazione predefinita.

Warning

Questa guida utilizza il metodo di sicurezza sec=sys (AUTH_SYS). In questa modalità il server si fida intrinsecamente dell'identificazione dell'utente (UID/GID) fornita dal client, senza alcuna autenticazione crittografica. Il controllo degli accessi si basa esclusivamente sul filtraggio degli indirizzi IP in /etc/exports e sui normali permessi UNIX dei file. Questa configurazione è ottima per reti interne attendibili (ad esempio all'interno di un ambiente virtuale Proxmox), ma non è consigliata per reti non attendibili. Per una maggiore sicurezza, valutate l'adozione dell'autenticazione Kerberos (ad esempio sec=krb5, sec=krb5i o sec=krb5p).

Prerequisiti

Prima di iniziare, assicuratevi che siano soddisfatte le seguenti condizioni:

  • Sistema operativo: Ubuntu 22.04/24.04 LTS, Debian 12/13 o CentOS/RHEL 9/AlmaLinux 10
  • Software richiesto: nfs-kernel-server (2.6+) per Ubuntu/Debian oppure nfs-utils (2.x+) per CentOS/RHEL/AlmaLinux
  • Accesso: accesso sudo o root su tutte le macchine
  • Rete: i server devono poter comunicare tra loro tramite una rete privata.
  • Conoscenze richieste: buona dimestichezza con la riga di comando di Linux.

Terminologia

Prima di procedere, familiarizzate con i seguenti concetti fondamentali:

  • NFS (Network File System): un protocollo che consente di accedere ai file in rete come se fossero archiviati localmente.
  • Server NFS: la macchina centrale che ospita i file e li rende disponibili in rete.
  • Client NFS: la macchina remota che si connette al server per accedere ai file condivisi.
  • Directory condivisa (Shared Directory): la cartella locale sul server che verrà resa disponibile ai client.
  • Esportazione (Export): il processo con cui una directory locale viene resa disponibile ai client in rete.
  • /etc/exports: il principale file di configurazione utilizzato dal demone NFS per stabilire quali directory esportare e con quali regole di accesso.
  • Montaggio (Mounting): il processo di collegamento di una condivisione di rete remota alla struttura di directory locale.
  • Punto di mount (Mount Point): la directory locale sul client a cui viene collegato il filesystem remoto.
  • nfs-utils: il pacchetto software che contiene le utilità e i demoni necessari per il client e il server NFS.
  • RPC (Remote Procedure Call): un protocollo che un programma può usare per richiedere un servizio a un programma situato su un altro computer.
  • Portmapper / rpcbind: un servizio che associa i numeri di programma RPC ai numeri di porta di rete, necessario a NFS per negoziare le connessioni.
  • Permessi (Permissions): diritti di accesso che stabiliscono chi può leggere, scrivere o eseguire i file.
  • Accesso in sola lettura (RO): uno stato di permessi che consente ai client di visualizzare i file ma non di modificarli.
  • Accesso in lettura e scrittura (RW): uno stato di permessi che consente ai client di modificare i file condivisi.
  • root_squash: una funzione di sicurezza che associa le richieste dell'utente root remoto a un utente non privilegiato (nobody) per impedire accessi root non autorizzati.
  • Firewall: un sistema di sicurezza di rete che monitora e controlla il traffico di rete in entrata e in uscita.
  • Filesystem Linux: il metodo strutturato utilizzato da Linux per memorizzare e organizzare i file su disco.
  • Hostname: un'etichetta leggibile assegnata a un dispositivo connesso a una rete di computer.
  • Indirizzo IP: un identificatore numerico univoco assegnato a ogni dispositivo connesso a una rete.
  • Automount: la pratica di montare automaticamente i filesystem all'avvio.
  • NAS (Network Attached Storage): un'architettura di storage a livello di file che rende i dati accessibili in rete.

Passaggio 1: Installare i pacchetti necessari

Per prima cosa, installate il software necessario sul server e sui client. Il pacchetto nfs-utils fornisce i demoni e gli strumenti necessari per gestire il filesystem. Le configurazioni moderne dovrebbero usare per impostazione predefinita NFSv4.2, che è stateful e semplifica le regole del firewall.

Sul server NFS (Debian/Ubuntu):

sudo apt update sudo apt install nfs-kernel-server

Sul server NFS (CentOS/RHEL/AlmaLinux):

sudo dnf install nfs-utils sudo systemctl enable --now rpcbind nfs-server

Info

In una configurazione esclusivamente NFSv4, il servizio rpcbind non è tecnicamente necessario per il montaggio NFS in sé. Serve però se intendete usare il comando showmount (come illustrato al Passaggio 5) per individuare le esportazioni, oppure se dovete supportare client NFSv3 legacy.

Sul client NFS (Debian/Ubuntu):

sudo apt update sudo apt install nfs-common

Sul client NFS (CentOS/RHEL/AlmaLinux):

sudo dnf install nfs-utils

L'installazione dovrebbe concludersi correttamente. I servizi RPC e NFS necessari sono ora installati e in esecuzione.

Passaggio 2: Creare la directory condivisa e impostare i permessi NFS

Create sul server la directory che intendete esportare:

sudo mkdir -p /mnt/nfs_share

Impostate i permessi NFS appropriati in modo che i client possano accedere ai file. In questo tutorial assegneremo la proprietà all'utente di servizio dedicato non privilegiato e concederemo i permessi di gruppo adeguati.

Debian/Ubuntu:

sudo chown nobody:nogroup /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share

CentOS/RHEL/AlmaLinux:

sudo chown nobody:nobody /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share

Questa configurazione non aggira il modello di permessi locale di Linux, per cui il controllo degli accessi NFS non è il vostro unico livello di sicurezza. Il permesso 2775 abilita in modo sicuro la collaborazione di gruppo senza violare il principio del privilegio minimo.

Passaggio 3: Configurare il server NFS su Linux

Per definire le regole di esportazione, dovete modificare il file /etc/exports sul server.

Aprite il file:

sudo nano /etc/exports

Aggiungete la riga seguente per concedere l'accesso a una specifica sottorete di client (ad esempio <CLIENT_SUBNET>):

/mnt/nfs_share <CLIENT_SUBNET>(rw,sync,no_subtree_check,root_squash)

Questo configura il server per esportare la directory con le seguenti opzioni:

  • rw: concede l'accesso in lettura e scrittura (RW). Usate ro per l'accesso in sola lettura (RO).
  • sync: forza la scrittura delle modifiche su disco prima di rispondere al client.
  • no_subtree_check: disabilita il controllo del sottoalbero (subtree), migliorando l'affidabilità.
  • root_squash: associa esplicitamente le richieste dell'utente root remoto a un utente non privilegiato (nobody). È il comportamento predefinito, ma andrebbe sempre indicato esplicitamente a fini di audit. Usate no_root_squash solo in ambienti rigorosamente controllati.

Info

È possibile specificare più client aggiungendo altri indirizzi IP o sottoreti, separati da spazi, sulla stessa riga, abilitando così l'accesso per più macchine.

Applicate la configurazione di esportazione:

Debian/Ubuntu:

sudo exportfs -a sudo systemctl restart nfs-kernel-server

CentOS/RHEL/AlmaLinux:

sudo exportfs -a sudo systemctl restart nfs-server

Il server sta ora esportando attivamente la directory in rete.

Passaggio 4: Configurare il firewall

Dovete consentire il traffico NFS attraverso il firewall del server per permettere le connessioni dei client.

Con UFW (Debian/Ubuntu):

In una nuova installazione di Ubuntu, UFW è inattivo per impostazione predefinita. Su un sistema Debian 13 pulito, potrebbe non essere nemmeno installato. Se intendete usare UFW, assicuratevi che sia installato (sudo apt install ufw) e abilitato esplicitamente prima di aggiungere le regole:

sudo ufw enable sudo ufw allow from <CLIENT_SUBNET> to any port nfs

Con Firewalld (CentOS/RHEL/AlmaLinux):

sudo firewall-cmd --permanent --zone=public --add-service=nfs sudo firewall-cmd --permanent --zone=public --add-service=rpc-bind sudo firewall-cmd --permanent --zone=public --add-service=mountd sudo firewall-cmd --reload

Info

AlmaLinux/RHEL (SELinux): in una nuova installazione di AlmaLinux, SELinux è impostato su Enforcing. Per il percorso predefinito /mnt/nfs_share usato in questa guida, il contesto esistente mnt_t è compatibile con il demone nfsd. Tuttavia, se prevedete di esportare percorsi non standard (ad esempio /srv, /data o /home/...), NFS non potrà scrivervi a meno che non configuriate SELinux in modo appropriato. Potete attivare il booleano globale (sudo setsebool -P nfs_export_all_rw 1) oppure impostare il corretto fcontext tramite semanage.

I client della sottorete consentita possono ora raggiungere i servizi NFS.

Passaggio 5: Verificare l'esportazione con il comando showmount

Sul server, verificate in modo proattivo le esportazioni attive e lo stato interno di audit per garantire la conformità di sicurezza. Eseguite il comando seguente per controllare le esatte opzioni di esportazione applicate dal demone NFS:

sudo cat /var/lib/nfs/etab

In alternativa, potete usare sudo exportfs -v per visualizzare l'elenco dettagliato delle esportazioni.

Quindi, dalla macchina client, usate il comando showmount per verificare che l'esportazione sia visibile in rete. Sostituite <SERVER_IP> con l'effettivo indirizzo IP del vostro server NFS.

Info

showmount richiede che la porta 111 (rpcbind) sia aperta sul server. Se utilizzate una configurazione esclusivamente NFSv4 e non avete aperto questa porta, saltate questo passaggio: verificate le esportazioni sul server con sudo exportfs -v e testate la raggiungibilità dal client montando la condivisione al Passaggio 6.

showmount -e <SERVER_IP>

Output previsto:

Export list for <SERVER_IP>: /mnt/nfs_share <CLIENT_SUBNET>

Se l'esportazione è elencata, la configurazione del server è corretta ed è raggiungibile dal client.

Passaggio 6: Montare il filesystem NFS sul client

Per utilizzare la condivisione, dovete montare il filesystem NFS su un punto di mount locale del client.

Create il punto di mount:

sudo mkdir -p /mnt/client_share

Montate la directory:

sudo mount -t nfs -o vers=4.2 <SERVER_IP>:/mnt/nfs_share /mnt/client_share

La condivisione è ora montata. Potete verificarlo eseguendo df -h per vedere l'unità di rete collegata. Specificare vers=4.2 garantisce che il client utilizzi esplicitamente la versione più recente del protocollo, invece di ripiegare silenziosamente su NFSv3 o NFSv4.0.

Tip

Per fare in modo che il client monti il filesystem NFS automaticamente all'avvio, potete configurare un montaggio statico aggiungendo una voce a /etc/fstab. Si tratta di un montaggio statico; le vere configurazioni di Automount dinamico in produzione vengono in genere gestite tramite autofs (/etc/auto.master).

Aprite /etc/fstab:

sudo nano /etc/fstab

Aggiungete la riga seguente:

<SERVER_IP>:/mnt/nfs_share /mnt/client_share nfs auto,nofail,noatime,_netdev,hard,vers=4.2,timeo=600 0 0

Questo impedisce al client di bloccare il processo di avvio se il server è temporaneamente irraggiungibile.

Verifica

Per confermare che i permessi NFS e le impostazioni di rete siano corretti, eseguite un test di lettura/scrittura dal client:

touch /mnt/client_share/test_file.txt ls -l /mnt/client_share/

Output previsto:

-rw-r--r-- 1 nobody nogroup 0 May 24 12:00 test_file.txt

Info

A seconda del sistema operativo del client, il proprietario del file verrà mostrato come nobody nogroup (Debian/Ubuntu) oppure nobody nobody (RHEL/AlmaLinux). Questo è il comportamento previsto dell'idmapping di NFSv4 quando le richieste vengono associate correttamente a un utente non privilegiato. In caso di discrepanze, verificate che il parametro Domain in /etc/idmapd.conf coincida sia sul server sia sul client.

Se il file viene creato correttamente, i vostri client possono comunicare con il server e scrivere dati come previsto.

Ripristino delle modifiche

Per smontare la condivisione sul client:

sudo umount /mnt/client_share

Rimuovete la voce da /etc/fstab sul client, se l'avete aggiunta.

Per interrompere la condivisione della directory sul server, rimuovete la riga corrispondente da /etc/exports e applicate le modifiche:

Debian/Ubuntu:

sudo exportfs -a sudo systemctl restart nfs-kernel-server

CentOS/RHEL/AlmaLinux:

sudo exportfs -a sudo systemctl restart nfs-server

Per rimuovere completamente i pacchetti installati:

Debian/Ubuntu:

sudo apt remove nfs-kernel-server nfs-common

CentOS/RHEL/AlmaLinux:

sudo dnf remove nfs-utils

Questa operazione disattiverà completamente le funzionalità NFS sulle vostre macchine.

Conclusione

Avete imparato con successo a configurare un server NFS su Linux. Con una configurazione corretta, potete condividere una directory tramite NFS in modo sicuro con più client NFS. Questa configurazione rappresenta una base affidabile per automatizzare le attività amministrative di routine e centralizzare i log a supporto di audit di sicurezza proattivi.

Versione del documento: 1.0
Ultimo aggiornamento: maggio 2026
Responsabile: Team di documentazione tecnica

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA