Verschlüsseltes System mit LUKS/dm-crypt und LVM aufsetzen

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche


Vorbetrachtungen

Um ein Betriebsystem gegen unbefugte Benutzung abzusichern kann man eine Verschlüsselung einsetzen. Durch eine Vollverschlüsselung der Festplatte soll verhindert werden, das ohne eine Passphrase nicht auf die Daten zugegriffen werden kann. Dies ermöglicht unter Linux LUKS/dm-crypt. Das Ver- und Entschlüsseln wird über den Devicemapper des Kernels bewerkstelligt, der u.a. auch für den Logical Volume Manager die Grundlage ist.


Cryptodevices, SSDs und TRIM

Noch ein Wort zu verschlüsselten Devices die auf einer SSD liegen. Hier sollte man der Versuchung wiederstehen das Dateisystem via TRIM-Kommandos zu optimieren, denn das u.U. Datenschrott zur Folge. Wenn überhaupt dann muss das Cryptodevice mit der Option --allow-discards geöffnet werden. Die Nachteile die man sich die TRIMbarkeit einhandelt sind beachtlich, denn damit steigt das Riskio das im Falle eines Falles die Daten doch wieder rekonstruiert werden können. Somit führt man die Verschlüsselung adabsurdum.

Siehe dazu die Hintergrundinforationen:

TRIM & dm-crypt ... problems?

cryptsetup 1.4.0

Komplettverschlüsselung mit TRIM


Fazit, besser auf die TRIM-Funktionalität von verschlüsselten SSD's verzichten und dafür die maximale Sicherheit erreichen.


Verschlüsselte Logical Volumes auf unverschlüsselten Disk-Device aufsetzen (Variante 1)

Vorteile

  • ein Betrieb von verschlüsselten und unverschlüsselten Logical Volumes nebeneinander ist problemlos möglich
  • alle Dateisysteme des Systems sind unter Kontrolle des Logical Volume Managers, auch das Boot-Verzeichnis (/boot)

Nachteile

  • die Online-Erweiterbarkeit des Logical Volume Managers im laufenden Betrieb ist nicht mehr möglich
  • es wird der Anzahl der angelegten Logical Volumes entsprechend, die Verschlüsselungs-Passphrase abfragt


Schematische Darstellung:

                     Logical Volume 1 (LVboot)      <->  unverschlüsselt                     <-> Dateisystem /boot
                     Logical Volume 1 (LVcryptroot) <-> verschlüsseltes Volume 1 (cryptroot) <-> Dateisystem /
Partition (sda1) <-> Logical Volume 2 (LVcrypthome) <-> verschlüsseltes Volume 2 (crypthome) <-> Dateisystem /home
                     Logical Volume 3 (LVcryptswap) <-> verschlüsseltes Volume 3 (cryptswap) <-> Swap

Unverschlüsselte Logical Volumes auf verschlüsselten Disk-Device aufsetzen (Variante 2, empfohlen)

Vorteile

  • die Online-Erweiterbarkeit des Logical Volume Managers im laufenden Betrieb bleibt uneingeschränkt erhalten

Nachteile

  • das Boot-Verzeichnis (/boot) liegt außerhalb der Kontrolle des Logical Volume Managers, da es eine gewöhnliche Festplattenpartition ist
  • ein Betrieb von verschlüsselten und unverschlüsselten Logical Volumes nebeneinander ist nicht mehr möglich


Schematische Darstellung:

Partition (sda1) <-> unverschlüsselt                   <-> n/a                       <-> Dateisystem /boot
                                                           Logical Volume 1 (LVroot) <-> Dateisystem /
Partition (sda2) <-> verschlüsselte Volume (cryptsda2) <-> Logical Volume 2 (LVhome) <-> Dateisystem /home
                                                           Logical Volume 3 (LVswap) <-> Swap


Installation und Konfiguration der Variante 1

Festplatte partitionieren

Mit fdisk, gparted oder sfdisk die Festplatte mit einer primären Partition (/dev/sda1) vom Type LVM anlegen.

Festplattendevice mit Zufallswerten überschreiben

Um keine Rückschlüsse auf den Inhalt der Disk zulassen ist es ratsam die Disk mit Zufallswerten zu überschreiben.

