Come configurare LVM e LUKS per codificare automaticamente la partizione?


21

Di recente ho installato Ubuntu Server 11.04 con la crittografia LVM completa (installata dal programma di installazione). Vorrei ora utilizzare un file chiave per sbloccare automaticamente. Ho provato a seguire questa guida http://ubuntuforums.org/showthread.php?t=837416

Ho generato una chiave con questo comando: sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

l'ho inserito /boot/grubperché penso che non sia crittografato. Quando provo ad aggiungere la chiave con questo comando sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile , mi chiede la passphrase e quando la inserisco non succede nulla, nulla viene stampato sullo schermo! Lo ignoro e continuo gli altri passaggi e riavvio ma non è successo nulla e mi chiede la passphrase.

Grazie per l'aiuto .


Intendi decifrare senza inserire una passphrase? Se il processo di avvio è in grado di farlo, le chiavi necessarie per decrittografare il volume dovrebbero trovarsi sul sistema in un punto accessibile durante l'avvio. Come ti aspetti che ti protegga dal furto di dati?
James Henstridge,

Sì, penso che inserirò la chiave in una partizione nascosta o in un'unità flash USB. È possibile ?
Isoman

Il problema è che se il caricatore di avvio è in grado di individuare la chiave, anche qualcuno che controlla il codice di avvio (non crittografato) sarà in grado di individuarla. Se si memorizza la chiave su una chiavetta USB, si dovrebbe essere abbastanza sicuri che la chiavetta non verrà rubata con il computer. Se hai intenzione di collegare lo stick solo durante l'avvio, non è più conveniente inserire una passphrase.
James Henstridge,

Risposte:


27

Ci sono appena passato sul mio nuovo server di casa, ci sono voluti un sacco di ricerche su google e indovinare, ma ho funzionato. Proverò a riprodurre i passaggi qui. Sto usando Ubuntu Server 11.10 e ho iniziato con un'installazione praticamente standard usando LVM crittografato, quindi mi limiterò a mettere in relazione le modifiche che ho fatto da lì.

Impostare:

  • / dev / sda1 è la mia partizione / boot non crittografata
  • / dev / sda5 è la mia partizione lvm che contiene tutto il resto - root, swap e home
  • / dev / sdc1 è la partizione sull'unità flash USB in cui memorizzerò il file di chiavi

Innanzitutto, ho creato un file di chiavi, proprio nella mia directory home:

dd if=/dev/urandom of=keyfile bs=512 count=4

(puoi usare una dimensione di blocco più grande o contare una chiave più grande)

Dì a cryptsetup la nuova chiave (sono i contenuti che sono importanti, non il nome del file):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

Quindi, ho formattato la mia chiavetta USB con ext2 e gli ho dato un'etichetta. Ho usato un'etichetta, in modo che successivamente possa montarla per etichetta e sostituire l'unità flash USB nel caso in cui qualcosa vada storto.

sudo mkfs -t ext2 /dev/sdc1
sudo e2label /dev/sdc1 KEYS

(ovviamente, il tuo dispositivo varierà)

Ora, copia il file di chiavi sull'unità flash USB, di proprietà della modalità root 400:

mkdir KEYS
sudo mount /dev/sdc1 KEYS
sudo cp keyfile KEYS
sudo chown root KEYS/keyfile
sudo chmod 400 KEYS/keyfile

Modifica / etc / crypttab. Il mio originariamente contenuto

sd5_crypt UUID=(...) none luks

che ho cambiato in

sd5_crypt UUID=(...) /dev/disk/by-label/KEYS:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

Infine, aggiorna initramfs:

sudo update-initramfs -uv

Ora si avvia utilizzando il file di chiavi sull'unità flash USB. Se rimuovo l'unità flash (diciamo, quando vado in vacanza) non si avvia e i miei dati sono al sicuro.

Se qualcuno sa come ottenerlo per chiedere la passphrase se manca l'unità flash USB, sarebbe utile come fallback. Spero che questo aiuti, eventuali aggiunte o correzioni sarebbero più che benvenute!


