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.