NFS: condivisione files
Voglio condividere files da un server (Debian Buster) verso un client (Xubuntu 16.04).
Gli indirizzi IP dei dispositivi sono:
server: ip -> 192.168.1.2
client: ip -> 192.168.1.120
Configurazione lato SERVER
Aprire una finestra terminale ed installare il nesessario:
sudo apt-get install nfs-kernel-server
I comandi per controllare il demone nfs-kernel-server sono:
/etc/init.d/nfs-kernel-server start|stop|restart|status
Nota:
Il server dovrebbe avere un IP statico, per evitare che il DHCP assegni ogni volta un ip differente,
e si debba sempre riconfigurare il client.
Le directories che devono essere condivise, vanno inserite nel file etc/exports.
Aprire il suddetto file:
sudo nano /etc/exports
All’interno di questo file, va inserita una riga, per ogni directory che si vuole condividere,
con la seguente sintassi:
/dir_server_da_condividere IP_client(opzioni,)
dove:
/dir_server_da_condividere: la directory sul server, che dobbiamo condividere;
Ip_client: l’indirizzo IP del client (nel nostro scenario 192.168.1.120)
(opzioni,): sono le opzioni di condivisione che riguardano il client
tali opzioni si suddividono in:
ro: la directory condivisa è in sola lettura, quindi il client non può scrivere.
Questa è l’opzione di default
rw: il client può leggere e scrivere nella directory condivisa
no_root_squash: di default ogni azione fatta dall’utente root sul client, viene trattata come fosse l’utente nobody sul server.
Selezionare questa opzione invece, dà al root del client, gli stessi diritti del root sul server. Questo implica tutti i problemi di sicurezza del caso!
no_subtree_check: disabilita la routine subtree_check, che verifica se un file richiesto dal client, è presente nella parte di volume esportata. In caso di grandi porzioni di volume esportate, disabilitare la routine con questa opzione, velocizza molto il trasferimento dei file.
sync: di default per prevenire la perdita di dati in caso il server si riavvii, exportfs assume un comportamento asincrono. Questa opzione invece prevede un comportamento sincrono, ovvero forza la scrittura dei dati appena questi arrivano al server.
nel nostro caso volendo condividere la directory /home/banco/Immagini/backupfoto del server, avremo:
/home/banco/Immagini/backupfoto 192.168.1.120(rw,no_root_squash)
Per questo caso, concediamo al client i privilegi di root come fossimo sul server, con gli annessi rischi
nel caso volessimo estendere l’accesso a tutti i client di rete da 120 a 200, ma solo in lettura:
/home/banco/Immagini/backupfoto 192.168.1.120/200(ro)
Una volta configurato il file, esporare le condivisioni con il comando:
sudo exportfs -a
e riavviare il servizio nfs-kernel-server
sudo systemctl restart nfs-kernel-server
Questi due comandi sono da eseguire dopo ogni modifica del file etc/exports.
AVANZATE
Per definire gli accessi al server, in maniera più dettagliata, si possono configurare i file
/etc/host.deny ed /etc/host.allow.
Il primo setta i divieti, il secondo i permessi.
Per prima cosa infatti si setta sempre il deny, poi l’allow.
Per prima cosa quindi vietare l’accesso a tutti i client editando il file /etc/host.deny con il comando:
sudo nano /etc/hosts.deny
ed aggiungendo la stringa:
portmap mountd nfsd statd rquotad : ALL
In sostanza vietiamo a tutti i client i seguenti servizi:
portmap: è il demone di assegnazione della porta dinamica per servizi come NFS.
fmountd: il demone che implementa il lato server del protocollo NFS.
nfsd: è lo speciale filesystem che dà accesso ad un server NFS.
statd: è il demone che gestisce il file lock, che non sono persistenti nel
file system e pertanto vengono persi in caso di reboot.
rquotad: è un rpc server che ritorna la quota-disco assegnata allo user.
Ora che abbiamo vietato tutto, assegnamo i permessi al client desiderato, editando il file /etc/host.allow:
sudo nano /etc/hosts.allow
inserendo la stringa
portmap mountd nfsd statd rquotad : 192.168.1.2 192.168.1.120
nota:
Va inserito nel file anche l’indirizzo IP del server.
Terminati i settaggi è necessario riavviare il servizio NFS, con il comando:
sudo systemctl restart nfs-kernel-server
Ora passiamo a configurare il lato client.
Configurazione lato CLIENT
Installare il pacchetto necessario, in questo caso nfs-common:
sudo apt-get install nfs-common
Come in precedenza configurare i file hosts.deny e hosts.allow.
sudo nano /etc/hosts.deny
inserendo il divieto universale:
portmap : ALL
poi sui permessi:
sudo nano /etc/hosts.allow
aggiungendo l’IP del server con la sintassi:
portmap : 192.168.1.2
Ora creare una directory per il punto di mount della condivisione
sudo mkdir /mnt/nfsshared/backup_foto
e montare con il comando:
sudo mount -t nfs 192.168.1.2:/home/banco/Immagini/backupfoto /mnt/nfsshared/backup_foto
se è tutto ok, possiamo inserire il montaggio in /etc/fstab:
sudo nano /etc/fstab
inserendo
192.168.1.2:/home/banco/Immagini/backupfoto /mnt/nfsshared/backup_foto nfs4 _netdev,bg,nofail,rw,relatime,rsize=65536,wsize=65536 0 0
dove le opzioni sono:
_netdev: il filesystem risiede su un dispositivo di rete quindi evita che il sistema (client) tenti di montare questo filesystem quando ancora la rete non è attiva sul sistema stesso.
bg: se il tentativo di mount fallisce, un child in background continuerà a tentare di montare l’export.
nofail: Il boot continuerà anche se questo mount fallirà (es. il server è spento).
rw: sono i diritti di lettura/scrittura.
relatime: aggiorna i tempi di accesso agli “inode” e può migliorare le prestazioni.
rsize, wsize: indica la quantità di bytes per parte di dato. Migliora la prestazione di NFS.
Per smontare la condivisione
sudo umount /mnt/nfsshared/backup_foto
Commenti recenti