3
Se non si è sicuri su come ottenere una richiesta di password, è possibile utilizzare una partizione avviabile nell'unità flash per caricare tramite un initramfs alternativo che cerca un file di chiavi e che l'avvio predefinito sul disco rigido carichi un initramfs normale che richiede una password.
Ripristina Monica - ζ--

1
@ 3pic Non sono sicuro al 100% da quando l'ho fatto diversi mesi fa. Ma Ubuntu si avvia in un file system virtuale. keyscript=/lib/cryptsetup/scripts/passdevaggiunge lo passdevscript ad esso. E quindi update-initramfs -uvricostruisce l'archivio del file system.
VarunAgw,

1
@RandyOrrison è davvero fantastico. Funziona. Ma ... dopo che ha superato initram, rimane per un minuto o due minuti con A start job is running for dev-sda8:-keyfile.device (1min 18s...)ecc. Passa, tutto è montato, ma si blocca per un po '. Il registro dice "Timeout in attesa del dispositivo dev-sda8: -sda7keyfile.device; dipendenza non riuscita per Crypto Setup per sda7crypt." Certo, era già stato montato da initram, ma ... Cosa sto facendo di sbagliato?
Deitch

1
Per qualche motivo non sembra piacere / lavorare con systemd; semplicemente ignorerà del keyscripttutto il campo.
Etienne Bruines,

1
In Ubuntu 17.10+, lo strumento update-initramfs non genererà un'immagine initramfs in grado di avviare un volume luks se il filesystem di root si trova su un volume luks e ha un file chiave. Puoi farlo funzionare lasciando "none" come valore del file di chiavi e impostando le opzioni per avere keyscript = / etc / my-keyscript, dove / etc / my-keyscript è uno script shell che stampa la chiave.
Macil,

6

Queste istruzioni di howtoforge.com mi hanno reso operativo con un volume di decodifica automatica.

Procedura: sbloccare automaticamente le unità crittografate LUKS con un file di chiavi

Passaggio 1: creare un file di chiavi casuale

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

Passaggio 2: imposta il file di chiavi in ​​sola lettura su root

sudo chmod 0400 /root/keyfile

Ciò renderà il file chiave leggibile solo da root. Se qualcuno ottiene l'accesso a questo file di chiavi, allora hai comunque un problema più grande sul tuo computer.

In alternativa chown il file di chiavi desiderato su root: root e spostarlo nella cartella / root

Passaggio 3: aggiungere il file di chiavi a LUKS

I dispositivi abilitati LUKS / dm_crypt possono contenere fino a 10 file / password chiave diversi. Quindi, accanto alla password già impostata, aggiungeremo questo file di chiavi come metodo di autorizzazione aggiuntivo.

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

sdX è ovviamente il tuo dispositivo LUKS.

Innanzitutto ti verrà richiesto di inserire una password (esistente) per sbloccare l'unità. Se tutto funziona bene, dovresti ottenere un output come questo:

Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

Passaggio 4: creare un mapper

I dispositivi LUKS devono creare un mapper a cui è possibile fare riferimento in fstab. Apri / etc / crypttab

sudo nano /etc/crypttab

e aggiungi quindi una riga come questa:

sdX_crypt      /dev/sdX  /root/keyfile  luks

oppure puoi usare l'UUID del dispositivo:

sdX_crypt      /dev/disk/by-uuid/247ad289-dbe5-4419-9965-e3cd30f0b080  /root/keyfile  luks

sdX_crypt è il nome del mapper che viene creato. Puoi usare qui qualsiasi nome, ad esempio "musica" o "film" o "sfdsfawe" ....

Salvare e chiudere il file emettendo ctrl-x, invio, invio. Ctrl-x chiude nano ma prima chiede di salvare il file [yes = invio] e quale sarà il nome [stesso nome = invio].

