Archivio

Posts Tagged ‘nfs’

NFS: condivisione files

3 Ottobre 2019 Commenti chiusi

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
Categorie:Linux, Ubuntu Tag: , ,