Wie konfiguriere ich LVM & LUKS für die automatische Entschlüsselung einer Partition?

21

Ich habe vor kurzem Ubuntu Server 11.04 mit der vollen Lvm-Verschlüsselung installiert (installiert vom Setup). Ich möchte jetzt eine Schlüsseldatei zum automatischen Entsperren verwenden. Ich habe versucht, diesem Leitfaden zu folgen: http://ubuntuforums.org/showthread.php?t=837416

Mit diesem Befehl habe ich einen Schlüssel generiert: sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

Ich habe es eingefügt, /boot/grubweil ich denke, dass es nicht verschlüsselt ist. Wenn ich versuche, den Schlüssel mit diesem Komma hinzuzufügen sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile , fragt es mich nach der Passphrase und wenn ich es stelle, passiert nichts, nichts wird auf dem Bildschirm gedruckt! Ich ignoriere es und fahre mit den anderen Schritten fort und starte neu, aber es ist nichts passiert und ich werde nach der Passphrase gefragt.

Danke für die Hilfe .

isoman
quelle
Meinen Sie, ohne Eingabe einer Passphrase zu entschlüsseln? Wenn dies beim Startvorgang möglich wäre, müssten die zum Entschlüsseln des Volumes erforderlichen Schlüssel auf dem System vorhanden sein, auf die während des Startvorgangs zugegriffen werden kann. Wie würden Sie das erwarten, um Sie vor Datendiebstahl zu schützen?
James Henstridge
Ja, ich denke, dass ich den Schlüssel in eine versteckte Partition oder ein USB-Flash-Laufwerk stecken werde. Ist das möglich ?
Isoman
Das Problem ist, dass, wenn der Bootloader den Schlüssel finden kann, auch jemand, der den (unverschlüsselten) Bootcode überprüft, in der Lage ist, ihn zu finden. Wenn Sie den Schlüssel auf einem USB-Stick speichern, möchten Sie sicher sein, dass der Stick nicht mit dem Computer gestohlen wird. Wenn Sie den Stick nur während des Startvorgangs einstecken, ist es nicht bequemer, als eine Passphrase einzugeben.
James Henstridge
So stoppen Sie die automatische
Ciro Santilli am

Antworten:

27

Ich habe das gerade auf meinem neuen Heimserver durchgemacht, es hat viel gegoogelt und geraten, aber ich habe es zum Laufen gebracht. Ich werde versuchen, die Schritte hier zu reproduzieren. Ich verwende Ubuntu Server 11.10 und habe mit einer Standardinstallation unter Verwendung von verschlüsseltem LVM begonnen. Daher beziehe ich mich nur auf die Änderungen, die ich von dort aus vorgenommen habe.

Installieren:

  • / dev / sda1 ist meine unverschlüsselte / boot Partition
  • / dev / sda5 ist meine lvm-Partition, die alles andere enthält - root, swap und home
  • / dev / sdc1 ist die Partition auf meinem USB-Stick, in der ich die Schlüsseldatei speichern werde

Zuerst habe ich eine Schlüsseldatei in meinem Home-Verzeichnis erstellt:

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

(Sie können eine größere Blockgröße verwenden oder für einen größeren Schlüssel zählen)

Teilen Sie cryptsetup den neuen Schlüssel mit (der Inhalt ist wichtig, nicht der Dateiname):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

Dann habe ich meinen USB-Stick mit ext2 formatiert und ihm ein Etikett gegeben. Ich habe ein Etikett verwendet, damit ich es später per Etikett anbringen und das USB-Flash-Laufwerk ersetzen kann, falls etwas schief geht.

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

(Natürlich wird Ihr Gerät variieren)

Kopieren Sie nun die Schlüsseldatei auf das USB-Flash-Laufwerk, das sich im Root-Modus 400 befindet:

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

Ändern Sie / etc / crypttab. Meins ursprünglich enthalten

sd5_crypt UUID=(...) none luks

was ich geändert habe

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

Aktualisieren Sie abschließend die initramfs:

sudo update-initramfs -uv

Es wird nun über die Schlüsseldatei auf dem USB-Stick gestartet. Wenn ich das Flash-Laufwerk entferne (z. B. wenn ich in den Urlaub fahre), bootet es nicht und meine Daten sind sicher.

