Premier Training & Business Partner Red Hat

Installazione e Configurazione NFS su RHEL / CentOS 6

Michele Milaneschi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

In questo articolo parleremo della condivisione di risorse tra host Linux tramite NFS ( Network File Systsem ). NFS è un protocollo per la condivisione di file tra host Linux.

Procediamo alla sua installazione:

yum install nfs-utils

nfs

Il file di configurazione è /etc/exports
Ogni condivisione deve essere dichiarata in questo file con la seguente struttura:

()

  • Directory_da_Condividere: Come dice la parola essa rappresenta la Directory con dentro i file che vogliamo condividere con gli altri host linux
  • host: Indica quali host possono usufruire della risorsa condivisa
  • permessi/opzioni: Indica con quali permessi o opzioni vogliamo mettere a disposizione la risorsa e le dobbiamo dichiarare tra 2 parentesi tonde.
    Le varie opzioni sono le seguenti:
  • rw: Indica la condivisione della risorsa sia in lettura che in scrittura
  • ro: Indica la condivisione della risorsa in sola lettura
  • sync: Rende disponibile i dati condivisi solo quando sono fisicamente scritti ( consigliato insieme all’opzione rw )
  • root_squash: Indica che i file creati dall’utente root del pc client all’interno della condivisione NFS non mantengono i privilegi dell’utente root ma vengono identificati come utente e come gruppo nfsnobody.
    Questo cosa significa??
  • Che se all’interno di una condivisione NFS sul pc client l’utente pippo crea un file, successivamente l’utente root sempre della macchina client NON PUO modificarlo perchè decadono i privilegi di root all’interno della condivisione. Questa opzione su NFS è abilitata di default.
  • subtree_check: Viene verificato che i file condivisi si trovino correttamente nella Directory condivisa
  • no_subtree_check: Non viene verificato ciò che abbiamo appena detto e si guadagna in velocità di trasferimento

 

Facciamo un esempio di come creare una condivisione.

Vogliamo condividere la risorsa /media/dati
La risorsa deve essere accessibile a tutti gli host del dominio talla.it in sola lettura

Innanzitutto andiamo a creare la condivisione sul file /etc/exports:

nfs2

Riavviamo il servizio nfs e ci potremmo trovare davanti a questi errori:

service nfs restart

nfs3

Questo perchè non abbiamo avviato il servizio rpcbind.

Avviamo il servizio rpcbind, lo rendiamo avviabile al boot e vedremo che al riavvio di nfs non avremo nessun errore:

/etc/init.d/rpcbind start
service nfs restart
chkconfig rpcbind on

nfs4

Sulla condivisione della risorsa abbiamo messo *.talla.it ossia qualunque host che faccia parte del dominio talla.it.
Per far si che un host venga riconosciuto come membro del dominio dobbiamo dichiararlo nel file /etc/hosts.

nfs5

A questo punto se proviamo a fare un ping verso il client pc2.talla.it riceveremo la sua risposta.

Prima di questa operazione dovevamo inserire obbligatoriamente il suo indirizzo IP perchè non sarebbe stato riconosciuto tramite il suo FQDN.

 

Lato Client invece dobbiamo ripetere l’installazione di nfs come visto all’inizio dopo di che dobbiamo creare la Directory dove andremo a montare la risorsa condivisa.
Nel nostro caso sarà la Directory /dati:

cd /
mkdir dati

Fatto ciò possiamo procedere al montaggio della risorsa tramite la seguente struttura:

mount -t nfs IP_host_condivisione_nfs:/percorso_condivisione /punto_di_montaggio_locale

Nel nostro esempio l’ip del host dove si trova la risorsa è: 192.168.0.34, quindi daremo il seguente comando:

mount -t nfs 192.168.0.34:/media/dati /dati

nfs6

Per termianre la condivisione:

umount /dati

 

Vediamo come poter accedere anche in scrittura alla Directory /dati:

Innanzitutto nel file /etc/export inseriamo il permesso di scrittura ( rw ):

nfs7

Successivamente impostiamo i permessi 757 implementando lo StickBit:

cd /media
chmod 1757 dati/

nfs8

E riavviamo nfs:

service nfs restart

Lato client montiamo la risorsa nel percorso /dati come abbiamo fatto precedentemente:

mount -t nfs 192.168.0.34:/media/dati /dati

Possiamo scrivere sulla condivisione:

nfs9

Come vediamo i file creati hanno come utente e gruppo nfsnobody e l’utente root da Client non ha i permessi di root sulla condivisione.
Infatti possiamo eliminare solamente i file che abbiamo in precedenza creato ( abbiamo eliminato file4 ):

nfs10

Se nella condivisione tra le opzioni inseriamo no_root_squash:

nfs11
Lato Client come possiamo vedere l’utente root ha pieni privilegi sulla condivisione e può fare quello che vuole.
In figura viene mostrato che l’utente root ha eliminato un file di proprietà dell’utente michele.

nfs12

La condivisione in questo caso è consentita a tutti gli host del dominio ma possiamo inserire anche singoli host specifici tramite indirizzo ip:

nfs13

E in questo caso solamente l’hsot 192.168.0.100 può usufruire della condivisione in sola lettura.

nfs14

Per concludere vediamo quali sono le regole da inserire sul firewall iptables per NFS:

Nel nostro caso nella catena di INPUT abbiamo una Policy di DROP e se non inseriamo le seguenti regole vedremo che anche un semplice riavvio del servizio non andrà completamente a buon fine.

iptables -A INPUT -p tcp –dport 2049 -j ACCEPT
iptables -A INPUT -p tcp –dport 111 -j ACCEPT
iptables -A INPUT -p udp –dport 111 -j ACCEPT

