Verschlüsselung: LUKS und LVM

LVM und LUKS

LVM (Logical Volume Manager) bietet unter Linux eine sehr komfortable Methode an, Festplatten und Partitionen zu verwalten.

LUKS (Linux Unified Key Setup) erlaubt die transparente (Anwendungen bemerken nichts davon) Verschlüsselung ganzer Festplatten oder Teilen davon. LUKS ist Nachfolger von dm_crypt und bietet unter anderem den Vorteil, mehrere Passwörter vergeben zu können und beim Ändern (d.h. ein neues erstellen und ein altes löschen) eines Passwortes muss nicht der gesamte Inhalt neu verschlüsselt werden.

LUKS kann auf LVM aufsetzen (bspw. das Verschlüsseln einer Partition oder volume group (Gruppe) oder LVM kann auf LUKS aufsetzen. Über die Vor- und Nachteile sei hier im Moment nichts weiter geschrieben. Das Thema ist recht weitläufig.

Verschlüsseln einer Partition

Prinzipielles Vorgehen

  • Erstellen einer Partition (mit LVM oder als "normale" Partition oder als Datei).
  • Erstellen eines Behälters (Container) zur Aufnahme des verschlüsselten Bereiches mit neuem Passwort
  • Öffnen des Bereiches mit dem gewählten Passwort
  • Initialisieren des Dateisystems auf dem Bereich
  • Einbinden (mount) des verschlüsselten Bereiches

LUKS auf LVM

Komfortabel ist die Benützung des LVM Tools (Redhat, Centos, Fedora: system-config-lvm oder Menü System->Admininstration->Logical Volume Management). Doch per Hand geht es auch:

Auf einer Harddisk (/dev/sdb) wird eine Partition (dev/sdb1) eingerichtet, die dann LVM "beherbergt". In (auf) dieser Partition wird ausgeführt (Annahme: die Tools befinden sich im Pfad):

LVM

Initialisieren der Partition für LVM:

# pvcreate /dev/sdb1

Erstellen einer "volume group" mit Namen LV03 (frei wählbar) in dieser LVM-Partition:

# vgcreate LV03 /dev/sdb1

Erstellen eines Volumens (herkömmlich: einer Partition) auf LV03 mit Namen LV03_crypted (frei wählbar):

# lvcreate -L 10G -n LV03_crypted LV03

Sicherheit, Verschlüsseln und Erstellen des Dateisystems

Füllen des Volumens (Partition) mit Zufallszeichen. Dies verhindert, dass ein Angreifer anhand der sonst erkennbaren Strukturierung der Daten einen Angriff starten kann. Achtung dieser Vorgang kann (wird) mehrere Stunden dauern, je nach Grösse des Bereiches und Geschwindigkeit des Rechners:

# dd if=/dev/urandom of=/dev/LV03/LV03_crypted bs=1M

Verschlüsseln (Hinterlegen des Schlüssels) und erstellen des Block Devices. Auf CentOS5.4 (RHEL5.4) wird dabei AES mit CBC-Essiv und SHA256 verwendet (auf den neueren Fedoras (ab 12) AES-XTS-PLAIN).

# cryptsetup -y luksFormat /dev/mapper/LV03_crypted

(ergibt auf CentOS: cryptsetup -c aes-cbc-essiv:sha256 -y -s 256 luksFormat ...)

"Unlocking" des Block Devices und Eingabe des Passwortes (Pass phrase):

# cryptsetup luksOpen /dev/mapper/LV03_crypted crypt

Erstellen des Dateisystems. Es kann prinzipiell jedes verfügbare Dateisystem benutzt werden:

# mkfs.ext3 -j -m 1 -O dir_index,filetype,sparse_super /dev/mapper/crypt

Einbinden der verschlüsselten Partition

# mkdir /mnt/crypt
# mount /dev/mapper/crypt /mnt/crypt

Abhängen und Abmelden

# umount /mnt/crypt
# cryptsetup luksClose /dev/mapper/crypt

Automatischen Mounten beim Booten

Dafür wird die eindeutige UUID der zu mountenden Partition benötigt:

# cryptsetup luksUUID /dev/mapper/LV03_crypted

Das ergibt eine Zeile der Art:
5f110d4c-e746-2114-9f08-efc7b5cd1206

Diese wird auf einer Zeile in eine (neue, wenn nicht vorhandene) Datei /etc/crypttab geschrieben:

echo "luks-5f110d4c-e746-2114-9f08-efc7b5cd1206 UUID=5f110d4c-e746-2114-9f08-efc7b5cd1206 none" >>/etc/crypttab

Der Ort zum Einbinden wird erstellt (frei wählbar):

# mkdir /mnt/crypt

Dann wird die Datei /etc/fstab erweitert um die Zeile:

echo "/dev/mapper/luks-5f110d4c-e746-2114-9f08-efc7b5cd1206 /mnt/crypt  ext3  defaults  1 2" >>/etc/fstab

Beim nächsten Booten wird nach dem Passwort der neuen Partition gefragt und das System hängt sie in den vorher definierten "mountpoint".

Hinzufügen eines Schlüssels

Man weitere Schlüssel hinzufügen oder entfernen. Bei beiden Befehlen kann man entweder den Schlüssel angeben oder eine Schlüsseldatei.

# cryptsetup luksAddKey /dev/mapper/LV03_crypted [<Schlüsseldate>]
# cryptsetup luksRemoveKey /dev/mapper/LV03_crypted [<Schlüsseldatei>]

Wenn man einen Schlüssel entfernen möchte, den man nicht mehr kennt, aber man ist noch in Besitz eines weiteren, dann geht das unter Angabe eines bekannten Schlüssels direkt mit:

# cryptsetup luksDelKey /dev/mapper/LV03_crypted <Schlüsselnummer>

Weitere Optionen

http://linux.die.net/man/8/cryptsetup