Wenn jemand weiß, wie er die Passphrase erfragen kann, wenn das USB-Flash-Laufwerk fehlt, ist dies ein nützlicher Fallback. Hoffe das hilft, Ergänzungen oder Korrekturen wären mehr als willkommen!

Randy Orrison
quelle
3
Wenn Sie sich nicht sicher sind, wie Sie eine Kennwortabfrage erhalten sollen, können Sie eine bootfähige Partition im Flash-Laufwerk verwenden, um über ein alternatives initramfs zu laden, das nach einer Schlüsseldatei sucht, und beim Standardstart auf der Festplatte ein reguläres initramfs laden, nach dem Sie gefragt werden ein Passwort.
Wiedereinsetzung von Monica - ζ--
1
@ 3pic Ich bin mir nicht 100% sicher, seit ich das vor einigen Monaten gemacht habe. Ubuntu bootet jedoch in ein virtuelles Dateisystem. keyscript=/lib/cryptsetup/scripts/passdevFügt ein passdevSkript hinzu . Anschließend wird update-initramfs -uvdas Dateisystemarchiv neu erstellt.
VarunAgw
1
@RandyOrrison das ist wirklich toll. Es klappt. Aber ... nachdem es an Initram vorbeigegangen ist, sitzt es ein oder zwei Minuten mit A start job is running for dev-sda8:-keyfile.device (1min 18s...)usw. Es vergeht, alles ist montiert, aber es hängt für eine Weile. Das Protokoll zeigt an, dass das Warten auf das Gerät dev-sda8: -sda7keyfile.device abgelaufen ist. Die Abhängigkeit für Crypto Setup für sda7crypt ist fehlgeschlagen. Natürlich wurde es bereits von initram gemountet, aber .... Was mache ich falsch?
Deitch
1
Aus irgendeinem Grund scheint es nicht mit systemd zu funktionieren. es wird das keyscriptFeld einfach ganz ignorieren .
Etienne Bruines
1
In Ubuntu 17.10+ generiert das Tool update-initramfs kein initramfs-Image, das ein luks-Volume booten kann, wenn sich Ihr Root-Dateisystem auf einem luks-Volume befindet und über eine Schlüsseldatei verfügt. Sie können es zum Laufen bringen, indem Sie "none" als Wert für die Schlüsseldatei belassen und die Optionen auf "keyscript = / etc / my-keyscript" setzen, wobei "/ etc / my-keyscript" ein Shell-Skript ist, das den Schlüssel ausgibt.
Macil
6

Diese Anweisungen von howtoforge.com haben mich mit einem automatisch entschlüsselten Volume zum Laufen gebracht.

Gewusst wie: Automatisches Entsperren von LUKS-verschlüsselten Laufwerken mit einer Schlüsseldatei

Schritt 1: Erstellen Sie eine zufällige Schlüsseldatei

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

Schritt 2: Machen Sie die Schlüsseldatei schreibgeschützt auf root

sudo chmod 0400 /root/keyfile

Dadurch kann die Schlüsseldatei nur von root gelesen werden. Wenn jemand Zugriff auf diese Schlüsseldatei erhält, liegt auf Ihrem Computer ohnehin ein größeres Problem vor.

Alternativ können Sie die gewünschte Schlüsseldatei in root: root anzeigen und in den Ordner / root verschieben

Schritt 3: Fügen Sie die Schlüsseldatei zu LUKS hinzu

LUKS / dm_crypt-fähige Geräte können bis zu 10 verschiedene Schlüsseldateien / Kennwörter enthalten. Neben dem bereits eingerichteten Kennwort wird diese Schlüsseldatei als zusätzliche Autorisierungsmethode hinzugefügt.

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

sdX ist natürlich dein LUKS-Gerät.

Zuerst werden Sie aufgefordert, ein (vorhandenes) Kennwort einzugeben, um das Laufwerk zu entsperren. Wenn alles gut funktioniert, sollten Sie eine Ausgabe wie diese erhalten:

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

Schritt 4: Erstellen Sie einen Mapper

LUKS-Geräte müssen einen Mapper erstellen, auf den in der fstab verwiesen werden kann. Öffnen Sie / etc / crypttab

sudo nano /etc/crypttab

und füge dann eine Zeile wie diese hinzu:

