[Guida] Stratis: come creare facilmente un pool cifrato su GNU/Linux
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:
- volumi logici LVM;
- SSD;
- HDD.
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
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.
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
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.
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.
Seguiteci 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.