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. Digitate: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:RISULTATOsystemctl show -p "Wants" nfs-server
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.Domanda
A) Cos'è portmapper? B) Avete scoperto il significato dei vari campi (intestazione della colonna) del comando 'rpcinfo'? (Program, Vers, proto, and service.)
-
Controlla lo stato di
nfs-server.service
. Digitare:RISULTATOsystemctl status nfs-server
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:Per creare la voce si può anche utilizzare un qualsiasi editor di testo con cui si ha familiarità.cat << EOF > /etc/exports /mnt/nfs 172.16.99.0/24(rw) localhost(rw) EOF
-
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
Elencate di seguito i risultati ottenuti.
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:RISULTATOshowmount -e localhost
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:RISULTATOrm -rf 1nfs 2nfs
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:RISULTATOmount -t nfs4
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
Il vostro tentativo è andato a buon fine?
-
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!
Domande
-
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