sdX_crypt      /dev/sdX  /root/keyfile  luks

oder Sie können die UUID des Geräts verwenden:

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

sdX_crypt ist der Name des Mapper, der erstellt wird. Sie können hier einen beliebigen Namen verwenden, zB "music" oder "movies" oder "sfdsfawe" ....

Speichern und schließen Sie die Datei, indem Sie die Tastenkombination Strg-x drücken, die Eingabetaste drücken und die Eingabetaste drücken. Strg-x schließt nano, aber zuerst wird gefragt, ob die Datei gespeichert werden soll [yes = enter] und wie der Name lauten soll [same name = enter].

Was wir dort getan haben, ist zu sagen, dass / root / keyfile anstelle der Passworteingabe zum Entsperren des Laufwerks verwendet werden soll.

Schritt 5: Hängen Sie das Gerät in fstab ein

Jetzt haben wir ein entsperrtes Gerät (nun ja, noch nicht, aber wenn das System hochgefahren wird) und müssen es nur noch mounten. Öffne / etc / fstab:

sudo nano /etc/fstab

und füge einen neuen Eintrag hinzu wie:

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

Stellen Sie sicher, dass Sie den richtigen Mapper-Namen haben, den Sie in Schritt 4 hinzugefügt haben. Stellen Sie außerdem sicher, dass der Mount-Punkt / Ordner vorhanden ist. Speichern Sie die hinzugefügte Datei erneut und schließen Sie sie (Strg-x, Enter, Enter).

Schritt 6: Neu starten oder erneut einbinden

Das ist es. Jetzt können Sie neu starten und die zusätzlichen Geräte sollten automatisch entsperrt und gemountet werden. Sie können es auch testen, indem Sie alle Geräte erneut einbinden:

sudo mount -a
Der neue Typ
quelle
1
Sie vergessen zu aktualisieren initramfs, 100% benötigt
3pic
6

Die Antwort von Randy Orrison wurde verbessert. Hier ist ein kleines Skript, das ich erstellt habe. Es wird dazu führen, dass das System den Benutzer nach dem Kennwort fragt, wenn die Schlüsseldatei nicht gefunden wird.

#!/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

Speichern Sie es und ersetzen keyscript=/lib/cryptsetup/scripts/passdevin /etc/crypttabden Pfad zu dieser Datei und laufen sudo update-initramfs -uvund Sie sind fertig.

VarunAgw
quelle
Ich vermute, Ihre Lösung funktioniert nicht für mehr als eine Schlüsseldatei auf dem USB-Laufwerk. Ich meine, wenn ich mehr als eine verschlüsselte Partition habe (home, swap, root). Es scheint, dass der USB-Treiber nach dem Befehl cat nicht entladen wird. Haben Sie eine Idee, wie Sie das Problem beheben können?
Khamidulla
Dies funktioniert bei mir (Xubuntu 17.10), aber ich musste grub bearbeiten und "splash" entfernen. Außerdem musste ich die Datei an einem geeigneten Ort speichern (/ lib / cryptsetup / scripts / unlock_custom) und sie 755 chmod. Ich bin mir nicht sicher, ob Splash oder Kopieren an einem bestimmten Ort für mich funktioniert hat, aber es hat vorher nicht funktioniert. Wie auch immer, es funktioniert aber beim Booten, nachdem Startet AppArmor initialization.ich Folgendes erhalte: Ein Startjob für dev-disk keyfile.device (1m 30s) wird ausgeführt. Nach den 90ern startet X und ich kann mein System benutzen ... keine Ahnung, wie man diesen Startjob repariert ...
firepol
1

@deitch Ich hatte das gleiche Setup wie @Randy Orrison und bin auf dasselbe Problem gestoßen wie Sie. Es stellt sich heraus, dass es sich um einen Fehler von systemd handelt, der versucht, das / Dateisystem erneut zu mounten, wenn der entsprechende Eintrag in / etc / crypttab gefunden wird.

Um dieses Problem zu beheben, habe ich den Eintrag für sda5_crypt aus / etc / crypttab entfernt, nachdem der Befehl update-initramfs -uv ausgeführt wurde.

Starten Sie neu und alles funktioniert einwandfrei wie beabsichtigt.

Mukul Kirtane
quelle