OpenZFS ha sostenuto il server NFS Parte 1 - Creazione di un server

OpenZFS ha sostenuto il server NFS Parte 1 - Creazione di un server
Se hai familiarità con OpenZFS, sai tutto sulla sua interfaccia ricca di funzionalità, architettura flessibile, checksum affidabili e meccanismi di mucca. Forse lo vuoi anche sul tuo desktop, ma non vuoi riformattare i tuoi dischi e le partizioni esistenti. Forse stai usando Windows 10, che non supporta OpenZFS. Bene, in questo post sul blog, discuterò di come è possibile creare un file system di rete o NFS, in esecuzione in un server separato. Questo dispositivo NFS può quindi essere montato sulla workstation desktop. In questo modo puoi avere l'affidabilità e la robustezza di ZFS con la cordialità utente del tuo sistema operativo desktop preferito, poiché NFS è disponibile su tutte le piattaforme.

Descriverò in dettaglio la creazione di NFS Mount Point su un client Windows 10 nella parte 2 di questa serie. Per ora concentriamoci su un server Ubuntu che offre archiviazione NFS e un client Ubuntu che cerca di connettersi ad esso.

Il set up

Il mio server NFS si baserà su Ubuntu 18.04 LTS. Puoi usare la tua distro Linux preferita o FreeBSD o qualsiasi altro sistema operativo che supporta OpenZFS. La mia ragione per usare Ubuntu 18.04 è che è abbastanza popolare e ridurrebbe considerevolmente la barriera dell'ingresso.

L'NFS dovrebbe essere disponibile solo sulla mia LAN che ha la sottorete di 255.255.255.0 e 192.168.0.1 come il suo gateway predefinito. In un inglese semplice, ciò significa che tutti i dispositivi collegati alla mia rete domestica (WiFi ed Ethernet, et al) avranno indirizzi IP che vanno da 192.168.0.2 a 192.168.0.254.

Il server NFS sarà configurato per consentire solo ai dispositivi con l'indirizzo IP di cui sopra di avere accesso al server NFS. Ciò garantirebbe che solo i dispositivi che si sono collegati alla mia LAN accedono ai miei file e il mondo esterno non possano accedervi. Se hai una configurazione "aperta wifi" o se la sicurezza sull'endpoint del router è dubbia, ciò non garantirebbe alcuna sicurezza.

Non consiglierei di eseguire NFS su Internet pubblico senza ulteriore misura di sicurezza.

Infine, i comandi che vengono eseguiti sul server NFS hanno il prompt, il server $ e i comandi da eseguire sul lato client hanno il client prompt $

Creazione di un pool OpenZFS e set di dati

1. Creazione di zpool

Se hai già uno ZPool attivo e funzionante, salta questo passaggio. Sul mio server NFS, che esegue Ubuntu 18.04 LTS Server, instavo prima OpenZFS.

Server $ sudo apt Installa zfsutils-linux

Successivamente elencheremo tutti i dispositivi di blocco disponibili, per vedere i nuovi dischi (e le partizioni) in attesa di essere formattati con ZFS.

$ lsblk
Nome MAG: MIN RM Dimensione RO TIPO MOUTNOPPORT
Loop0 7: 0 0 89.5m 1 loop/snap/core/6130
Loop1 7: 1 0 86.9m 1 loop/snap/core/4917
Loop2 7: 2 0 91.1M 1 Loop/Snap/Core/6259
SDA 8: 0 0 50g 0 disco
├─SDA1 8: 1 0 1M 0 Parte
└─sda2 8: 2 0 50g 0 parte /
SDB 8:16 0 931G 0 disco
SDC 8:32 0 931G 0 disco
SR0 11: 0 1 1024m 0 ROM

Un esempio tipico è mostrato sopra, ma la tua convenzione di denominazione potrebbe essere selvaggiamente diversa. Dovrai usare il tuo giudizio e fare molta attenzione. Non vuoi formattare accidentalmente il disco del sistema operativo. Ad esempio, la partizione SDA1 ha chiaramente il filesystem di root come punto di montaggio, quindi non è saggio toccarlo. Se stai usando nuovi dischi, è probabile che non abbiano un punto di montaggio o alcun tipo di partizionamento.

Una volta che conosci il nome dei tuoi dispositivi, utilizzeremo il comando ZPOOL Crea per formattare un paio di questi dispositivi di blocco (chiamati SDB e SDC) in uno ZPool con un singolo VDEV composto da due disco a specchio.

