web analytics

[Guida] Stratis: come creare facilmente un pool cifrato su GNU/Linux

stratis
speicher

Stratis è una piattaforma per la gestione dello storage locale che ha come punto di forza la semplicità di utilizzo. Questo tool, infatti, consente ad un amministratore di sistema di impostare e gestire configurazioni di archiviazione complesse. Nella mini guida di oggi vedremo proprio come utilizzarlo per la creazione di uno storage pool cifrato.

Stratis: un’introduzione

Prima di addentrarci nella guida, facciamo un piccolo passo indietro per riprendere alcuni concetti che abbiamo già trattato svariate volte qui su LFFL, ma che servirà avere ben chiari per poter seguire l’articolo. Quando nei sistemi GNU/Linux si parla di block device, si fa riferimento ad un tipo speciale di file (coerentemente con la logica per cui in Linux everything is a file!) che rappresenta una periferica o un dispositivo virtuale su cui è possibile effettuare operazioni di input output per blocchi di byte di dimensione predeterminata. Con stratis è possibile utilizzare vari tipi di block device tra cui, a titoli esemplificativo:

Quando si parla di pool, invece, si fa riferimento ad una aggregazione di uno o più dispositivi a blocchi, la cui dimensione complessiva è pari alla somma delle dimensioni dei dispositivi sottostanti. Per la stesura di questa guida ho utilizzato Fedora 33 con GNOME, l’ultima release della distribuzione di cui abbiamo pubblicato anche una guida rapida post-installazione. Il primo step, ovviamente, consiste nell’installare il tool e, al contempo, abilitare il relativo servizio in systemd, tramite queste istruzioni:

sudo dnf install stratisd stratis-cli
systemctl enable --now stratisd

Creare la chiave di cifratura

Per completare questa prima procedura introduttiva, dovete ora creare la chiave di cifratura per stratis. Come vi spiegherò a breve, questa chiave non è persistente e quindi dovrà essere creata ad ogni avvio del sistema. In conclusione della mini guida vi mostrerò come risolvere questo problema, creando un apposito servizio in systemd che andrà ad automatizzare per noi questo processo. La sintassi che dovete usare per creare la chiave è la seguente:

sudo stratis key set --capture-key 
#dopo aver digitato invio, vi verrà chiesta la passphrase da utilizzare per generare la chiave

Nel mio caso, quindi, ho utilizzato questa istruzione:

sudo stratis key set --capture-key lffl01
stratis creazione chiave cifratura
Creazione della chiave lffl01.

Utilizzando poi la direttiva stratus key list, potete controllare la lista delle chiavi presenti nel sistema. Piccola nota da ricordare per la parte finale della mini guida, l’opzione –capture-key utilizzata fino ad ora serve a creare una chiave inserendo manualmente nel terminale la passphrase scelta. È possibile, tuttavia, utilizzare anche l’opzione –keyfile-path <file> per specificare un file contenente la parola chiave.

Creare un pool cifrato con la CLI di stratis

Dopo aver terminato la prima fase di configurazione del tool, possiamo ora procedere con i passaggi necessari per la creazione del pool cifrato con stratis. Per contestualizzare la guida e seguire più facilmente gli esempi, vi propongo uno screenshot della configurazione che sto utilizzando. In particolare, il pool verrà creato utilizzando il block device /dev/sdb, ma il tutto è riproducibile, come vi ho detto in precedenza, anche su più dispositivi di archiviazione.

fedora open source lsblk cli
Il comando lsblk invia allo standard output la lisa dei block device.

La sintassi da utilizzare per creare un pool da n dispositivi a blocchi è la seguente:

#stratis pool create <nome-pool> device-1 device-2 device-n
#ad esempio se ho due dispositivi, sdb ed sdc, darò l'istruzione
#stratis pool create cogito /dev/sdb /dev/sdc/

A queste istruzioni, per ottenere la cifratura, dovete però aggiungere l’opzione –key-desc <nome-chiave>. Quindi, ricapitolando:

  • un dispositivo a blocchi sdb dal quale creare un pool cifrato, denominato pool01;
  • la chiave precedentemente creata lffl01;

l’istruzione che ho utilizzato è:

stratis pool create --key-desc lffl01 pool01 /dev/sdb
stratis creazione pool cifrato
La creazione del pool cifrato pool01.

Per verificare che gli step precedenti siano andati a buon fine, eseguire la direttiva stratis pool list. Questa, infatti, stamperà il pool appena creato e le sue proprietà mutualmente esclusive:

  • ~Ca, il caching è disabilitato (la tilde indica la negazione della propietà);
  • Cr, la cifratura è abilitata.

Create adesso il relativo filesystem ed una directory nella quale montarlo. Questo risultato può essere ottenuto molto semplicemente tramite questi comandi. Sostituite ovviamente pool01 e fs01 con i vostri nomi:

stratis filesystem create pool01 fs01
mkdir /fs01
mount /stratis/pool01/fs01 /fs01
cd /fs01
# create un file di prova
echo "questo è un file di prova" > testfile

Creare il servizio per systemd

Siamo giunti alla conclusione di questa mini guida su stratis. Quest’ultima parte è facoltativa e serve ad evitarvi, ad ogni ravvio della macchina, il dover ripetere la procedura di creazione della chiave e di sblocco del pool. Come vi ho accennato all’inizio dell’articolo, infatti, la chiave che abbiamo precedentemente creato non è persistente quindi, prima di sbloccare pool01 utilizzando l’istruzione stratis pool unlock, dovrete ricreare la chiave seguendo i primi step della guida.
stratis systemd service

Si può comunque ovviare a questo problema creando un servizio di stratis per systemd. Per farlo, tuttavia, dovrete prima creare il file contenente la passphrase scelta e dargli i giusti privilegi:

echo -n passphrase > /root/lffl01
chmod 400 /root/lffl01
chown root:root /root/lffl01

Successivamente create il file /etc/systemd/system/stratis-fs01.service contenente questa porzione di codice, ovviamente adattandola con i nomi da voi utilizzati (vi ho evidenziato cosa modificare):

[Unit]
Description = stratis mount pool01 fs01 file system
After = stratisd.service

[Service]
ExecStartPre=sleep 2
ExecStartPre=stratis key set --keyfile-path /root/lffl01 lffl01
ExecStartPre=stratis pool unlock
ExecStartPre=sleep 3
ExecStart=mount /stratis/pool01/fs01 /fs01
RemainAfterExit=yes

[Install]
WantedBy = multi-user.target

Abilitate ora il demone con systemctl enable stratis-fs01.service ed al successivo riavvio il pool sarà automaticamente sbloccato e montato nella vostra directory.

sharing-caring-1Seguiteci sul nostro canale Telegram, sulla nostra pagina Facebook e su Google News. Nel campo qui sotto è possibile commentare e creare spunti di discussione inerenti le tematiche trattate sul blog.