nfs15In questo articolo parleremo della condivisione di risorse tra host Linux tramite NFS ( Network File Systsem ). NFS è un protocollo per la condivisione di file tra host Linux.

Procediamo alla sua installazione:

yum install nfs-utils

nfs

Il file di configurazione è /etc/exports
Ogni condivisione deve essere dichiarata in questo file con la seguente struttura:

<Directory_da_Condividere> (<permessi/opzioni>)

  • Directory_da_Condividere: Come dice la parola essa rappresenta la Directory con dentro i file che vogliamo condividere con gli altri host linux
  • host: Indica quali host possono usufruire della risorsa condivisa
  • permessi/opzioni: Indica con quali permessi o opzioni vogliamo mettere a disposizione la risorsa e le dobbiamo dichiarare tra 2 parentesi tonde.
    Le varie opzioni sono le seguenti:
  • rw: Indica la condivisione della risorsa sia in lettura che in scrittura
  • ro: Indica la condivisione della risorsa in sola lettura
  • sync: Rende disponibile i dati condivisi solo quando sono fisicamente scritti ( consigliato insieme all’opzione rw )
  • root_squash: Indica che i file creati dall’utente root del pc client all’interno della condivisione NFS non mantengono i privilegi dell’utente root ma vengono identificati come utente e come gruppo nfsnobody.
    Questo cosa significa??
  • Che se all’interno di una condivisione NFS sul pc client l’utente pippo crea un file, successivamente l’utente root sempre della macchina client NON PUO modificarlo perchè decadono i privilegi di root all’interno della condivisione. Questa opzione su NFS è abilitata di default.
  • subtree_check: Viene verificato che i file condivisi si trovino correttamente nella Directory condivisa
  • no_subtree_check: Non viene verificato ciò che abbiamo appena detto e si guadagna in velocità di trasferimento

Facciamo un esempio di come creare una condivisione.

Vogliamo condividere la risorsa /media/dati
La risorsa deve essere accessibile a tutti gli host del dominio talla.it in sola lettura

Innanzitutto andiamo a creare la condivisione sul file /etc/exports:

nfs2

Riavviamo il servizio nfs e ci potremmo trovare davanti a questi errori:

service nfs restart

nfs3

Questo perchè non abbiamo avviato il servizio rpcbind.

Avviamo il servizio rpcbind, lo rendiamo avviabile al boot e vedremo che al riavvio di nfs non avremo nessun errore:

/etc/init.d/rpcbind start
service nfs restart
chkconfig rpcbind on

nfs4

Sulla condivisione della risorsa abbiamo messo *.talla.it ossia qualunque host che faccia parte del dominio talla.it.
Per far si che un host venga riconosciuto come membro del dominio dobbiamo dichiararlo nel file /etc/hosts.

nfs5

A questo punto se proviamo a fare un ping verso il client pc2.talla.it riceveremo la sua risposta.

Prima di questa operazione dovevamo inserire obbligatoriamente il suo indirizzo IP perchè non sarebbe stato riconosciuto tramite il suo FQDN.

Lato Client invece dobbiamo ripetere l’installazione di nfs come visto all’inizio dopo di che dobbiamo creare la Directory dove andremo a montare la risorsa condivisa.
Nel nostro caso sarà la Directory /dati:

cd /
mkdir dati

Fatto ciò possiamo procedere al montaggio della risorsa tramite la seguente struttura:

mount -t nfs IP_host_condivisione_nfs:/percorso_condivisione /punto_di_montaggio_locale

Nel nostro esempio l’ip del host dove si trova la risorsa è: 192.168.0.34, quindi daremo il seguente comando:

mount -t nfs 192.168.0.34:/media/dati /dati

nfs6

Per termianre la condivisione:

umount /dati

Vediamo come poter accedere anche in scrittura alla Directory /dati:

Innanzitutto nel file /etc/export inseriamo il permesso di scrittura ( rw ):

nfs7

Successivamente impostiamo i permessi 757 implementando lo StickBit:

cd /media
chmod 1757 dati/

nfs8

E riavviamo nfs:

service nfs restart

Lato client montiamo la risorsa nel percorso /dati come abbiamo fatto precedentemente:

mount -t nfs 192.168.0.34:/media/dati /dati

Possiamo scrivere sulla condivisione:

nfs9

Come vediamo i file creati hanno come utente e gruppo nfsnobody e l’utente root da Client non ha i permessi di root sulla condivisione.
Infatti possiamo eliminare solamente i file che abbiamo in precedenza creato ( abbiamo eliminato file4 ):

nfs10

Se nella condivisione tra le opzioni inseriamo no_root_squash:

nfs11
Lato Client come possiamo vedere l’utente root ha pieni privilegi sulla condivisione e può fare quello che vuole.
In figura viene mostrato che l’utente root ha eliminato un file di proprietà dell’utente michele.

nfs12

La condivisione in questo caso è consentita a tutti gli host del dominio ma possiamo inserire anche singoli host specifici tramite indirizzo ip:

nfs13

E in questo caso solamente l’hsot 192.168.0.100 può usufruire della condivisione in sola lettura.

nfs14

Per concludere vediamo quali sono le regole da inserire sul firewall iptables per NFS:

Nel nostro caso nella catena di INPUT abbiamo una Policy di DROP e se non inseriamo le seguenti regole vedremo che anche un semplice riavvio del servizio non andrà completamente a buon fine.

iptables -A INPUT -p tcp –dport 2049 -j ACCEPT
iptables -A INPUT -p tcp –dport 111 -j ACCEPT
iptables -A INPUT -p udp –dport 111 -j ACCEPT

nfs15

Info about author

Michele Milaneschi

RHCE Consultant