Ubuntu: System verschlüsseln

In diesem Beitrag beschäftigen wir uns einmal damit ein Ubuntu System verschlüsselt zu installieren.

Vorwort:

Das Verschlüsseln von Daten kann der Sicherheit bei der Wahrung der Privatsphäre oder sensibler Daten dienen, bedeutet aber in der Konsequenz, dass eine eventuell zukünftig notwendige Datenrettung durch eine manuelle Entschlüsselung erschwert werden kann.
Eine Entscheidung für oder gegen eine Datenverschlüsselung sollte daher nicht leichtfertig erfolgen.
Empfohlen wird eine individuelle Nutzen-Risiko-Abwägung bezogen auf Anwendungsbereich, Computerkenntnisse des Nutzers oder ähnliche Faktoren, um die Gefahr eines späteren Datenverlusts zu minimieren.

Merke: Ohne ein sicheres Kennwort nutzt die stärkste Verschlüsselung nichts!

Vorbereitung:

Sollten sich auf dem Computer noch wichtige Daten befinden, sollte man unbedinngt vorher eine Datensicherung durchführen.

Durchführung:

Wir benötigen eine reguläre Ubuntu Desktop-CD und booten diese. Nachdem das Live-System hochgefahren ist, stellen wir zuerst einmal sicher, dass wir über eine Internetverbindung verfügen.
Nun können wir mit der Partitionierung der Festplatte beginnen, diese sollte wie folgt aussehen:

  • /dev/sdx1
    Boot-Partition (unverschlüsselt)
    Größe: 500 MB

  • /dev/sdx2
    verschlüsseltes LVM-Volume
    Größe: üblicherweise der verfügbare Rest, aber mindestens 8 GB (root + Swap)

Nun kann mit der Verschlüsselung der Partition begonnen werden. Sollten sich vorher Daten auf der Festplatte befunden haben, ist es ratsam die Partition ein Mal mit Zufallszahlen zu überschreiben, da sonst eventuell noch Daten ausgelesen werden können.

Zuerst müssen wir auf der größeren Partition ein LUKS-Medium erstellen und dieses öffnen.
Beim Einsatz von XTS mit 256 Bit AES sehen die Befehle wie folgt aus:

bash:~$ cryptsetup -c aes-xts-plain64 -s 512 -h sha512 luksFormat /dev/sdX2
bash:~$ cryptsetup luksOpen /dev/sdX2 lukslvm

Mit den folgenden Befehlen wird das LVM-Volume in der verschlüsselten Partition erzeugt:

bash:~$ pvcreate /dev/mapper/lukslvm
bash:~$ vgcreate vgubuntu /dev/mapper/lukslvm

Nun erstellen wir die Logical Volumes (2 GB für swap und der Rest für root):

bash:~$ lvcreate -L 2G -n swap vgubuntu
bash:~$ lvcreate -l 100%FREE -n root vgubuntu

Sollten noch weitere Partitionen benötigt werden, können diese genauso eingerichtet werden. Natürlich darf dann root nicht 100% des verfügbaren Platzes bekommen.

Aufgrund von Problemen mit dem Live-CD-Installer müssen alle Partitionen vorher manuell formatiert werden.

bash:~$ mkswap /dev/mapper/vgubuntu-swap
bash:~$ mkfs.ext4 /dev/mapper/vgubuntu-root

Dannach wird das Installationsprogramm gestartet, wichtig ist allerdings dass man die manuelle Partitionierung auswählt.
Dort tätigt man dann folgende Einstellungen:

  • /dev/sdX1
    Boot-Partition
    Dateisystem: ext4
    Formatieren: ja
    Einhängepunkt: /boot

  • /dev/mapper/vgubuntu-root
    Root-Partition
    Dateisystem: ext4
    Formatieren: ja
    Einhängepunkt: /

Die swap Partition muss normalerweise nicht verstellt werden, da diese in der Regel automatisch erkannt wird.

Nun fährt man wie gewohnt mit der Installation fort, allerdings startet man nach dem Abschluss nicht neu.

Damit unser installiertes System auch wie gewohnt booten kann, müssen wir noch ein paar Änderungen durchführen.
Dazu wechseln wir mittels chroot in unser frisch installiertes System:

bash:~$ mount /dev/mapper/vgubuntu-root /mnt
bash:~$ mount /dev/sdX1 /mnt/boot
bash:~$ mount -o rbind /dev /mnt/dev
bash:~$ mount -t proc proc /mnt/proc
bash:~$ mount -t sysfs sys /mnt/sys
bash:~$ cp /etc/resolv.conf /mnt/etc/resolv.conf
bash:~$ chroot /mnt /bin/bash

Um unser verschlüsseltes Volume beim Booten korrekt einbinden zu können, müssen wir die Datei /etc/crypttab erzeugen.
Hierfür existiert praktischerweise ein netter Einzeiler:

bash:~$ printf "lukslvm\tUUID="%s"\tnone\tluks\n" "$(cryptsetup luksUUID /dev/sdX2)" | tee -a /etc/crypttab

Anschließend stellen wir sicher, dass das dm-crypt-Modul geladen wird:

bash:~$ echo "dm-crypt" >> /etc/modules

Bei einigen USB-Tastaturen kann es vorkommen, dass diese beim Booten nicht erkannt werden und somit eine Passworteingabe nicht möglich ist.
Deshalb wird das Modul ohci_pci in /etc/initramfs-tools/modules eingetragen

bash:~$ echo "ohci_pci" >> /etc/initramfs-tools/modules

und die Kernel-Initramfs aktualisiert:

bash:~$ update-initramfs -u -k all

Wenn die root Partition mit aktivem data journaling gemountet werden soll, muss bereits beim Kernelstart ein entsprechender Kernel-Parameter angegeben werden.
Dazu editiert man die Datei /etc/default/grub folgendermaßen:

bash:~$ GRUB_CMDLINE_LINUX_DEFAULT="kopt=root=/dev/mapper/vgubuntu-root"

Damit die Konfiguration angewendet wird geben wir folgenden Befehl ein:

bash:~$ update-grub

Zum Abschluss müssen wir die Chroot-Umgebung noch schliesen und die Partitionen sauber aushängen:

bash:~$ exit
bash:~$ sync
bash:~$ umount /mnt/sys
bash:~$ umount /mnt/proc
bash:~$ umount /mnt/dev/pts
bash:~$ umount /mnt/dev
bash:~$ umount /mnt/boot
bash:~$ umount /mnt
bash:~$ swapoff -a
bash:~$ lvchange -a n vgubuntu
bash:~$ cryptsetup luksClose lukslvm

Nun können wir das System neustarten.
Beim Bootvorgang unseres Systems sollten wir jetzt nach unserem Passwort gefragt werden.