Quello che abbiamo fatto lì in realtà è dire che / root / keyfile deve essere usato al posto dell'inserimento della password per sbloccare l'unità.

Passaggio 5: montare il dispositivo in fstab

Ora, abbiamo un dispositivo sbloccato (beh, non ancora ma quando il sistema viene avviato) e dobbiamo solo montarlo ora. Apri / etc / fstab:

sudo nano /etc/fstab

e aggiungi una nuova voce come:

/dev/mapper/sdX_crypt  /media/sdX     ext3    defaults        0       2

Assicurati di avere il nome del mapper corretto che hai aggiunto nel passaggio 4. Assicurati anche che esista il punto di montaggio / cartella. Dopo averlo aggiunto, salva di nuovo il file e chiudilo (ctrl-x, invio, invio).

Passaggio 6: riavviare o rimontare

Questo è tutto. Ora puoi riavviare e i dispositivi aggiuntivi dovrebbero essere sbloccati e montati automaticamente. Puoi anche testarlo rimontando tutti i dispositivi:

sudo mount -a

1
ti dimentichi di aggiornare initramfs, necessario al 100%
3pic

6

Migliorando la risposta di Randy Orrison , ecco un piccolo script che ho creato, che farà fallire il sistema nel chiedere all'utente la password se non riesce a trovare il file di chiavi.

#!/bin/sh

ask_for_password () {
    cryptkey="Unlocking the disk $cryptsource ($crypttarget)\nEnter passphrase: "
    if [ -x /bin/plymouth ] && plymouth --ping; then
        cryptkeyscript="plymouth ask-for-password --prompt"
        cryptkey=$(printf "$cryptkey")
    else
        cryptkeyscript="/lib/cryptsetup/askpass"
    fi
    $cryptkeyscript "$cryptkey"
}

device=$(echo $1 | cut -d: -f1)
filepath=$(echo $1 | cut -d: -f2)

# Ask for password if device doesn't exist
if [ ! -b $device ]; then
    ask_for_password
    exit
fi

mkdir /tmp/auto_unlocker
mount $device /tmp/auto_unlocker

# Again ask for password if device exist but file doesn't exist
if [ ! -e /tmp/auto_unlocker$filepath ]; then
    ask_for_password
else
    cat /tmp/auto_unlocker$filepath
fi

umount /tmp/auto_unlocker

Salva e sostituirlo keyscript=/lib/cryptsetup/scripts/passdevin /etc/crypttabcon il percorso di questo file ed eseguire sudo update-initramfs -uve si è fatto.


Immagino che la tua soluzione non funzioni per l'unità USB per più di un file di chiavi. Voglio dire se ho più di una partizione crittografata (home, swap, root). Sembra che non smonta il driver USB dopo il comando cat. Hai idea di come risolverlo?
Khamidulla,

Questo funziona per me (Xubuntu 17.10) ma ho dovuto modificare grub e rimuovere "splash". Inoltre ho dovuto salvare il file in una posizione corretta (/ lib / cryptsetup / scripts / unlock_custom) e chmod 755. Non sono sicuro che schizzi o copie nel posto specifico lo abbiano fatto funzionare per me, ma non ha funzionato prima. Ad ogni modo, funziona ma all'avvio, dopo Startet AppArmor initialization.aver ricevuto: È in esecuzione un processo di avvio per dev-disk keyfile.device (1m 30s). Dopo l'inizio degli anni '90 X e posso usare il mio sistema ... non ho idea di come risolvere questo lavoro di avvio ...
firepol,

1

@deitch Ho avuto la stessa configurazione di @Randy Orrison e ho riscontrato lo stesso problema che hai riscontrato e si scopre che è un bug di systemd che tenta di montare nuovamente il filesystem / quando trova la voce corrispondente in / etc / crypttab.

Per risolvere questo, ho appena rimosso la voce per sda5_crypt da / etc / crypttab una volta eseguito il comando update-initramfs -uv.

Riavvia e tutto funziona bene come previsto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.