Gegeben
Eine Debian basierte Linux Installation (im Beispiel Ubuntu 2x).
Ziel: alle Partitionen verschluesseln.
Fuer Nachtraeglich oder als Neuinstallation.
Vorbereitung
LUKS installieren
sudo apt-get install cryptsetup
Zielstellung:
- Verschlüsselung der besonders sensiblen Daten
herbeiführen
- komplette Verschlüsselung des ganzen Systems (auch
nachträglich)
Problem
Gute Anleitungen gibt es (nur) fuer Arch Linux
Debian-basierte machen die initramfs anders als Arch
Das
Entschlüsseln
muss mehrstufig ablaufen
Lösung
GRUB entsperrt /boot
initramfs kann den Rest mit gleichen Schlüsseln erledigen
Vorteile
- nur eine Password-Eingabe fuer alles
- leicht mit e2fsck wartbare Partitionen
Das Vorgehen:
- Ubuntu von externem Datentraeger booten
- drei neue Partitionen schaffen fuer LUKS (swap
hier ignoriert), nicht formatieren
- fuer /boot mit LUKS 1 verschluesseln (Details im
Folgenden!)
- die weiteren (/ root und /home) mit LUKS 2
verschluesseln
- die drei LUKS Laufwerke mappen
- ext4-formatieren der mappings fuer /boot, / root und /home
(gpt typ 8309 für LUKS) evtl. swap
- Installationsroutine starten, gemappte Partitionen nicht
reformatieren, grub anpassen, abspulen, nicht rebooten!
- Chroot aus dem laufenden fremdmedium in die neue
Installation (siehe chroot)
- Anpassungen im chroot:
- fstab kontrollieren, editieren
- keyfile generieren und hinterlegen in /etc
- keyfile als LUKS key in jedem verschluesselten Laufwerk
dem blockdevice hinzufuegen
- Datei /etc/initramfs-tools/initramfs.conf muss da sein,
nicht anpassen
- Datei /etc/cryptsetup-initramfs/conf-hook anpassen an
Schluessel
- etc/default/grub anpassen, Entschlüsseln anweisen
- /etc/crypttab fuer die "spaeteren" decrypt per
Schluessel anpassen
- initramfs den Debian Weg bauen
- grub update
- grub installation
- Chroot verlassen und neue Umgebung booten.
Password fuer GRUB decrypt hat nur 1 Versuch (?!)
Gute Literatur
Die Schritte im
einzelnen:
0. Ubuntu ist Debian basiert
Ubuntu ist Debian basiert, das ist im Ablauf etwas anders
als ArchLinux.
Extern kann für die ersten Schritte (Partitionen erzeugen,
LUKS-Format auf dem Blockdevice) irgend ein Linux sein.
Einfach ist, die Neuinstallation auf entschlüsselte
LUKS-"Laufwerke" (entschlüsselte und fertig formatierte
mappings) zu machen.
Alles in einem Rutsch: Dazu am Besten ein Live-iso starten,
LUKS machen, Installation, Anpassen, reboot.
1. Drei neue Partitionen schaffen
besonders:
cryptsetup luksFormat --type luks1 [...]
/dev/nvme0n1p51 nur für /boot
dann testen:
cryptsetup luksDump /dev/nvme0n1p51zeigt
tatsächlich Version 1 (muss auf /boot wegen GRUB!)
1.b. die weiteren (/ root und /home) mit LUKS 2
verschluesseln
Root / und /home: luksFormat Optionen: siehe Schweinekraftland
2.
Aufsetzen von LUKS auf der Zielpartition
Muster:
cryptsetup
luksFormat -s 256 -c
twofish /dev/sda52
Password normal (initial) setzen.
2. die drei LUKS Laufwerke mappen
siehe Schweinekraftland
3.
Mapping erzeugen
und Schweinekraftland
4.
Dem Mapping einen Namen geben
3. ext4-formatieren der mappings fuer /boot, / root und
/home evtl. swap
(siehe Schweinekraftland
5.
Ein Dateisystem erzeugen )
ext4-formatieren der mappings (alle drei)
gpt typ 8309 für LUKS)
4. Installationsroutine starten, gemappte Partitionen
(nicht reformatieren,) nicht rebooten!
Installationsroutine mit den mappings starten, stoppen bei
"Namen":
/etc/default/grub editieren bevor die eigentliche Installation
ablaeuft, d.h. beim Setzen des Benutzernamens:
4.a. /etc/default/grub anpassen, Entschlüsseln
anweisen
grub muss Anweisung haben zu entschlüsseln, dazu:
GRUB_ENABLE_CRYPTODISK=y
GRUB_PRELOAD_MODULES="part_gpt part_msdos"
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
dazu nicht(!!):
# GRUB_PRELOAD_MODULES="luks cryptodisk"
und auch keine Kernel-Parameter aus den
Arch-Linux-Beschreibungen übernehmen.
6. Anpassungen im chroot
6.a. Anpassen von fstab
fstab evtl. OK von der Installation, aber:
Hier sind die mappings wie üblich einzutragen (mit Pfad);
swap ist präsent, wird hier nicht beachtet
EFI wurde von der Installationsroutine gesetzt
"defaults" ist optimierungsbedürftig
# <file system> <mount
point> <type>
<options>
<dump> <pass>
/dev/mapper/sonderrot-luks-701765ee-6c95-4516-895f-c6d6a6d73f9f
/
ext4 errors=remount-ro
0 1
/dev/mapper/sonderboot-luks1-9e95e059-16f4-488e-9977-ec75c5ffc60c
/boot
ext4
defaults
0 2
/dev/mapper/sonderhom-luks-0f018311-1b26-4d9d-bf56-beee1bcefa07
/home
ext4 defaults,users,exec,rw
0 2
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=0243-9A63
/boot/efi
vfat
umask=0077
0 1
6.b. keyfile generieren und hinterlegen in /etc
Prereq:
cryptsetup-initramfs ist normal schon installiert
Es können diverse keys verwendet werden.
Dateien sollen auf .keyfile enden.
Muster:
/etc/sonderkey.keyfile
Create a randomised key-file of 4096 bits (512 bytes)
dd if=/dev/urandom of=/etc/sonderkey.keyfile bs=512 count=1
Lege ihn in /boot und in /etc (es kann auch
anders konfiguriert werden)
Die Rechte von sonderkey.keyfile komplett beschränken, um
Zugriff zu Keys zu verhindern.
Nur r fuer root:
chmod u-wx,go-rwx
/etc/sonderkey.keyfile (alles als
root!)
Soll sein:
Setze UMASK=0077 in /etc/initramfs-tools/initramfs.conf
(funktional nicht erforderlich).
6.c. keyfile als LUKS key in jedem verschluesselten Laufwerk
dem blockdevice hinzufuegen
Zu Passwoertern und Schluesseln: (siehe auch Schweinekraftland
Password
ändern, zurückziehen )
/boot wird von GRUB geoeffnet UND nachher von cryptsetup.
Optional: Um root und /home in einem Vorgang zu oeffnen, den key
auch dafuer verwenden.
Dazu den Schluessel in LUKS hinterlegen (siehe auch
Schweinekraftland):
sudo cryptsetup luksAddKey -v /dev/nvme0n1p000
/etc/meinkey.keyfile (alles als root! Ebenso
fuer alle Partitionen)
Password war initial gesetzt, jetzt key in einen
slot
auf jedem Blockdevice hinzufügen:
cryptsetup luksAddKey /dev/nvme0n1p51
/etc/sonderkey.keyfile
cryptsetup luksAddKey /dev/nvme0n1p52
/etc/sonderkey.keyfile
cryptsetup luksAddKey /dev/nvme0n1p53
/etc/sonderkey.keyfile
6.d. Datei /etc/initramfs-tools/initramfs.conf nicht
anpassen
/etc/initramfs-tools/initramfs.conf nicht editieren, muss
bereits da sein
6.e. Datei /etc/cryptsetup-initramfs/conf-hook anpassen an
Schluessel
Debian erzeugt das
initramfs anders als Arch!
Deshalb
- conf-hook editieren und dann
- kompilieren (erst in 6.h.)
/etc/cryptsetup-initramfs/conf-hook muss vorhanden sein
Configuration file für cryptroot initramfs hook ist:
edit /etc/cryptsetup-initramfs/conf-hook
Voraussetzung zum Kompilieren: Keyfile ist in /etc/crypttab
hinterlegt (Ort wird angegeben, kann anders)
Muster für Inhalt conf-hook:
KEYFILE_PATTERN="/etc/*.keyfile"
#ASKPASS=y
(bewusst auskommentiert)
Normal nur KEYFILE_PATTERN benennen(!)
Wegen Reihenfolge des Aufschließens(!) ist der Ort _nicht_
wahlfrei (ausser für /home?).
6.g. /etc/crypttab fuer die "spaeteren"
decrypt per Schluessel anpassen
Anpassen von /etc/crypttab (ohne Pfade) auf den oder die Dateien
als Schlüssel.
Angabe der slot-Nummer zur Performance-Verbesserung möglich
(,key-slot=1)
Muster:
## crypted /boot to be opened by GRUB:
sonderboot-luks1-9e95e059-16f4-488e-9977-ec75c5ffc60c
UUID="9e95e059-16f4-488e-9977-ec75c5ffc60c"
/etc/sonderkey.keyfile luks,discard
## crypted root / to be opened by cryptomount(?):
sonderrot-luks-701765ee-6c95-4516-895f-c6d6a6d73f9f
UUID="701765ee-6c95-4516-895f-c6d6a6d73f9f"
/etc/sonderkey.keyfile luks,discard
## crypted home to be opened from keyfile like root:
sonderhom-luks-0f018311-1b26-4d9d-bf56-beee1bcefa07
UUID="0f018311-1b26-4d9d-bf56-beee1bcefa07"
/boot/sonderkey.keyfile luks,discard
6.h. initramfs den Debian Weg bauen
Unbedingt CHROOT machen. Ist nicht gegeben durch
Installtionsroutine.
Kompilieren initramfs:
update-initramfs -k all -c
6.i. grub update
update-grub2
6.h. grub installation
grub-install -v /dev/nvme0n1
7. Funktioniert
------- end -----------