# dd if=/dev/urandom of=/dev/sda1 bs=10M 

Physical Volume anlegen

# pvcreate /dev/sda1

Volumegruppe anlegen

# vgcreate -s64M VGsys /dev/sda1

Logical Volumes anlegen

Alle Logical Volumes anlegen die im nächsten Schritt verschlüsselt werden. Das LV dass das Dateisystem für das Bootverzeichnis (/boot) muss unverschlüsselt bleiben.

# lvcreate -n LVboot -L 256M /dev/VGsys
# lvcreate -n LVcryptroot -L 10G /dev/VGsys
# lvcreate -n LVcrypthome -L 5G /dev/VGsys
# lvcreate -n LVcryptswap -L 2G /dev/VGsys

Logical Volumes verschlüsseln und Dateisystem anlegen

Die Nachfrage beim cryptsetup Kommando mit YES (in Großbuchstaben) beantworten, das sonst keine Verschlüsseln durchgeführt wird.

# cryptsetup -c aes-xts-plain64:sha256 -y -s 512 luksFormat /dev/mapper/VGsys-LVcryptroot
# cryptsetup luksOpen /dev/mapper/VGsys-LVcryptroot cryptroot
# mkfs.ext4 /dev/mapper/cryptroot
# cryptsetup -c aes-cbc-essiv:sha256 -y -s 512 luksFormat /dev/mapper/VGsys-LVcrypthome
# cryptsetup luksOpen /dev/mapper/VGsys-LVcrypthome crypthome
# mkfs.ext4 /dev/mapper/crypthome

Nun noch das Logical Volume das den Swap enthält verschlüsseln.

# cryptsetup -c aes-xts-plain64:sha256 -y -s 512 luksFormat /dev/mapper/VGsys-LVcryptswap
# cryptsetup luksOpen /dev/mapper/VGsys-LVcryptswap cryptswap
# mkswap /dev/mapper/cryptswap

Installation des Systems

Nun kann wie gewöhnlich die Installation über den siduction installer gestartet werden. Bei der Frage nach dem Root-Dateisystem wählt man das verschlüsselte Dateisystem ' /dev/mapper/cryptroot aus und nicht das LV LVcryptroot. Das unverschlüsselte Boot-LV wählt aus der Liste aus /dev/mapper/VGsys-LVboot. Das LV für das HOME-Dateisystem ist /dev/mapper/crypthome.

Der Rest der Installation läuft wie gewöhnlich ab. Nach der erfogreichen Installation bitte noch nicht das neue System starten, denn es müssen noch ein paar Arbeiten erledigt werden.

Nacharbeiten

Das installiertes Root- und Boot-dateisystem temporär mounten.

# mkdir /media/siduction
# mount /dev/mapper/cryptroot /media/siduction 
# mount /dev/mapper/VGsys-LVboot /media/siduction/boot 

Crypttab /media/siduction/etc/crypttab des installierten Systems anpassen, damit diese beim booten erkannt werden.

cryptroot	/dev/mapper/VGsys-LVcryptroot	none	luks
crypthome	/dev/mapper/VGsys-LVcrypthome	none	luks
cryptswap	/dev/mapper/VGsys-LVcryptswap	none	luks

Die /media/siduction/etc/fstab im installierten System anpassen.

/dev/mapper/cryptroot		/	ext4	defaults,relatime,errors=remount-ro	0	1
/dev/mapper/crypthome		/home	ext4	defaults,relatime,errors=remount-ro	0	2
/dev/mapper/VGsys-LVboot	/boot	ext4	defaults,relatime,errors=remount-ro	0	2
/dev/mapper/cryptswap		none	swap    sw  					0	0

Als nächstes müssen /proc, /run, /sys, /dev/ und /dev/pts wie folgt eingebunden werden für chroot-Umgebung.

# mount --bind /proc /media/siduction/proc
# mount --bind /run /media/siduction/run 
# mount --bind /sys /media/siduction/sys
# mount --bind /dev /media/siduction/dev
# mount --bind /dev/pts /media/siduction/dev/pts

Ins eben installierte System via chroot wechseln um die Initram zu aktualisieren.

# chroot /media/siduction /bin/bash
# update-initramfs -u -k all
# exit

