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

Aus Bluelupo's Wiki
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. Mehr zu den Grundlagen von LUKS/dm-crypt könnt ihr in den weiter oben verlinkten Beitrag der Wikipedia lesen.


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:

Partition (sda1)
 <-> Logical Volume 1 (LVboot)     <->  unverschlüsselt LVM-Device
   <-> Dateisystem /boot
 <-> Logical Volume 1 (LVcryptroot) <-> verschlüsseltes Volume 1 (cryptroot)
   <-> Dateisystem /
 <-> 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
 <-> Dateisystem /boot


Partition (sda2) <-> verschlüsselte Volume (cryptsda2)
 <-> Logical Volume 1 (LVroot) <-> Dateisystem /
 <-> 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-xts-plain64: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 /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 /etc/fstab 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

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.

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

Sollte auch das nicht das installierte System starten, dann die Reinstallation der jeweiligen Kernelversion durchführen.

Beispiel (bitte an die jeweilige Kernelversion anpassen):

# apt install --reinstall linux-image-4.14.1-towo.2-siduction-amd64
# exit

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 Dateisystem 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. Diese Aktion kann unter Umständen, je nach Festplattengröße, viel Zeit in Anspruch nehmen.

# 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 luksFormat -c aes-xts-plain64:sha256 -y -s 512 /dev/sda2

Jetzt das LUKS Device öffnen.

# cryptsetup luksOpen /dev/sda2 cryptsda2

Eine Alternative zu den manuellen Schritten wäre das Kommando luksformat.

# luksformat -t ext4 /dev/sda2

Hinweis: Das Kommando schließt Cryptodevice wieder.


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

Die fstab unter /media/siduction/etc/fstab des installierten Systems 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, sowie den Grub reinstallieren.

# chroot /media/siduction /bin/bash
# update-initramfs -u -k all
# grub-install /dev/sda
# exit

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

LVM deaktivieren und LUKS Device schließen.

# vgchange -a y
# cryptsetup luksClose cryptsda2

Sollte das verschlüsselte System immer noch nicht booten, also bereits vor dem Grub-Bildschirm hängen bleiben, ist noch ein erneutes Installieren des Grub in der chroot-Umgebung erforderlich. Dazu wieder in die chroot-Umgebung, wie oben beschrieben, wechseln und folgendes Kommando ausführen.

Beispiel (bitte an die jeweilige Kernelversion anpassen):

# apt install --reinstall linux-image-4.14.1-towo.2-siduction-amd64
# exit


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

Probleme mit dem verschlüsselten Dateisystem beim Bootvorgang beheben

Wenn bei einem verschlüsselten Root-Dateisystem beim Booten der automatische fsck fehlschlägt und ein korruptes Dateisystem erkennt, muss man das System mit einem Live-Medium starten. Danach kann man das Rootfilesystem im nicht eingehängten Zustand reparieren.

Zuerst öffnet man das Crypt-Dateisystem

# cryptsetup luksOpen /dev/sda2 cryptsda2

Danach aktiviert man den Logical Volume Manager um das Root-LV zu überprüfen

# vgscan
# vgchange -a y

Jetzt wird das nicht eingehängte Root-Filesystem gestestet und repariert (Option -y)

# fsck.ext4 /dev/VGsys/LVroot
# fsck.ext4 -y /dev/VGsys/LVroot

Den LVM wieder deaktivieren und das Crypt-Dateisystem schließen

# vgchange -a n
# cryptsetup luksClose cryptsda2

Jetzt das Live-System herunterfahren und originale System starten.

Disklayout und Informationen des verschlüsselten System ermitteln

So sieht das laufende verschlüsselte System aus. Mit dem Kommando lsblk kann man dies übersichtlich darstellen.

# lsblk 
NAME                      MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                         8:0    0    50G  0 disk  
├─sda1                      8:1    0   512M  0 part  /boot
└─sda2                      8:2    0  49,5G  0 part  
  └─cryptsda2 (dm-0)      253:0    0  49,5G  0 crypt 
    ├─VGsys-LVroot (dm-1) 253:1    0     6G  0 lvm   /
    ├─VGsys-LVvar (dm-2)  253:2    0     3G  0 lvm   /var
    ├─VGsys-LVhome (dm-3) 253:3    0     2G  0 lvm   /home
    └─VGsys-LVswap (dm-4) 253:4    0     2G  0 lvm   [SWAP] 
sr0                        11:0    1  1024M  0 rom   


Die wichtigsten Infos des verschlüsselten Devices erhält man mit dem nachfolgenden Kommando.

# cryptsetup status /dev/mapper/cryptsda2
/dev/mapper/cryptsda2 is active and is in use.
 type:    LUKS1
 cipher:  aes-xts-plain64:sha256
 keysize: 512 bits
 device:  /dev/sda2
 offset:  4096 sectors
 size:    103802880 sectors
 mode:    read/write


Mit luksDump bekommt man die Headerinfos des verschlüsselten Devices.

# cryptsetup luksDump /dev/sda2 
LUKS header information for /dev/sda2

Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64:sha256
Hash spec:      sha1
Payload offset: 4096
MK bits:        512
MK digest:      e8 0b 33 c1 7f 42 75 e0 2b 11 56 b6 34 50 1e 10 24 6b bd 7b 
MK salt:        e2 20 25 62 91 b8 c3 3c d4 fd 59 8a 22 33 b5 e2 
               4c f0 90 bd 13 ba 77 1c a8 aa 60 22 84 ed 98 83 
MK iterations:  31625
UUID:           8156530f-631b-4c62-9f3b-f0dd870cf4b6

Key Slot 0: ENABLED
       Iterations:             169311
       Salt:                   bb 75 39 47 d1 39 90 7f 52 a6 45 9b d7 ca ef 87 
                               66 0b d8 27 ce 48 98 43 b0 c6 98 2d b0 19 1e 3f 
       Key material offset:    8
       AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED


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

System mit Komplettverschlüsselung (LUKS+LVM) um Speichermedien erweitern