Laboratorio 5: NFS¶
Obiettivi¶
Dopo aver completato questo laboratorio, sarete in grado di
- installare e configurare NFS
- condividere file e directory tra sistemi Linux utilizzando NFS
- utilizzare le comuni utilità NFS per interrogare o risolvere i problemi NFS
Tempo stimato per completare questo laboratorio: 40 minuti
NFS¶
NFS è l'acronimo di Network File System. Permette di condividere file e cartelle in rete con altri sistemi. NFS offre un modo semplice per rendere disponibile il contenuto del file system locale a più utenti (o sistemi) su una rete.
Questa condivisione avviene tradizionalmente tra sistemi UNIX/Linux, ma anche i sistemi operativi Microsoft Windows possono accedere alle condivisioni NFS se hanno installato il software appropriato per farlo.
Il supporto per NFS deve essere abilitato o compilato nel kernel.
Come per la maggior parte dei concetti di rete, NFS ha lati client e server. Il lato server consiste nel sistema che esporta (condivide) i file system ad altri sistemi. Il lato client è costituito dai sistemi che devono accedere al file system esportato dal server.
NFSv4 richiede i servizi dei seguenti programmi (daemon):
- portmap - mappa i programmi RPC alle normali porte di rete
- mountd - gestisce le richieste di montaggio in arrivo
- nfsd - è il programma NFS principale che gestisce il trasferimento effettivo dei file
/etc/exports¶
Il file di configurazione /etc/exports
serve come elenco di controllo degli accessi per specificare i file system che possono essere esportati via NFS ai client autorizzati. Fornisce informazioni a mountd
e al demone del server di file NFS basato sul kernel nfsd
.
Le direttve in /etc/exports
utilizzano la seguente sintassi:
shareable_directory allowed_clients(options_affecting_allowed_clients)
Esercizio 1¶
Gestione di NFS¶
In questo esercizio condividerete (esporterete) una directory locale da condividere con il sistema partner, ma prima imparerete a gestire il servizio NFS.
NFS è un'applicazione client e server basata su Remote Procedure Call (RPC). È quindi utile avere a portata di mano delle utility RPC che possono essere utilizzate per eseguire interrogazioni, debug e chiamate RPC a server RPC (come i server NFS). rpcinfo
è una di queste utilità. La sintassi e le opzioni di utilizzo sono illustrate qui:
SYNOPSIS
rpcinfo [-m | -s] [host]
rpcinfo -p [host]
rpcinfo -T transport host prognum [versnum]
rpcinfo -l [-T transport] host prognum versnum
rpcinfo [-n portnum] -u host prognum [versnum]
rpcinfo [-n portnum] [-t] host prognum [versnum]
rpcinfo -a serv_address -T transport prognum [versnum]
rpcinfo -b [-T transport] prognum versnum
rpcinfo -d [-T transport] prognum versnum
Per avviare NFS¶
Assicurarsi di aver effettuato l'accesso al sistema come utente con privilegi di amministrazione.
Iniziare installando il pacchetto
nfs-utils
. Questo pacchetto fornisce varie utilità da utilizzare con i client e server NFS. Digitare:dnf -y install nfs-utils
Tra le altre cose, il pacchetto nfs-util appena installato fornisce anche l'unità di servizio systemd (
nfs-server.service
), necessaria per gestire il daemon NFS sul sistema. Utilizzaresystemctl
per visualizzare alcuni dei servizi ausiliari che l'unità nfs-server "Vuole". Digitare:systemctl show -p "Wants" nfs-server
RISULTATO
Wants=nfs-idmapd.service nfsdcld.service rpcbind.socket rpc-statd-notify.service rpc-statd.service auth-rpcgss-module.service network-online.target
Alcuni servizi importanti e degni di nota necessari a nfs-server sono
nfs-idmapd
,nfsdcld
,rpcbind
,rpc-statd-notify
,rpc-statd
,aut-rpcgss-module
.Il comando
rpcinfo
è usato per effettuare chiamate RPC a un server RPC e poi riportare i risultati.rpcinfo
elenca tutti i servizi RPC registrati conrpcbind
. Utilizzarerpcinfo
per interrogare il server locale e ottenere un elenco di tutti i servizi RPC registrati. Digitare:rpcinfo -p localhost
RISULTATO
program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper
Dall'output di esempio sopra riportato, si può notare che un servizio
portmapper
è registrato sul server RPC in esecuzione su localhost.Domande
Cos'è portmapper?
Scoprire il significato dei diversi campi del comando
rpcinfo
(intestazioni di colonna) (Programma, Vers, proto e servizio)
Controlla lo stato di
nfs-server.service
. Digitare:systemctl status nfs-server
RISULTATO
bash
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: inactive (dead)
nfs-server.service non è attualmente in esecuzione, secondo l'output del nostro sistema demo.
Utilizzare systemctl per avviare il daemon nfs-server. Digitare:
systemctl start nfs-server
Ricontrollare lo stato del servizio nfs-server.
Eseguire nuovamente il comando
rpcinfo
per verificare se qualcosa è cambiato.Domanda
Quali nuovi servizi sono elencati nell'output di
rpcinfo
dopo aver avviato nfs-server?Verificare che
nfs-server.service
sia impostato per avviarsi automaticamente a ogni riavvio del sistema. Digitare:systemctl is-enabled nfs-server
Se il server nfs è disabilitato sul sistema, eseguire il comando per configurarlo per l'avvio automatico con il sistema.
Se il sottosistema firewall è in esecuzione sul server, è necessario consentire/permettere il traffico NFS attraverso il firewall per i client NFS remoti. Questo può essere fatto eseguendo:
firewall-cmd --permanent --add-service nfs && firewall-cmd --reload
Esercizio 2¶
Esportare le Condivisioni¶
La creazione di una condivisione avviene creando una directory o condividendo una directory già esistente sul file system locale.
L'utilità exportfs
è utilizzata per visualizzare e mantenere la tabella dei file system NFS esportati. La sintassi e le opzioni di utilizzo sono:
SYNOPSIS
/usr/sbin/exportfs [-avi] [-o options,..] [client:/path ..]
/usr/sbin/exportfs -r [-v]
/usr/sbin/exportfs [-av] -u [client:/path ..]
/usr/sbin/exportfs [-v]
/usr/sbin/exportfs -f
/usr/sbin/exportfs -s
Nota
Non dimenticarsi di sostituire tutti i riferimenti a server
Per creare ed esportare una condivisione¶
Verrà creata e condivisa una directory chiamata /mnt/nfs
. Questa directory sarà il file system di origine esportato dal server NFS.
Assicurarsi di aver effettuato l'accesso al sistema come utente con privilegi amministrativi.
Creare una directory in
/mnt
chiamatanfs
e passare a quella directory.mkdir /mnt/nfs && cd /mnt/nfs
Creare 5 file di esempio nella nuova directory creata. Digitare:
touch {1..5}nfs
Utilizzare la funzione della shell HEREDOC per creare una nuova voce di esportazione NFS in
/etc/exports
. La voce a riga singola desiderata è -/mnt/nfs foocentos2(rw) localhost(rw)
. Digitare:cat << EOF > /etc/exports /mnt/nfs 172.16.99.0/24(rw) localhost(rw) EOF
Per creare la voce si può anche utilizzare un qualsiasi editor di testo con cui si ha familiarità.
Verificare il contenuto di
/etc/exports
per assicurarsi che non ci siano errori.Dopo aver apportato qualsiasi modifica al file
/etc/exports
è necessario eseguire il comandoexportfs
. Digitare:exportfs -r
Utilizzare l'opzione
-s
con il comandoexportfs
per visualizzare l'elenco di esportazione corrente adatto per/etc/exports
. Ad esempio, visualizzare l'elenco delle directory, degli host consentiti e delle opzioni. Digitare:exportfs -s
Domanda
Qual è stato il risultato? Fare un elenco dei contenuti dell'output.
Esercizio 3¶
Montare le condivisioni NFS¶
Questo esercizio tratta il lato client di NFS. Si proverà ad accedere al server NFS come client.
showmount
è una comoda utility per interrogare e mostrare le informazioni di montaggio sui server NFS. Può anche mostrare lo stato del server NFS ed elencare i client che stanno montando dal server. La sintassi e le opzioni sono mostrate qui:
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
OPTIONS
-a or --all
List both the client hostname or IP address and mounted directory in host:dir format.
-d or --directories
List only the directories mounted by some client.
-e or --exports
Show the NFS server's export list.
-h or --help
Provide a short help summary.
-v or --version
Report the current version number of the program.
--no-headers
Suppress the descriptive headings from the output.
Accedere localmente a una condivisione NFS¶
Verrà testata la configurazione del server NFS da Esercizio 1 provando ad accedere alla directory esportata dalla macchina locale, prima di testarla da una macchina remota.
Mentre si è connessi come superutente, creare una directory chiamata
/mnt/nfs-local
. Questa directory servirà come punto di montaggio di prova per la condivisione NFS.Come rapido controllo preliminare, eseguire
showmount
come client per mostrare l'elenco delle esportazioni disponibili sul server. Digitare:showmount -e localhost
RISULTATO
Export list for localhost: /mnt/nfs 172.16.99.0/24,localhost
Si dovrebbero vedere le esportazioni NFS configurate sul server.
Ora si è pronti a montare la condivisione NFS nel punto di montaggio di prova. Digitare:
mount -t nfs localhost:/mnt/nfs /mnt/nfs-local
Cambiare la propria PWD nella directory
/mnt/nfs-local
ed elencarne il contenuto.Mentre ci si trova ancora nella directory
/mnt/nfs-local
, provare a cancellare alcuni file. Digitare:rm -rf 1nfs 2nfs
RISULTATO
rm: cannot remove '1nfs': Permission denied rm: cannot remove '2nfs': Permission denied
Domanda
Il tentativo di eliminazione dei file è riuscito?
Ora provare a creare altri file (6nfs, 7nfs, 8nfs) sulla condivisione NFS. Digitare:
touch {6..8}nfs
Domanda
Il tentativo di creazione del file è andato a buon fine? Perché pensi che sia fallito?
ESEGUIRE L'ESERCIZIO DAL SISTEMA PARTNER
Per accedere da remoto a una condivisione NFS¶
Mentre si è connessi al serverPR come superutente, installare il pacchetto
nfs-utils
se non è installato.Creare una directory chiamata "
/mnt/nfs-remote
" che servirà come punto di montaggio per la condivisione NFS remota. Digitare:mkdir /mnt/nfs-remote
Supponendo che l'indirizzo IP del server remotoXY sia 172.16.99.100, montate la condivisione NFS sul serverXY eseguendo:
mount -t nfs 172.16.99.100:/mnt/nfs /mnt/nfs-remote
Utilizzare il comando
mount
per visualizzare alcune informazioni aggiuntive sulla condivisione NFS appena montata. Digitare:mount -t nfs4
RISULTATO
172.16.99.100:/mnt/nfs on /mnt/nfs-remote type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255 ...<SNIP>...
cd
al punto di montaggio NFS e provare a cancellarne il contenuto. Digitare:cd /mnt/nfs-remote ; rm -f
Domanda
Il tentativo è riuscito?
Uscire dal serverPR come superutente e rientrare come utente non privilegiato "ying"
Mentre si accede al serverPR con il nome di "ying", si fa il cd della directory montata al punto 2. Digitare:
cd /mnt/nfs-remote/
Prendete nota del contenuto della directory. Se si vedono i file previsti, il laboratorio NFS è stato completato con successo!
Attività di laboratorio:
Impostare la configurazione NFS sul server locale (serverXY), in modo tale che il superutente del server H.Q. (hq.example.org) sarà in grado di montare la condivisione nfs (/mnt/nfsXY) per utilizzarla sulla macchina hq.
Il superutente di HQ deve essere in grado di scrivere (creare) nuovi file e cancellare i file sulla condivisione NFS.
Suggerimento
È necessario disabilitare il trattamento speciale di NFS per i file di proprietà di root. Questo si ottiene specificando un'opzione speciale che "svincola" il superutente nel file "/etc/exports". L'opzione speciale è chiamata
no_root_squash
. Si noti che l'uso dell'opzioneno_root_squash
è considerata una cattiva pratica e un rischio per la sicurezza. Una voce di esempio per ottenere questo risultato per qualsiasi host che corrisponda alocalhost
in/etc/exports
avrà l'aspetto seguente:/mnt/nfs 172.16.99.0/24(rw) localhost(rw,no_root_squash)
Author: Wale Soyinka
Contributors: Steven Spencer, Ganna Zhyrnova