Server $ sudo zpool Crea serbatoio SDB SDC
server $ sudo zpool status serbatoio
Tank di stato ZPool
Piscina: serbatoio
Stato: online
Scansione: nessuno richiesto
Config:
Nome State Leggi scrivi cksum
Tank Online 0 0 0
Mirror-0 online 0 0 0
SDB online 0 0 0
SDC online 0 0 0
Errori: nessun errore di dati noto

Andando avanti, è possibile aggiungere dischi in set di due (chiamati VDEV) per far crescere le dimensioni di questo Zpool, i nuovi dischi verranno visualizzati come Mirror-1, Mirror-2 ecc. Non devi creare il tuo zpool come ho fatto io, puoi usare il mirroring con più dischi, puoi usare lo striping senza ridondanza ma prestazioni migliori o puoi usare raidz. Alla fine della giornata, ciò che conta è che abbiamo creato uno Zpool chiamato Tank. Su cui vivrà gli NF condivisi. Creiamo un set di dati che verrà condiviso. Per prima cosa assicurati che la piscina, chiamata "Tank", sia montata. Il punto di montaggio predefinito è '/serbatoio' .

server $ sudo zfs mount serbatoio
Server $ sudo zfs Crea serbatoio/nfssshare #crea un nuovo set di dati in cima al pool

Impostazione delle autorizzazioni

Quando si condividono una directory NFS, il superutente sul sistema client non ha accesso a nulla sulla condivisione. Mentre il superutente sul lato client è in grado di fare qualsiasi cosa sulla macchina client, il supporto NFS non è tecnicamente parte del computer client. Pertanto, consentire le operazioni per conto del superutente lato client mappato come superutente lato server potrebbe comportare problemi di sicurezza. Per impostazione predefinita, NFS mappa le azioni del superutente lato client a nessuno: utente e gruppo di utenti di Nogroup. Se si intende accedere ai file montati come root, anche il set di dati sul nostro server NFS dovrebbe avere le stesse autorizzazioni,

server $ sudo chown nessuno: nogroup /tank /nfsshare

Il server NFS eseguirà qualsiasi azione tramite il root lato client come utente nessuno, quindi l'autorizzazione di cui sopra consentirà alle operazioni di passare.

Se si utilizza un nome utente diverso (normale), è spesso conveniente avere un utente con lo stesso nome utente esatto su entrambi i lati.

Creazione della condivisione NFS

Una volta creato ZPool, è necessario installare il pacchetto server NFS dal gestore dei pacchetti:

Server $ sudo apt Installa nfs-kernel-server

Tradizionalmente, il server NFS utilizza /ecc /esporta il file per ottenere come elenco di client approvati e i file a cui avranno accesso. Tuttavia, useremo la funzione integrata di ZFS per ottenere lo stesso.

Usa semplicemente il comando:

server $ sudo zfs imposta sharenfs = "on" /tank /nfsshare

In precedenza, ho accennato a dare solo ad alcuni IP l'accesso. Puoi farlo come segue:

server $ sudo zfs imposta sharenfs = "rw [email protected]/24 "Tank/NFSSHARE

La "RW" sta per le autorizzazioni di scrittura di lettura, e che è seguito dalla gamma di IPS. Assicurati che il numero di porta 111 e 2049 sia aperto sul tuo firewall. Se stai usando UFW, puoi verificarlo eseguendo:

Server $ UFW Stato

Prendi nota dell'IP del tuo server sulla LAN, utilizzando il comando ifconfig o ip addr. Chiamiamolo server.IP

Montaggio lato client

Una volta creata la condivisione, è possibile montare sulla macchina client, eseguendo il comando:

Client $ Mount -t Server NFS.IP:/Tank/NFSSHARE/MNT

Questo monterà la cartella NFS Condividi sulla /MNT ma potresti aver scelto altrettanto facilmente qualsiasi altro punto di montaggio a tua scelta.

Conclusione

La condivisione dei file è probabilmente l'aspetto più importante dell'amministrazione del sistema. Sta migliorando la tua comprensione dello stack di archiviazione, del networking, delle autorizzazioni utente e dei privilegi. Renderai rapidamente l'importanza del principio del minimo privilegio - vale a dire, dare a un utente solo l'accesso possibile possibile al suo lavoro.

Imparerai anche l'interoperabilità tra diversi sistemi operativi. Gli utenti di Windows possono accedere ai file NFS, quindi possono gli utenti Mac e BSD. Non puoi limitarti a un sistema operativo quando hai a che fare con una rete di macchine che hanno tutte le proprie convenzioni e vernacolari. Quindi vai avanti e sperimenta con la tua condivisione NFS. Spero che tu abbia imparato qualcosa.