Sollte das verschlüsselte System nicht booten, also bereits vor dem Grub-Bildschirm hängen bleiben, ist noch ein erneutes Installieren des Grub in der chroot-Umgebung erforderlich.

# grub-install /dev/sda
# exit

Wieder zurück im Livesystem die gemounteten chroot-Dateisystem, sowie die zwei Installationsdevices aushängen.

# umount /media/siduction/proc
# umount /media/siduction/run
# umount /media/siduction/sys
# umount /media/siduction/dev/pts
# umount /media/siduction/dev
# umount /media/siduction/boot
# umount /media/siduction

Jetzt kann ein Reboot des neu installierten Systems durchgeführt werden.

Ein verschlüsseltes Dateisystem vergrößern

Bei Variante 1 kann nicht mehr Online, d.h. im laufenden Betrieb ein Dateisystem vergrößert werden. Normalerweise ist dies beim LVM möglich, da aber die LV's verschüsselt worden sind ist dies nur noch im ausgehängten Zustand durchführbar. Nachfolgend die Vorgehensweise am Beispiel des HOME-Dateisystems (um 1 GByte erweitert).

# cd 
# umount /home
# fsck.ext4 -C 0 -f /dev/mapper/crypthome
# cryptsetup luksClose /dev/mapper/crypthome
# lvextend -L +1G /dev/VGsys/LVcrypthome
# cryptsetup luksOpen /dev/mapper/VGsys-LVcrypthome crypthome
# cryptsetup --verbose resize crypthome
# mount  /home
# umount /home
# e2fsck -f /dev/mapper/crypthome
# resize2fs /dev/mapper/crypthome
# mount /home

Ein verschlüsseltes Root-Filesystem kann kann bei dieser Installationsvariante nur von Livesystem aus vergrößert werden, da es im laufenden Betrieb nicht ausgehängt werden kann. Hier die nötigen Schritte aus aus einem Livesystem heraus um eine Vergrößerung durchzuführen (um 1 GByte erwetert).

# lvextend -L +1G /dev/VGsys/LVcryptroot
# lvs
# cryptsetup luksOpen /dev/mapper/VGsys-LVcryptroot cryptroot
# cryptsetup --verbose resize cryptroot
# mount /dev/mapper/crypthome /mnt
# df -h
# umount /mnt
# e2fsck -f /dev/mapper/cryptroot
# resize2fs /dev/mapper/cryptroot
# df -h
# mount /dev/mapper/crypthome /mnt


Installation und Konfiguration der Variante 2 (empfohlen)

Diese Variante verschlüsselt ebenso wie die oben beschriebene Installation das komplette System, außer das /boot Verzeichnis, mit dem Unterschied das hier das Diskdevice /dev/sda2 zuerst verschlüsselt und danach der LVM konfiguriert wird. Das hat den Vorteil das die Online-Erweiterbarkeit des Logical Volume Managers erhalten bleibt. Nachteil ist, dass das FS mit dem /boot Verzeichnis außerhalb des LVM auf einer Partition laufen muss, da das Physical Volume (PV) als Ganzes verschlüsselt ist. Auch eine Anlage eines unverschlüsselten LV's ist in dieser Variante nicht mehr möglich. Ein weiterer Vorteil ist das beim Bootvorgang nur einmal das Passwort des verschlüsselten Containers eingegeben werden muss.


Festplatte partitionieren

Zwei primäre Partitionen sda1 und sda2 anlegen mit dem bevorzugten Partitionierungstool. /dev/sda1 für das Bootverzeichnis (/boot) braucht nicht größer als 512 MByte zu sein, vorsichtige Naturen verwenden evtl. 1 GByte. /dev/sda2 kann der Rest der Festplatte sein der verschlüsselt wird. Beide Partitionen sind vom Type Linux.

Festplattendevice mit Zufallswerten überschreiben

Um keine Rückschlüsse auf den Inhalt der Disk zulassen ist es ratsam die Disk mit Zufallswerten zu überschreiben.

# dd if=/dev/urandom of=/dev/sda2 bs=10M


Festplattendevice verschlüsseln und Dateisystem anlegen

