LUKS è la crittografia del disco per Linux.
La prima volta quando si crittografa una partizione con LUKS (o quando si seleziona l'opzione di crittografia del disco durante l'installazione del sistema operativo), è necessario specificare una password che verrà utilizzata quando si apre la partizione LUKS.
Ma, dopodiché, puoi montare e smontare la partizione tutte le volte che vuoi senza dover inserire la password fino al riavvio del sistema.
Immagina i due scenari seguenti:
- Hai dimenticato la password LUKS. Oppure, hai ereditato un sistema da qualcuno che ha una partizione montata con crittografia LUKS. Non hai la password LUKS per questo. Quando riavvii il sistema, avrai problemi, poiché non hai la chiave LUKS.
- Per motivi di conformità alla sicurezza, è necessario modificare frequentemente la password di crittografia LUKS. In questo caso devi ruotare la chiave LUKS senza interrompere la partizione montata.
In questo tutorial discuteremo di tutto ciò che devi sapere sulla gestione delle chiavi LUKS.
1. Otto slot per chiavi LUKS
In LUKS, per una singola partizione crittografata, puoi avere otto chiavi diverse.
Una qualsiasi delle otto chiavi diverse può essere utilizzata per aprire la partizione crittografata.
Puoi scegliere di avere una sola chiave su una partizione, oppure puoi assegnare tutte e otto le chiavi diverse.
Queste chiavi sono memorizzate negli slot per chiavi LUKS per la partizione. Quindi, ci saranno 8 slot chiave per una partizione.
Per visualizzare tutti gli slot delle chiavi, utilizzare cryptsetup luksDump come mostrato di seguito. In questo esempio, utilizza solo due slot.
# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
In quanto sopra:
- /dev/sdb1 è la partizione crittografata LUKS.
- Il numero di slot chiave inizia da 0. Poiché abbiamo 8 slot, il numero di slot chiave inizia da 0 a 7.
- ENABLED indica che a questo particolare slot è assegnata una chiave.
- Qui abbiamo due slot con chiave LUKS. Quindi, la partizione crittografata /dev/sdb1 LUKS ha due chiavi assegnate.
2. Aggiungi una nuova chiave LUKS
Per aggiungere una nuova passphrase LUKS (chiave LUKS) alla partizione crittografata /dev/sdb1 LUKS, utilizzare il comando cryptsetup luksAddKey come mostrato di seguito.
# cryptsetup luksAddKey /dev/sdb1 Enter any passphrase: Enter new passphrase for key slot: Verify passphrase:
In quanto sopra:
- Quando dice "Inserisci una passphrase:", dovresti inserire una qualsiasi delle password esistenti per /dev/sdb1. Come abbiamo visto sopra, questo aveva già due password da Slot 0 e Slot 1. Dovresti prima inserire una di quelle password.
- Una volta inserita una password esistente, puoi assegnare una nuova chiave LUKS.
Ogni volta che aggiungi una nuova chiave LUKS, verrà aggiunta al successivo slot disponibile. Poiché avevamo già due chiavi esistenti, la nuova chiave è stata aggiunta allo slot n. 2, che era il successivo slot disponibile.
Quindi, lo slot da 0 a 2 indicherà "ABILITATO". Abbiamo tre chiavi LUKS su /dev/sdba1.
# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
3. Aggiungi una nuova chiave LUKS a uno slot specifico
Invece di aggiungere la nuova chiave LUKS allo slot successivo disponibile, puoi anche aggiungere una nuova chiave a uno slot specifico.
Per questo usa l'opzione -S in cryptsetup luksAddKey come mostrato di seguito.
In questo esempio, stiamo aggiungendo una nuova chiave LUKS allo Slot#5. Ho assegnato la nuova passphrase come:PasswordforSlot5
# cryptsetup luksAddKey /dev/sdb1 -S 5
Come vediamo di seguito, ora lo slot n. 5 dice "ABILITATO", mentre lo slot n. 3 e n. 4 sono ancora in stato DISABILITATO.
# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: ENABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
A questo punto, abbiamo 4 chiavi LUKS assegnate alla partizione crittografata /dev/sdb1.
4. Elimina una chiave LUKS esistente
Per rimuovere una chiave esistente dalla partizione LUKS, usa cryptsetup luksRemoveKey come mostrato di seguito.
In questo esempio, devi solo inserire la password (chiave) che vuoi cancellare.
Rimuovere/cancellare/eliminare una chiave LUKS da uno slot. Non è necessario specificare il numero di slot. Specificare invece la chiave da eliminare!.
In questo esempio, quando viene richiesto "Inserisci la passphrase LUKS da eliminare:", ho inserito la chiave creata nell'esempio precedente:PasswordforSlot5
# cryptsetup luksRemoveKey /dev/sdb1 Enter LUKS passphrase to be deleted:
Come puoi vedere dal seguente output di luksDump, la chiave nello Slot#5 è ora cancellata.
# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
5. Elimina una chiave LUKS utilizzando luksKillSlot
Se non hai la chiave per uno slot particolare, ma vuoi semplicemente eliminarla, puoi farlo usando il comando cryptsetup luksKillSlot come mostrato di seguito.
In questo esempio, stiamo eliminando la chiave dallo slot LUKS#2.
Per questo, devi inserire la chiave LUKS per uno qualsiasi degli slot. Questa è solo una convalida prima di eliminare la chiave dallo slot n. 2.
# cryptsetup luksKillSlot /dev/sdb1 2 Enter any remaining LUKS passphrase:
Come puoi vedere dal seguente output di luksDump, la chiave nello Slot#2 è ora cancellata.
# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
6. Aggiungi una nuova chiave LUKS da un file
Puoi anche aggiungere una nuova chiave LUKS basata su un file di chiavi che hai già come mostrato di seguito.
# cryptsetup luksAddKey /dev/sdb1 masterkeyfile Enter any passphrase:
In quanto sopra:
- masterkeyfile contiene la nuova chiave LUKS che vuoi aggiungere. Questo dovrebbe essere un file binario.
- Quando viene richiesto "Inserisci una passphrase:", inserisci una qualsiasi delle chiavi LUKS esistenti per la partizione /dev/sdb1.
- Come vedi sopra, non è stata richiesta la nuova chiave LUKS, poiché l'ha presa dal file della chiave master.
Come puoi vedere dal seguente output di luksDump, questa nuova chiave dal file masterkey viene aggiunta allo slot#2
# cryptsetup luksDump /dev/sdb1 | grep Slot Key Slot 0: ENABLED Key Slot 1: ENABLED Key Slot 2: ENABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
7. Reimposta chiave LUKS dimenticata:ottieni la chiave esistente
Se hai riavviato il server e non riesci a montare la tua partizione LUKS crittografata, perché hai dimenticato la tua password LUKS, allora sei sfortunato, puoi ripristinarla.
Ma, se una partizione LUKS crittografata è già aperta, e se non hai riavviato il sistema e hai dimenticato la password LUKS per la partizione già montata (almeno LUKS aperto una volta dall'ultimo riavvio), allora puoi assegnare una nuova chiave LUKS.
In questo scenario "password LUKS dimenticata", puoi eseguire i due passaggi seguenti:
- Estrai la chiave crittografata corrente dalla partizione LUKS
- Crea una nuova chiave LUKS utilizzando la chiave crittografata estratta sopra
In questo esempio, ho la partizione /home1 montata, che è una partizione crittografata LUKS, ma non ho la password per questo.
# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 127G 44G 76G 37% / /dev/mapper/home1 93G 188M 88G 1% /home1
Il nome del volume è quello che c'è dopo "/dev/mapper/" nella prima colonna dell'output del comando df sopra. Quindi, nel nostro esempio, il nome del volume è "home1"
La seguente tabella dmsetup –showkeys mostrerà le chiavi crittografate di tutte le partizioni che sono montate sul tuo sistema.
# dmsetup table --showkeys home1: 0 197259264 crypt aes-cbc-essiv:sha256 607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c 0 8:17 4096
Il campo dopo "aes-cbc-essiv:sha256" è la password crittografata. Ottieni la chiave LUKS crittografata e salvala in un file.
# vi existinglukskey.txt 607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c
8. Reimposta chiave LUKS dimenticata:crea un file di chiave binaria
Ora dobbiamo convertire questa chiave esistente da un file di testo a un file binario. Usa il comando xxd come mostrato di seguito.
# xxd -r -p existinglukskey.txt existinglukskey.bin
In quanto sopra:
- L'opzione
- -r è per il contrario. Questo convertirà l'hexdump in binario. L'opzione
- -p è per PostScript. Questo indica lo stile hexdump continuo Postscript.
- file di input esistentelukskey.txt
- file di output esistentelukskey.bin. Questo ora conterrà la password LUKS crittografata esistente in un file binario.
9. Reimposta chiave LUKS dimenticata:aggiungi una nuova chiave
Infine, aggiungi una nuova chiave LUKS utilizzando la chiave LUKS esistente che abbiamo estratto nel file binario.
# cryptsetup luksAddKey /dev/sdb1 --master-key-file <(cat existinglukskey.bin) Enter new passphrase for key slot: Verify passphrase:
In quanto sopra:
- –file-chiave-master Specificare qui il file binario. Non utilizzare il file esistentelukskey.txt. Usa invece il file existinglukskey.bin che abbiamo creato sopra.
- Come vedi sopra, luksAddKey non ha richiesto la password LUKS esistente, poiché l'ha presa dal file binario.
- Quando viene richiesto "Inserisci una nuova passphrase per lo slot della chiave:", inserisci la nuova password LUKS. Ma, questa volta, non dimenticarlo.
Ancora una volta, ricorda questo:se dimentichi la password LUKS dopo aver riavviato il sistema, sei fuori Luks (sfortunato), poiché non puoi ripristinarlo.
10. Scarica LUKS MasterKey
Puoi anche scaricare la MasterKey e tenerla al sicuro da qualche parte. Usa l'opzione –dump-master-key insieme a luksDump come mostrato di seguito.
# cryptsetup luksDump --dump-master-key /dev/sdb1 Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: LUKS header information for /dev/sdb1 Cipher name: aes Cipher mode: cbc-essiv:sha256 Payload offset: 4096 UUID: 146d639a-757c-4bcb-aee6-8fe815345104 MK bits: 256 MK dump: 60 7f 48 28 70 c7 95 a9 b1 e3 07 ff bf c6 64 3e aa 21 9e 9e f8 c6 77 3d e0 2c d2 98 c8 fc da 3c
Tieni presente che devi archiviare il dump dell'intestazione LUKS in un luogo sicuro. Utilizzando il dump della chiave principale, qualcuno può accedere alla partizione crittografata LUKS.