Inhaltsverzeichnis
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. Die Größen der LVs bitte an die eigenen Erfordernisse anpassen.
# lvcreate -n LVboot -L 1024M /dev/VGsys # lvcreate -n LVcryptroot -L 30G /dev/VGsys # lvcreate -n LVcrypthome -L 50G /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:sha512 -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:sha512 -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:sha512 -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 1 GByte zu sein, vorsichtige Naturen verwenden evtl. 2 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üsselung durchgeführt wird. Hier das Cryptsetup für das Device /dev/sda2.
# cryptsetup luksFormat -c aes-xts-plain64:sha512 -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 das 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. Die Größen der LVs bitte an die eigenen Erfordernisse anpassen.
# pvcreate /dev/mapper/cryptsda2 # vgcreate -s64M VGsys /dev/mapper/cryptsda2 # lvcreate -n LVroot -L 30G /dev/VGsys # lvcreate -n LVhome -L 50G /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
Dateisystem verschlüsseln mit LUKS
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