Die Nachfrage beim cryptsetup Kommando mit YES (in Großbuchstaben) beantworten, das sonst keine Verschlüsseln durchgeführt wird. Hier das Cryptsetup für das Device /dev/sda2.

# cryptsetup -c aes-xts-plain64:sha256 -y -s 512 luksFormat /dev/sda2
# cryptsetup luksOpen /dev/sda2 cryptsda2

Dateissystem auf Bootpartition anlegen

Dieses Dateisystem (/dev/sda1) bleibt unverschlüsselt und läuft außerhalb von LUKS/dm-crypt.

# mkfs.ext4 /dev/sda1

PV, VG und LV's konfigurieren

Physical Volume, Volumegroup und Logical Volumes anlegen und die Dateisysteme erzeugen, zuletzt das Swap LV anlegen.

# pvcreate /dev/mapper/cryptsda2
# vgcreate -s64M VGsys /dev/mapper/cryptsda2
# lvcreate -n LVroot -L 10G /dev/VGsys
# lvcreate -n LVhome -L 5G /dev/VGsys
# lvcreate -n LVswap -L 2G /dev/VGsys
# mkfs.ext4 /dev/VGsys/LVroot
# mkfs.ext4 /dev/VGsys/LVhome
# mkswap /dev/VGsys/LVswap


Installation des Systems

Nun kann wie gewöhnlich die Installation über den siduction Installer gestartet werden. Nachfolgende Partitionen angeben:

  • Rootpartition /dev/VGsys/LVroot
  • Bootpartition /dev/sda1
  • Homepartition /dev/VGsys/LVhome

Der Rest der Installation läuft wie gewöhnlich ab. Nach der erfolgreichen Installation bitte noch nicht das neue System starten, denn es müssen noch ein paar Arbeiten erledigt werden.

Nacharbeiten

Das installiertes Root- und Boot-dateisystem temporär mounten.

# mkdir /media/siduction
# mount /dev/VGsys/LVroot /media/siduction 
# mount /dev/sda1 /media/siduction/boot

Die Crypttab unter/media/siduction/etc/crypttab des installierten Systems anpassen.

cryptsda2	/dev/sda2	none	luks

/media/siduction/etc/fstab im installierten System anpassen.

/dev/mapper/VGsys-LVroot	/	ext4	defaults,relatime,errors=remount-ro     0	1
/dev/mapper/VGsys-LVhome	/home	ext4	defaults,relatime,errors=remount-ro     0	2
/dev/sda1			/boot	ext4	defaults,relatime,errors=remount-ro	0	2
/dev/mapper/VGsys-LVswap	none	swap	sw					0	0

Als nächstes müssen /proc, /run, /sys, /dev/ und /dev/pts wie folgt eingebunden werden für chroot-Umgebung.

# mount --bind /proc /media/siduction/proc
# mount --bind /run /media/siduction/run 
# mount --bind /sys /media/siduction/sys
# mount --bind /dev /media/siduction/dev
# mount --bind /dev/pts /media/siduction/dev/pts

Ins eben installierte System via chroot wechseln um die Initram zu aktualisieren.

# chroot /media/siduction /bin/bash
# update-initramfs -u -k all
# exit

Sollte das verschlüsselte System nicht booten, also bereits vor dem Grub-Bildschirm hängen bleiben, ist noch ein erneutes Installieren des Grub in der chroot-Umgebung erforderlich.

# grub-install /dev/sda
# exit

Zurück im Livesystem die gemounteten chroot-Dateisysteme, sowie die zwei Installationsdevices aushängen.

# umount /media/siduction/proc
# umount /media/siduction/run
# umount /media/siduction/sys
# umount /media/siduction/dev/pts
# umount /media/siduction/dev
# umount /media/siduction/boot
# umount /media/siduction

Jetzt kann ein Reboot des neu installierten Systems durchgeführt werden.

Weiterführende Informationen

Festplatten Verschlüsselung mit luks und dmcrypt

Installation auf einer verschlüsselten Festplatte

Festplatte verschlüsseln

Dateisystem verschlüsseln mit LUKS

Resize a LUKS Partition on LVM

Cipher benchmark for dm-crypt / LUKS

Festplattenverschlüsselung mit DM-Crypt und Cryptsetup-LUKS: Technik und Anwendung