LUKS gestione manuale dei volumi: cryptsetup: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(Creata pagina con '= Introduzione = Questa guida contiene solo due esempi di script bash per la gestione attraverso cryptsetup di volumi cifrati secondo lo standard [http://luks.endorphin.org/ LUKS...')
 
 
(15 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
= Introduzione =
{{Versioni compatibili|Jessie|Stretch|Buster}}
Questa guida contiene solo due esempi di script bash per la gestione attraverso cryptsetup di volumi cifrati secondo lo standard [http://luks.endorphin.org/ LUKS] (Linux Unified Keys Setup).
== Introduzione ==
Per la parte relativa alla creazione dei volumi (sia su perfiferica fisica che su file) rimandiamo alla guida su [http://guide.debianizzati.org/index.php?title=Creazione_e_uso_di_una_volume_criptato_LUKS LUKS e cryptmount]
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/>
= Automatizzazione dei passi necessari =
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]]
A questo punto 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.
== 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.<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.
In entrambi i casi il montaggio della periferica criptata avviene nella cartella "criptata" nella home dell'utente; è necessario quindi creare la cartella:<pre>$ mkdir /home/'''nomeutente'''/criptata</pre>
 
=== Script per file immagine ===
=== Script per file immagine ===
<pre>#Utilizzo di un file immagine come periferica criptata
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 /home/'''nomeutente'''/immagine_cifrata ]; then
                 if [ -f "${HOME_UTENTE}/immagine_cifrata" ]; then
                     echo "Impostazione periferica ricorsiva (loop)."
                     echo "Impostazione periferica ricorsiva (loop)."
                     /sbin/losetup /dev/loop0 /home/'''nomeutente'''/immagine_cifrata
                     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
                     /sbin/cryptsetup luksOpen /dev/loop0 criptata
                     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 /home/'''nomeutente'''/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
                     /sbin/cryptsetup luksClose criptata
                     cryptsetup close criptata
                     /sbin/losetup -d /dev/loop0
                     losetup -d "$loopdev"
                    exit 1
                 fi
                 fi
         ;;
         ;;
         smonta)
         smonta)
                 umount /dev/mapper/criptata
                 umount /dev/mapper/criptata
                echo "Smontaggio riuscito"


                 if [ $? = 0 ]; then
                 if [ $? = 0 ]; then
                     /sbin/cryptsetup luksClose criptata
                     echo "Smontaggio riuscito"
                    cryptsetup close criptata
                 else
                 else
                     echo "Smontaggio non riuscito."
                     echo "Smontaggio non riuscito." >&2
                    exit 3
                 fi
                 fi


                 if [ $? = 0 ]; then /sbin/losetup -d /dev/loop0
                 if [ $? = 0 ]; then
if [ $? = 0 ]; then  
                    loopdev=$(losetup -n -O "NAME" -j "${HOME_UTENTE}/immagine_cifrata") &&
    echo "Periferica criptata chiusa"
                    losetup -d "$loopdev"
    touch /home/'''nomeutente'''/criptata.img
    if [ $? = 0 ]; then  
else echo "Chiusura periferica criptata non riuscita"
        echo "Periferica criptata chiusa"
        fi
        touch "${HOME_UTENTE}/criptata.img"
fi
                    else
                        echo "Rimozione periferica ricorsiva non riuscita." >&2
                        exit 1
                    fi
else
                    echo "Chiusura periferica criptata non riuscita" >&2
                    exit 2
        fi
         ;;
         ;;
         *)
         *)
Riga 55: Riga 85:
         exit 1
         exit 1
         ;;
         ;;
esac</pre>
esac
Nello script ho inserito il comando <code>touch</code> per impostare all'ora attuale le date di ultimo accesso e modifica del file criptata.img.
</pre>
Ho ritenuto importante una modifica esplicita di queste informazioni del file, perché può risultare molto più comodo 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/>
Se non si inserisce quella riga, programmi di backup (che spesso si appoggiano su ''librsync'') non possono accorgersi che il file cifrato è stato cambiato o è stato aperto di recente e non lo considerano nel sincronizzare le varie copie.
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.


=== 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 /dev/mmcblk0p1 ] ; then
                 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 [ $? = 0 ]; then /sbin/cryptsetup luksOpen /dev/mmcblk0p1 criptata
                    mkdir "$HOME_UTENTE"/criptata
                 fi
                 fi &&
 
                 cryptsetup open --type=luks "$PATH_MEMORIA" criptata &&
                 if [ $? = 0 ]; then
                mount /dev/mapper/criptata "$HOME_UTENTE"/criptata ||
                    mount /dev/mapper/criptata /home/'''nomeutente'''/criptata
                 {
                 fi
                     echo "Il file system cifrato non può essere montato." >&2
 
                     cryptsetup close criptata
                if [ $? != 0 ]; then
                    exit 1
                     echo "Il file system cifrato non può essere montato."
                 }
                     /sbin/cryptsetup luksClose criptata
                 fi
         ;;
         ;;
         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
                /sbin/cryptsetup luksClose criptata
                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 104: 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
}}


: [[Utente:GipPasso|GipPasso]]
----
[[Categoria:Filesystem]]
[[Categoria:Filesystem]]
[[Categoria:Crittografia]]
[[Categoria:Crittografia]]
[[Categoria:Bash Scripting]]

Versione attuale delle 08:50, 29 set 2019

Debian-swirl.png 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 Swirl-auth40.png Debianized 40%
Estesa da:
Verificata da:
HAL 9000 10:49, 29 set 2019 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized