LUKS gestione manuale dei volumi: cryptsetup: differenze tra le versioni
S3v (discussione | contributi) m (piccole correzioni) |
|||
(13 versioni intermedie di 3 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili|Jessie|Stretch|Buster}} | |||
== Introduzione == | == Introduzione == | ||
Questa guida contiene solo due esempi di script | Questa guida contiene solo due esempi di [[script]] Bash per la gestione attraverso cryptsetup di volumi cifrati secondo lo standard [http://code.google.com/p/cryptsetup/ LUKS] (Linux Unified Keys Setup).<br/> | ||
Per la parte relativa alla creazione dei volumi (sia su periferica fisica che su file) rimandiamo alla guida su [[Volumi criptati LUKS - Creazione e uso con cryptmount | LUKS e cryptmount]] | Per la parte relativa alla creazione dei volumi (sia su periferica fisica che su file) rimandiamo alla guida su [[Volumi criptati LUKS - Creazione e uso con cryptmount | LUKS e cryptmount]] | ||
== Automatizzazione dei passi necessari == | == Automatizzazione dei passi necessari == | ||
Assumiamo di avere creato correttamente il volume criptato, la chiave e il filesystem. Ora dobbiamo solo creare uno script da eseguire come root, per fare tutte le operazioni di creazione e montaggio, o viceversa di smontaggio e rimozione automaticamente. | Assumiamo di avere creato correttamente il volume criptato, la chiave e il filesystem. Ora dobbiamo solo creare uno script da eseguire come [[root]], per fare tutte le operazioni di creazione e montaggio, o viceversa di smontaggio e rimozione automaticamente.<br/> | ||
Di seguito sono riportati due script, uno per il caso di file montato ricorsivamente, l'altro per il caso di periferica ordinaria. | Di seguito sono riportati due script, uno per il caso di file montato ricorsivamente, l'altro per il caso di periferica ordinaria. | ||
=== Script per file immagine === | === Script per file immagine === | ||
<pre> | Con [[privilegi di amministrazione]] copiare il file successivo in <code>/usr/local/sbin</code>, assegnandogli utente e gruppo [[root]] e permessi di esecuzione, dopodiché eseguirlo sempre con privilegi. | ||
Si deve però modificare la variabile dello script seguente per utilizzare la propria home. | |||
<pre> | |||
#!/bin/bash | #!/bin/bash | ||
HOME_UTENTE="/home/nomeutente" ### <-- DA MODIFICARE CON LA PROPRIA HOME | |||
#Utilizzo di un file immagine come periferica criptata | |||
case $1 in | case $1 in | ||
monta) | monta) | ||
if [ -f | if [ -f "${HOME_UTENTE}/immagine_cifrata" ]; then | ||
echo "Impostazione periferica ricorsiva (loop)." | echo "Impostazione periferica ricorsiva (loop)." | ||
loopdev=$(losetup -f) | |||
losetup "$loopdev" "${HOME_UTENTE}/immagine_cifrata" | |||
else | |||
echo "File: \"${HOME_UTENTE}/immagine_cifrata\" non trovato!" >&2 | |||
exit 4 | |||
fi | fi | ||
if [ $? = 0 ]; then | if [ $? = 0 ]; then | ||
cryptsetup open --type luks "$loopdev" criptata | |||
else | else | ||
echo "Impostazione periferica ricorsiva non riuscita." | echo "Impostazione periferica ricorsiva non riuscita." >&2 | ||
exit 3 | |||
fi | fi | ||
if [ $? = 0 ]; then | if [ $? = 0 ]; then | ||
mount /dev/mapper/criptata / | if ! [ -e "${HOME_UTENTE}/criptata" ]; then | ||
mkdir "${HOME_UTENTE}/criptata" | |||
fi && | |||
mount /dev/mapper/criptata "${HOME_UTENTE}/criptata" | |||
else | |||
echo "Impotazione periferica non criptata non riuscita." >&2 | |||
losetup -d "$loopdev" | |||
exit 2 | |||
fi | fi | ||
if [ $? !=0 ]; then | if [ $? != 0 ]; then | ||
echo "Impossibile montare la periferica criptata." | echo "Impossibile montare la periferica criptata." >&2 | ||
cryptsetup close criptata | |||
losetup -d "$loopdev" | |||
exit 1 | |||
fi | fi | ||
;; | ;; | ||
smonta) | smonta) | ||
umount /dev/mapper/criptata | umount /dev/mapper/criptata | ||
if [ $? = 0 ]; then | if [ $? = 0 ]; then | ||
echo "Smontaggio riuscito" | |||
cryptsetup close criptata | |||
else | else | ||
echo "Smontaggio non riuscito." | echo "Smontaggio non riuscito." >&2 | ||
exit 3 | |||
fi | fi | ||
if [ $? = 0 ]; then / | if [ $? = 0 ]; then | ||
loopdev=$(losetup -n -O "NAME" -j "${HOME_UTENTE}/immagine_cifrata") && | |||
losetup -d "$loopdev" | |||
if [ $? = 0 ]; then | |||
echo "Periferica criptata chiusa" | |||
touch "${HOME_UTENTE}/criptata.img" | |||
else | |||
echo "Rimozione periferica ricorsiva non riuscita." >&2 | |||
exit 1 | |||
fi | |||
else | |||
echo "Chiusura periferica criptata non riuscita" >&2 | |||
exit 2 | |||
fi | |||
;; | ;; | ||
*) | *) | ||
Riga 56: | Riga 85: | ||
exit 1 | exit 1 | ||
;; | ;; | ||
esac</pre> | esac | ||
Nello script è stato inserito il comando <code>touch</code> per impostare all'ora attuale le date di ultimo accesso e modifica del file <code>criptata.img</code>. | </pre> | ||
Nella prassi si è rivelata importante una modifica esplicita di queste informazioni del file, per sapere quali file cifrati sono stati aperti di recente, nel caso se ne vogliano fare delle copie di backup. | Nello script è stato inserito il comando <code>touch</code> per impostare all'ora attuale le date di ultimo accesso e modifica del file <code>criptata.img</code>.<br/> | ||
Nella prassi si è rivelata importante una modifica esplicita di queste informazioni del file, per sapere quali file cifrati sono stati aperti di recente, nel caso se ne vogliano fare delle copie di backup.<br/> | |||
Se non si inserisce quella riga, programmi di backup (che spesso si appoggiano su ''librsync'') possono non accorgersi che il file cifrato è stato cambiato o è stato aperto di recente e non lo considerano nel sincronizzare le varie copie. | Se non si inserisce quella riga, programmi di backup (che spesso si appoggiano su ''librsync'') possono non accorgersi che il file cifrato è stato cambiato o è stato aperto di recente e non lo considerano nel sincronizzare le varie copie. | ||
=== Script per periferica ordinaria === | === Script per periferica ordinaria === | ||
In questo esempio viene usata la prima partizione di una scheda di memoria SD (<code>/dev/mmcblk0p1</code> con lettore compatibile con il modulo sdhci). | Con [[privilegi di amministrazione]] copiare il file successivo in <code>/usr/local/sbin</code>, assegnandogli utente e gruppo [[root]] e permessi di esecuzione, dopodiché eseguirlo sempre con privilegi. | ||
<pre>#!/bin/bash | |||
Si deve però modificare la variabile dello script seguente per utilizzare la propria home. | |||
In questo esempio inoltre viene usata la prima partizione di una scheda di memoria SD (<code>/dev/mmcblk0p1</code> con lettore compatibile con il modulo <code>sdhci</code>), se si utilizza una diversa memoria si deve cambiare il percorso. | |||
<pre> | |||
#!/bin/bash | |||
HOME_UTENTE="/home/nomeutente" ### <-- DA MODIFICARE CON LA PROPRIA HOME | |||
PATH_MEMORIA="/dev/mmcblk0p1" ### <-- DA MODIFICARE CON IL PATH /dev/... DELLA PROPRIA MEMORIA | |||
case $1 in | case $1 in | ||
monta) | monta) | ||
echo "Verifica presenza SD:" | echo "Verifica presenza SD:" | ||
if [ -b | if [ -b "$PATH_MEMORIA" ] ; then | ||
echo "." | echo "." | ||
else | else | ||
echo "La periferica non è inserita!" | echo "La periferica ($PATH_MEMORIA) non è inserita!" >&2 | ||
exit 2 | exit 2 | ||
fi | fi | ||
if ! [ -e "$HOME_UTENTE"/criptata ]; then | |||
if [ $ | mkdir "$HOME_UTENTE"/criptata | ||
fi | fi && | ||
cryptsetup open --type=luks "$PATH_MEMORIA" criptata && | |||
mount /dev/mapper/criptata "$HOME_UTENTE"/criptata || | |||
{ | |||
echo "Il file system cifrato non può essere montato." >&2 | |||
cryptsetup close criptata | |||
exit 1 | |||
echo "Il file system cifrato non può essere montato." | } | ||
;; | ;; | ||
smonta) | smonta) | ||
#Smonto il file system criptato e controllo che lo smontaggio sia avvenuto correttamente | #Smonto il file system criptato e controllo che lo smontaggio sia avvenuto correttamente | ||
umount /dev/mapper/criptata | umount /dev/mapper/criptata | ||
if [ $? != 0 ]; then | if [ $? != 0 ]; then | ||
echo "Smontaggio non riuscito." | echo "Smontaggio non riuscito." >&2 | ||
exit 2 | |||
fi | fi | ||
#Chiudo il nodo in /dev/mapper e controllo | #Chiudo il nodo in /dev/mapper e controllo | ||
cryptsetup close criptata | |||
if [ $? = 0 ]; then | if [ $? = 0 ]; then | ||
echo "Nodo cifrato in /dev/mapper rimosso." | echo "Nodo cifrato in /dev/mapper rimosso." | ||
else echo "Chiusura periferica criptata non riuscita" | else | ||
echo "Chiusura periferica criptata non riuscita" >&2 | |||
exit 1 | |||
fi | fi | ||
;; | ;; | ||
Riga 105: | Riga 145: | ||
exit 1 | exit 1 | ||
;; | ;; | ||
esac</pre> | esac | ||
</pre> | |||
{{Autori | |||
|Autore = [[Utente:GipPasso|GipPasso]] | |||
|Verificata_da = | |||
: [[Utente:HAL 9000|HAL 9000]] 10:49, 29 set 2019 (CEST) | |||
|Estesa_da = | |||
|Numero_revisori = 1 | |||
}} | |||
[[Categoria:Filesystem]] | [[Categoria:Filesystem]] | ||
[[Categoria:Crittografia]] | [[Categoria:Crittografia]] | ||
[[Categoria:Bash Scripting]] |
Versione attuale delle 08:50, 29 set 2019
Versioni Compatibili Debian 8 "jessie" Debian 9 "stretch" Debian 10 "buster" |
Introduzione
Questa guida contiene solo due esempi di script Bash per la gestione attraverso cryptsetup di volumi cifrati secondo lo standard LUKS (Linux Unified Keys Setup).
Per la parte relativa alla creazione dei volumi (sia su periferica fisica che su file) rimandiamo alla guida su LUKS e cryptmount
Automatizzazione dei passi necessari
Assumiamo di avere creato correttamente il volume criptato, la chiave e il filesystem. Ora dobbiamo solo creare uno script da eseguire come root, per fare tutte le operazioni di creazione e montaggio, o viceversa di smontaggio e rimozione automaticamente.
Di seguito sono riportati due script, uno per il caso di file montato ricorsivamente, l'altro per il caso di periferica ordinaria.
Script per file immagine
Con privilegi di amministrazione copiare il file successivo in /usr/local/sbin
, assegnandogli utente e gruppo root e permessi di esecuzione, dopodiché eseguirlo sempre con privilegi.
Si deve però modificare la variabile dello script seguente per utilizzare la propria home.
#!/bin/bash HOME_UTENTE="/home/nomeutente" ### <-- DA MODIFICARE CON LA PROPRIA HOME #Utilizzo di un file immagine come periferica criptata case $1 in monta) if [ -f "${HOME_UTENTE}/immagine_cifrata" ]; then echo "Impostazione periferica ricorsiva (loop)." loopdev=$(losetup -f) losetup "$loopdev" "${HOME_UTENTE}/immagine_cifrata" else echo "File: \"${HOME_UTENTE}/immagine_cifrata\" non trovato!" >&2 exit 4 fi if [ $? = 0 ]; then cryptsetup open --type luks "$loopdev" criptata else echo "Impostazione periferica ricorsiva non riuscita." >&2 exit 3 fi if [ $? = 0 ]; then if ! [ -e "${HOME_UTENTE}/criptata" ]; then mkdir "${HOME_UTENTE}/criptata" fi && mount /dev/mapper/criptata "${HOME_UTENTE}/criptata" else echo "Impotazione periferica non criptata non riuscita." >&2 losetup -d "$loopdev" exit 2 fi if [ $? != 0 ]; then echo "Impossibile montare la periferica criptata." >&2 cryptsetup close criptata losetup -d "$loopdev" exit 1 fi ;; smonta) umount /dev/mapper/criptata if [ $? = 0 ]; then echo "Smontaggio riuscito" cryptsetup close criptata else echo "Smontaggio non riuscito." >&2 exit 3 fi if [ $? = 0 ]; then loopdev=$(losetup -n -O "NAME" -j "${HOME_UTENTE}/immagine_cifrata") && losetup -d "$loopdev" if [ $? = 0 ]; then echo "Periferica criptata chiusa" touch "${HOME_UTENTE}/criptata.img" else echo "Rimozione periferica ricorsiva non riuscita." >&2 exit 1 fi else echo "Chiusura periferica criptata non riuscita" >&2 exit 2 fi ;; *) echo "Usage: $1 {monta|smonta}" >&2 exit 1 ;; esac
Nello script è stato inserito il comando touch
per impostare all'ora attuale le date di ultimo accesso e modifica del file criptata.img
.
Nella prassi si è rivelata importante una modifica esplicita di queste informazioni del file, per sapere quali file cifrati sono stati aperti di recente, nel caso se ne vogliano fare delle copie di backup.
Se non si inserisce quella riga, programmi di backup (che spesso si appoggiano su librsync) possono non accorgersi che il file cifrato è stato cambiato o è stato aperto di recente e non lo considerano nel sincronizzare le varie copie.
Script per periferica ordinaria
Con privilegi di amministrazione copiare il file successivo in /usr/local/sbin
, assegnandogli utente e gruppo root e permessi di esecuzione, dopodiché eseguirlo sempre con privilegi.
Si deve però modificare la variabile dello script seguente per utilizzare la propria home.
In questo esempio inoltre viene usata la prima partizione di una scheda di memoria SD (/dev/mmcblk0p1
con lettore compatibile con il modulo sdhci
), se si utilizza una diversa memoria si deve cambiare il percorso.
#!/bin/bash HOME_UTENTE="/home/nomeutente" ### <-- DA MODIFICARE CON LA PROPRIA HOME PATH_MEMORIA="/dev/mmcblk0p1" ### <-- DA MODIFICARE CON IL PATH /dev/... DELLA PROPRIA MEMORIA case $1 in monta) echo "Verifica presenza SD:" if [ -b "$PATH_MEMORIA" ] ; then echo "." else echo "La periferica ($PATH_MEMORIA) non è inserita!" >&2 exit 2 fi if ! [ -e "$HOME_UTENTE"/criptata ]; then mkdir "$HOME_UTENTE"/criptata fi && cryptsetup open --type=luks "$PATH_MEMORIA" criptata && mount /dev/mapper/criptata "$HOME_UTENTE"/criptata || { echo "Il file system cifrato non può essere montato." >&2 cryptsetup close criptata exit 1 } ;; smonta) #Smonto il file system criptato e controllo che lo smontaggio sia avvenuto correttamente umount /dev/mapper/criptata if [ $? != 0 ]; then echo "Smontaggio non riuscito." >&2 exit 2 fi #Chiudo il nodo in /dev/mapper e controllo cryptsetup close criptata if [ $? = 0 ]; then echo "Nodo cifrato in /dev/mapper rimosso." else echo "Chiusura periferica criptata non riuscita" >&2 exit 1 fi ;; *) echo "Usage: $1 {monta|smonta}" >&2 exit 1 ;; esac
Guida scritta da: GipPasso | Debianized 40% |
Estesa da: | |
Verificata da:
| |
Verificare ed estendere la guida | Cos'è una guida Debianized |