Installazione di un server NFS

By | Giugno 27, 2014

Nota: questo è un obiettivo d’esame RHCE 7.
In questo tutorial, il server NFS è chiamato nfsserver.example.com e il client NFS nfsclient.example.com.

Configurazione del server NFS

Installazione di un server NFS:

# yum groupinstall -y file-server

Aggiungi nuove regole per il firewall:

# firewall-cmd --permanent --add-service=nfs
success

Nota: NFSv4 è la versione utilizzata all’esame e non richiede alcuna configurazione aggiuntiva del firewall. Tuttavia, al di là degli obiettivi dell’esame, se prevedi di utilizzare NFSv3, dovrai anche eseguire questi comandi:

# firewall-cmd --permanent --add-service=mountd
# firewall-cmd --permanent --add-service=rpc-bind

Ricarica la configurazione del firewall:

# firewall-cmd --reload
success

Attiva i servizi NFS all’avvio:

# systemctl enable rpcbind nfs-server

Nota: nfs-idmap/nfs-idmapd (le modifiche sono avvenute con RHEL 7.1) e i servizi nfs-lock vengono avviati automaticamente dal servizio nfs-server. nfs-idmap/nfs-idmapd è richiesto da NFSv4 ma non consente alcuna corrispondenza UID/GID tra client e server. Viene utilizzato solo quando si imposta ACL per nome o per visualizzare nomi di utenti/gruppi.
Tutti i controlli delle autorizzazioni vengono ancora eseguiti con l’UID/GID utilizzato dal server (vedere questo thread su nfs-idmap per ulteriori dettagli).

Avvia i servizi NFS:

# systemctl start rpcbind nfs-server

Nota 1: per impostazione predefinita vengono utilizzati 8 thread NFS (RPCNFSDCOUNT = 8 nel file /etc/sysconfig/nfs). Questo dovrebbe essere aumentato in un ambiente di produzione almeno a 32 (fonte: http://initrd.org/wiki/NFS_Setup).
Nota 2: Facoltativamente, per abilitare il supporto NFS con SELinux Label, modificare il file /etc/sysconfig nfs e incollare la seguente riga (source): RPCNFSDARGS = “- V 4.2”

Creare le directory e assegnare i diritti di accesso:

# mkdir -p /home/tools
# chmod 0777 /home/tools
# mkdir -p /home/guests
# chmod 0777 /home/guests

Assegnare i contesti SELinux corretti alle nuove directory:

# yum install -y setroubleshoot-server
# semanage fcontext -a -t public_content_rw_t "/home/tools(/.*)?"
# semanage fcontext -a -t public_content_rw_t "/home/guests(/.*)?"
# restorecon -R /home/tools
# restorecon -R /home/guests

Nota: il contesto public_content_rw_t non è l’unico disponibile, puoi anche utilizzare i contesti public_content_ro_t (sola lettura) o nfs_t (maggiormente limitatativo) in base alle tue esigenze.

Controlla i booleani SELinux usati per NFS:

# semanage boolean -l | egrep "nfs|SELinux"
SELinux boolean                State  Default Description
xen_use_nfs                    (off  ,  off)  Allow xen to use nfs
virt_use_nfs                   (off  ,  off)  Allow virt to use nfs
mpd_use_nfs                    (off  ,  off)  Allow mpd to use nfs
nfsd_anon_write                (off  ,  off)  Allow nfsd to anon write
ksmtuned_use_nfs               (off  ,  off)  Allow ksmtuned to use nfs
git_system_use_nfs             (off  ,  off)  Allow git to system use nfs
virt_sandbox_use_nfs           (off  ,  off)  Allow virt to sandbox use nfs
logrotate_use_nfs              (off  ,  off)  Allow logrotate to use nfs
git_cgi_use_nfs                (off  ,  off)  Allow git to cgi use nfs
cobbler_use_nfs                (off  ,  off)  Allow cobbler to use nfs
httpd_use_nfs                  (off  ,  off)  Allow httpd to use nfs
sge_use_nfs                    (off  ,  off)  Allow sge to use nfs
ftpd_use_nfs                   (off  ,  off)  Allow ftpd to use nfs
sanlock_use_nfs                (off  ,  off)  Allow sanlock to use nfs
samba_share_nfs                (off  ,  off)  Allow samba to share nfs
openshift_use_nfs              (off  ,  off)  Allow openshift to use nfs
polipo_use_nfs                 (off  ,  off)  Allow polipo to use nfs
use_nfs_home_dirs              (off  ,  off)  Allow use to nfs home dirs
nfs_export_all_rw              (on   ,   on)  Allow nfs to export all rw
nfs_export_all_ro              (on   ,   on)  Allow nfs to export all ro

Nota 1: la colonna State mostra rispettivamente la configurazione booleana corrente e la colonna Default la configurazione booleana permanente.
Nota 2: Qui siamo interessati a nfs_export_all_rw, nfs_export_all_ro e potenzialmente use_nfs_home_dirs booleans.
Nota3: il valore booleano di nfs_export_all_ro consente di condividere i file tramite NFS in modalità di sola lettura, ma non impedisce loro di essere utilizzati in modalità di lettura-scrittura. È il ruolo di nfs_export_all_rw booleano per consentire la modalità di lettura-scrittura.

Se necessario, assegnare l’impostazione corretta ai booleani SELinux:

# setsebool -P nfs_export_all_rw on
# setsebool -P nfs_export_all_ro on
# setsebool -P use_nfs_home_dirs on

Modifica il file /etc/exports e aggiungi le seguenti righe con il nome (o l’indirizzo IP) dei client:

/home/tools nfsclient.example.com(rw,no_root_squash)
/home/guests nfsclient.example.com(rw,no_root_squash)

Nota: per favore, non mettere nessuno spazio prima della parentesi di apertura, questo cambierebbe completamente il significato della linea!

Esporta le directory:

# exportfs -avr
exporting nfsclient.example.com:/home/guests
exporting nfsclient.example.com:/home/tools
# systemctl restart nfs-server

Nota: questo ultimo comando non dovrebbe essere necessario in futuro. Ma, per il momento, evita il riavvio.

Controlla la tua configurazione:

# showmount -e localhost
Export list for localhost:
/home/guests nfsclient.example.com
/home/tools  nfsclient.example.com

Nota: è possibile testare ciò che viene esportato dal server NFS da un client remoto con il comando showmount -e nfsserver.example.com, ma è prima necessario arrestare Firewalld sul server NFS (o aprire le porte 111 udp e 20048 tcp sul Server NFS).

Configurazione client NFS

Sul lato client, i comandi sono:

# yum install -y nfs-utils
# mount -t nfs nfsserver.example.com:/home/tools /mnt