Secondo Wikipedia, Linux Unified Key Setup (LUKS) è una specifica di crittografia del disco creata da Clemens Fruhwirth nel 2004 ed era originariamente concepita per Linux. LUKS utilizza device mapper crypt (dm-crypt
) come modulo del kernel per gestire la crittografia a livello di dispositivo a blocchi.
Esistono diversi strumenti front-end sviluppati per crittografare le partizioni Linux, siano esse semplici partizioni o volumi logici (LV). In questo tutorial, esploreremo questi strumenti e dimostreremo come configurare la crittografia del disco. Ho creato un disco da 10 GB (/dev/vdb
) da utilizzare durante questo tutorial.
Installazione degli strumenti
Iniziamo installando gli strumenti appropriati per la configurazione della crittografia:
dnf install -y cryptsetup parted
Il cryptsetup
il pacchetto fornisce il cryptsetup
comando, che useremo per configurare la crittografia, mentre il parted
il pacchetto fornisce il parted
comando per la configurazione della partizione.
Creazione della partizione
Esecuzione di lsblk
comando mostra la configurazione corrente:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
Possiamo crittografare un intero dispositivo a blocchi come /dev/vdb
, ma la creazione di una partizione offre maggiore flessibilità poiché possiamo aggiungere altre partizioni in un secondo momento.
Ora eseguiamo i seguenti comandi per creare una partizione da crittografare:
[root@rhel8 ~]# parted /dev/vdb mklabel msdos
Information: You may need to update /etc/fstab.
[root@rhel8 ~]# parted /dev/vdb -s "mkpart primary 2048s -1"
[root@rhel8 ~]# parted /dev/vdb align-check optimal 1
1 aligned
Quando si esegue lsblk
di nuovo, vediamo che il dev/vdb1
la partizione è stata aggiunta:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
Formattazione del volume con LUKS
Il seguente processo crittografa dev/vdb1
. Per procedere, devi inserire YES
in maiuscolo e fornire la password due volte:
[root@rhel8 ~]# cryptsetup -y -v luksFormat /dev/vdb1
WARNING!
========
This will overwrite data on /dev/vdb1 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/vdb1:
Verify passphrase:
Key slot 0 created.
Command successful.
Quindi, abbiamo bisogno di un target per aprire il volume crittografato. Ho usato mybackup
come mio obiettivo, ma questo obiettivo può essere chiamato qualsiasi cosa:
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup
Enter passphrase for /dev/vdb1:
Key slot 0 unlocked.
Command successful.
Esecuzione di lsblk
ancora una volta, vediamo:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
└─mybackup 253:2 0 10G 0 crypt
Possiamo anche vedere il mybackup
mappatura del volume crittografato:
[root@rhel8 ~]# ls -l /dev/mapper/mybackup
lrwxrwxrwx. 1 root root 7 Sep 16 16:10 /dev/mapper/mybackup -> ../dm-2
Creazione di un filesystem
Poiché ora possiamo accedere al volume crittografato, è necessario formattarlo prima di poter archiviare i dati su di esso. Puoi scegliere tra diversi tipi di filesystem, come xfs (l'impostazione predefinita su Red Hat Enterprise Linux 8), ext3, ext4, ecc. Per semplicità, useremo xfs come tipo di filesystem:
[root@rhel8 ~]# mkfs.xfs /dev/mapper/mybackup
meta-data=/dev/mapper/mybackup isize=512 agcount=4, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2618880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Creazione del punto di montaggio e della directory
Per scrivere dati sul filesystem crittografato, dobbiamo prima montarlo. Ho scelto /mnt/my_encrypted_backup
essere il punto di montaggio per i miei dati:
[root@rhel8 ~]# mkdir -p /mnt/my_encrypted_backup
Quindi eseguiamo il mount
comando:
[root@rhel8 ~]# mount -v /dev/mapper/mybackup /mnt/my_encrypted_backup/
mount: /mnt/my_encrypted_backup does not contain SELinux labels.
You just mounted an file system that supports labels which does not
contain labels, onto an SELinux box. It is likely that confined
applications will generate AVC messages and not be allowed access to
this file system. For more details see restorecon(8) and mount(8).
mount: /dev/mapper/mybackup mounted on /mnt/my_encrypted_backup.
Qui otteniamo un avviso di Security-Enhanced Linux (SELinux). Abbiamo bisogno di rietichettare il contesto di sicurezza SELinux del punto di montaggio:
[root@rhel8 ~]# restorecon -vvRF /mnt/my_encrypted_backup/
Relabeled /mnt/my_encrypted_backup from system_u:object_r:unlabeled_t:s0 to system_u:object_r:mnt_t:s0
Esecuzione del mount
il comando mostra ancora una volta che l'avviso è sparito:
[root@rhel8 ~]# mount -v -o remount /mnt/my_encrypted_backup/
mount: /dev/mapper/mybackup mounted on /mnt/my_encrypted_backup.
Esecuzione di lsblk
produce nuovamente il seguente output:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
└─mybackup 253:2 0 10G 0 crypt /mnt/my_encrypted_backup
Recupero dei dettagli LUKS
Ora possiamo scaricare le informazioni sull'intestazione di LUKS, la sezione del segmento di dati, gli slot chiave utilizzati, ecc.:
[root@rhel8 ~]# cryptsetup luksDump /dev/vdb1
LUKS header information
Version: 2
Epoch: 3
Metadata area: 12288 bytes
[……]
Digest: 49 5a 68 e9 b6 66 50 2d c8 22 8e b9 d5 fd 2c af
23 b7 47 f3 2f 62 ee 6a b8 7c 93 8f 19 fe d8 3c
Aggiunta di un file chiave e montaggio automatico
Il montaggio automatico del filesystem crittografato LUKS ha implicazioni sulla sicurezza. Per gli utenti di laptop, questa operazione non è una scelta saggia. Se il tuo dispositivo viene rubato, lo sono anche i tuoi dati che sono stati archiviati nella partizione crittografata.
Indipendentemente dalle implicazioni sulla sicurezza sopra menzionate, ecco come impostare il montaggio automatico. Innanzitutto, crea la directory appropriata in cui archiviare il file della chiave:
[root@rhel8 ~]# mkdir /etc/luks-keys/; dd if=/dev/random of=/etc/luks-keys/mybackup_key bs=32 count=1
[root@rhel8 ~]#
Quindi, aggiungi la chiave usando cryptsetup
utilità:
[root@rhel8 ~]# cryptsetup luksAddKey /dev/vdb1 /etc/luks-keys/mybackup_key
Enter any existing passphrase:
[root@rhel8 ~]#
Successivamente, dobbiamo ripristinare il contesto SELinux:
[root@rhel8 ~]# restorecon -vvRF /etc/luks-keys
Relabeled /etc/luks-keys from unconfined_u:object_r:etc_t:s0 to system_u:object_r:etc_t:s0
Relabeled /etc/luks-keys/mybackup_key from unconfined_u:object_r:etc_t:s0 to system_u:object_r:etc_t:s0
In precedenza, abbiamo aperto il filesystem crittografato e lo abbiamo montato manualmente. Ora dobbiamo vedere se possiamo fare lo stesso con l'automazione. Poiché il nostro filesystem è già montato, dobbiamo prima umount
(smontare) esso:
[root@rhel8 ~]# umount /mnt/my_encrypted_backup
[root@rhel8 ~]# cryptsetup -v luksClose mybackup
Command successful.
Proviamo ad aprire la partizione crittografata tramite la riga di comando utilizzando il file come chiave:
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup --key-file=/etc/luks-keys/mybackup_key
Key slot 1 unlocked.
Command successful.
Successivamente, dobbiamo configurare /etc/crypttab
e /etc/fstab
per montare il disco all'avvio. Per prima cosa abbiamo bisogno dell'UUID per /dev/vdb1
(non /dev/mapper/mybackup
), che possono essere recuperati come segue:
[root@rhel8 ~]# blkid /dev/vdb1
/dev/vdb1: UUID="46f89586-f802-44f1-aded-f80b16821189" TYPE="crypto_LUKS" PARTUUID="f92dbe33-01"
Ora inserisci la seguente riga in /etc/crypttab
così possiamo aprire automaticamente il nostro filesystem crittografato:
mybackup UUID=46f89586-f802-44f1-aded-f80b16821189 /etc/luks-keys/mybackup_key luks
Fatto questo, ora possiamo configurare /etc/fstab
. Aggiungi la seguente riga (in grassetto) a questo file:
[root@rhel8 ~]# vi /_etc_/fstab
#
# /etc/fstab
# Created by anaconda on Thu Aug 8 06:21:57 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root / xfs defaults 0 0
[...]
**/dev/mapper/mybackup /mnt/my_encrypted_backup xfs defaults 0 0**
E, infine, possiamo testare per vedere se l'automount funziona senza riavviare la macchina, usando mount -a
:
[root@rhel8 ~]# mount -av
/ : ignored
/boot : already mounted
swap : ignored
/mnt/my_encrypted_backup : successfully mounted
In questo caso, /mnt/my_encrypted_backup
è stato montato con successo. Ora riavvia il sistema e assicurati che l'automount funzioni anche al riavvio.
Pensieri finali
Ci sono altre opzioni che possono essere fornite a cryptsetup
e ognuno ha dei compromessi quando si tratta di velocità e un filesystem più sicuro. Esplora le opzioni e scegli ciò che è meglio per la tua situazione.