[[Vorlage(Getestet, bionic)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Hinweis Dieses Wiki ist nur für 18.04 gültig und kann somit noch bis '''April 2023''' angewendet werden. Alle Links, die sich auf die Installation beziehen, führen auf die überarbeitete Seite und sind somit nur noch bedingt verwendbar }}} {{{#!vorlage Warnung Das in diesem Artikel verwendete Skript `decrypt_derived` ist nicht LUKS2 neuerer Ubuntu Installationen kompatibel. Werden die hier beschriebenen Befehle auf ein LUKS2 Laufwerk angewendet, landet eine unsichere Fehlermeldung als Passwort im Keyslot. Daher unbedingt die Ausgabe bzw. Fehlercode von `decrypt_derived` beachten. Fehlermeldung in Keyslot durch neues Passwort ersetzen: `cryptsetup --key-file=<(echo "/lib/cryptsetup/scripts/decrypt_derived: device root uses the kernel keyring") luksChangeKey /dev/sdX2` Die Schlüsselableitung lässt sich mit `decrypt_keyctl` einfach durch einen Passwort-Cache ersetzen. Alternativ können Keyfiles verwendet werden. Damit ist bei Systemstart weiterhin nur die einmalige Eingabe eines Passworts erforderlich. Siehe auch: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919725#20 }}} {{{#!vorlage Wissen [:Ubuntu_Installation_im_BIOS-_oder_Legacy-_Modus: Ubuntu installieren] [:Internetzugang: Internetverbindung einrichten] [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Partitionierung: Festplatten in Partitionen einteilen] [:Skripte/Gerät_mit_Pseudozufallszahlen_überschreiben:Gerät mit Pseudozufallszahlen überschreiben] [:LUKS:Verschlüsselte Partitionen mit LUKS] [:LUKS/Schlüsselableitung:LUKS-Schlüsselableitung] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis]] Das Ubuntu-System lässt sich bereits automatisch bei der [:Installation:] verschlüsseln. Mit dieser Anleitung wird Ubuntu stattdessen manuell, ebenso bis auf die Boot-Partition, die nur den Kernel und Bootloader enthält, in verschlüsselten Partitionen installiert, wodurch man mehr Einfluss auf die [:Partitionierung:] hat. Es wird die [:LUKS/Schlüsselableitung:LUKS-Schlüsselableitung] eingesetzt, da mit dieser beim Start nur eine Passworteingabe nötig ist und der [:Archiv/Energiesparmodi_mit_ACPI#ACPI-SUSPEND-Modi-S0-S1-S2-S3-S4-S5:Ruhezustand (S4)] noch funktioniert. Sollte mehr als eine Partition für Ubuntu verwendet werden (z.B. eine separate Home-Partition), ein zusätzliches Betriebssystem auf der Festplatte bereits installiert sein oder nachträglich installiert werden, ist die Variante auf Basis von [:LVM:], die unter [:System verschlüsseln:] ausführlich beschrieben wird, vorzuziehen. Mit dieser ist es auch im Gegenteil zu der hier beschriebenen möglich, nachträglich die internen Partitionsgrößen zu verändern oder weitere Partitionen hinzuzufügen oder zu löschen. Das hier erörterte Verfahren ist weniger flexibel, funktioniert aber ohne [:LVM:]. {{{#!vorlage Hinweis Ohne ein sicheres Kennwort nutzt die stärkste Verschlüsselung nicht! Wie man Passwörter am besten wählt, steht hier: [:Sicherheits 1x1#Passwoerter:] }}} = Vorbereitungen = Wenn sich auf dem Computer schon ein Betriebssystem (wie beispielsweise Windows, Mac OS oder ein anderes Linux-System) oder wichtige Daten befinden, sollte von den wichtigen Daten unbedingt eine Sicherung erstellt werden. Wie bei jeder Veränderung am Computer kann immer auch etwas schiefgehen. Zur Installation wird die normale Desktop-CD benötigt. Diese einfach booten [1]. Nachdem das Live-System geladen wurde, jedoch nicht das Installationsprogramm ausführen. Es wird zwingend eine funktionierende Internetverbindung [2] benötigt, da Programme nachinstalliert werden müssen. {{{#!vorlage Hinweis Alle folgenden Befehle benötigen [:sudo: Root-Rechte]. Man sollte also mit '''sudo -s''' Root-Status erlangen! }}} == Partitionierung == {{{#!vorlage Warnung Änderungen an Partitionen können __nicht__ mehr rückgängig gemacht werden! }}} {{{#!vorlage Hinweis '''/dev/sdX1''', '''/dev/sdX2''' bzw. '''/dev/sdX3''' müssen im folgenden immer durch die tatsächlichen Bezeichnung der Partitionen ersetzt werden! Außerdem ist zu beachten, dass ohne eine [:Partitionierung/Grundlagen#Primaere-Partitionen-erweiterte-Partition-und-logische-Laufwerke:erweiterte Partition] nicht mehr als eine zusätzliche neben den dreien von Ubuntu vorhanden sein können. }}} Es werden mindestens drei Partitionen benötigt [5]: * '''/dev/sdX1''' (ext4) * Boot-Partition (unverschlüsselt) * Größe: mindestens 200 MB (mehr ist im Regelfall aber nicht nötig) * '''/dev/sdX2''' (unformatiert) * verschlüsselte [:Swap: Swap-Partition] * Größe: ca. 1,3fache des RAMs (bei weniger als 512 MB Arbeitsspeicher das 2fache) * '''/dev/sdX3''' (unformatiert) * verschlüsselte Root-Partition * Größe: üblicherweise der verfügbare Rest, aber mindestens 8 GB {{{#!vorlage Hinweis Tipp: Die Boot-Partition (unverschlüsselt) wird so groß erstellt (z.B. 5 GB), dass ein ISO-Image der gewünschten Ubuntu Distribution (gleiche Architektur!) großzügig drauf Platz findet. Dann wird wie [:GRUB_2/Skripte#Beispiel-Ubuntu-Iso:hier] beschrieben das ISO-Image in GRUB 2 eingebunden. Falls man nun irgendwann Probleme mit dem Vollverschlüsselten System hat, kann man beim Booten in GRUB 2 stattdessen das ISO Live System starten und damit Diagnose und Reparaturen des Vollverschlüsselten System ausführen. }}} {{{#!vorlage Experten Man sollte sich vorab darüber informieren, ob der Rechner mit einem [:EFI_Bootmanagement:] versehen ist und wie die Festplatte(n) [:GRUB_2/Grundlagen:formatiert] wurden! Weitere Informationen stehen unter [:EFI_Grundlagen:] zur Verfügung! }}} Bei EFI-Systemen ist zu beachten, dass auf jeden Fall neben der unverschlüsselten Boot-Partition noch eine unverschlüsselte [:GRUB_2/Grundlagen#Mit-EFI:EFI-Partition] anzulegen ist. Eine Alternative wäre die Nutzung des BIOS-Kompatibilitätsmodus '''CSM'''. Zum weiteren Vorgehen bei vorhandenem [:EFI_Bootmanagement:EFI Bootmanagement] für verschlüsselte Systeme mit Schlüsselableitung kann man sich auch an den EFI-Hinweisen der Anleitung [:System_verschlüsseln:] ohne Schlüsselableitung orientieren. Insbesondere ist darauf zu achten, dass die EFI-Partition als solche gekennzeichnet sowie dass sie beim [#Ins-verschluesselte-System-wechseln chroot] berücksichtigt wird. == Verschlüsselung der Partitionen == {{{#!vorlage Warnung Es ist aus Sicherheitsgründen empfehlenswert, die Partitionen einmal mit Zufallszahlen zu überschreiben, vor allen Dingen, wenn vorher auf diesen unverschlüsselte Daten gespeichert waren. [6] Ansonsten sind unter Umständen viele Dateien nach dem Verschlüsseln noch auslesbar. }}} Daraufhin wird die root Partitionen verschlüsselt und mit den Namen '''root''' geöffnet [7]. {{{#!vorlage Experten Sollte eine niedrigere Schlüssellänge oder ein anderer Verschlüsselungsalgorithmus bevorzugt werden, müssten die Befehle entsprechend angepasst werden[7]. }}} {{{#!vorlage Befehl cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y /dev/sdX3 cryptsetup luksOpen /dev/sdX3 root }}} Anschließend wird die Swap-Partition mit einem von der Root-Partition abgeleiteten Schlüssel [8] erstellt und geöffnet: {{{#!vorlage Befehl /lib/cryptsetup/scripts/decrypt_derived root | cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y /dev/sdX2 /lib/cryptsetup/scripts/decrypt_derived root | cryptsetup luksOpen /dev/sdX2 swap }}} == Formatierung der Partitionen == Aufgrund von Problemen mit dem Live-CD-Installer müssen die verschlüsselten Partitionen vorher manuell formatiert werden: {{{#!vorlage Befehl mkfs.ext4 /dev/mapper/root mkswap /dev/mapper/swap }}} = Installation = [[Bild(Partitionierung.png, 450, right)]] Danach wird das Installationsprogramm gestartet [1] und mit diesem bis [:Ubuntu_Installation_im_BIOS-_oder_Legacy-_Modus/#Varianten-der-automatischen-oder-halbautomatischen-Partitionierung:Etwas Anderes] fortgefahren, bei dem die ''"manuelle Partitionierung"'' ausgewählt wird. Im nächsten Installationspunkt werden die folgenden Partitionen jeweils mit einem Doppelklick auf die entsprechenden Einträge konfiguriert. Die Swap-Partition braucht nicht ausgewählt zu werden, da sie automatisch erkannt wird. * '''/dev/sdX1''' * Boot-Partition * Dateisystem: '''ext4''' * Formatieren: ja * Einhängepunkt: '''/boot''' * '''/dev/mapper/root''' * Root-Partition * Dateisystem: '''ext4''' oder gewünschtes [:Dateisystem#Linux-Dateisysteme:Linux-Dateisystem] * Formatieren: ja * Einhängepunkt: '''/''' Danach wird gemäß Anleitung [1] mit der Installation fortgefahren, jedoch nach dem Abschluss der Installation __nicht neugestartet__. {{{#!vorlage Experten Sollte parallel Windows installiert und mit [:VeraCrypt:] verschlüsselt worden sein, wird GRUB in die Boot-Partition '''/dev/sdX1''' anstelle des MBRs installiert. Das wird im [:https://wiki.ubuntuusers.de/Ubuntu_Installation_im_BIOS-_oder_Legacy-_Modus/#Geraet-fuer-die-Bootloaderinstallation: Gerät für die Bootloaderinstallation] eingestellt. Dort wird anstelle von '''hd0''' die Boot-Partition ausgewählt. GRUB erscheint dann, sobald [[Vorlage(Tasten, escape)]] im Veracrypt-Bootloader gedrückt wird. }}} == Ins verschlüsselte System wechseln == {{{#!vorlage Hinweis Alle folgenden Befehle müssen in ein und demselben Terminal [4] ausgeführt werden. }}} Um die nötigen Anpassungen vorzunehmen, wird mittels [:chroot:] in das eigentliche, verschlüsselte System gewechselt. Das geschieht durch die Eingabe der folgenden Befehle: {{{#!vorlage Befehl mount /dev/mapper/root /mnt mount /dev/sdX1 /mnt/boot mount -o rbind /dev /mnt/dev mount -t proc proc /mnt/proc mount -t sysfs sys /mnt/sys cp /etc/resolv.conf /mnt/etc/resolv.conf chroot /mnt /bin/bash }}} === Software installieren === Die benötigten Pakete werden mit diesem Befehl [4] installiert: {{{#!vorlage Befehl apt-get install cryptsetup cryptsetup-initramfs }}} Letzteres Paket ist wichtig, damit das initramfs beim Hochfahren überhaupt die nötigen Programme enthält, um die Partitionen entschlüsseln zu können. === /etc/crypttab editieren === Zuerst muss die [:UUID:] der Root- und Swap-Partition ermittelt werden. Das geschieht mit folgenden Befehlen: {{{#!vorlage Befehl blkid /dev/sdX3 blkid /dev/sdX2 }}} Daraufhin wird mit dieser Eingabe die nötige Zeile in '''/etc/crypttab''' eingefügt, wobei `<..._VOLUME_ID>` vorher durch die ermittelte UUID (ohne Anführungszeichen!) ersetzt werden muss (jeweils ohne die spitzen Klammern): {{{#!vorlage Befehl echo "root UUID= none luks" >> /etc/crypttab echo "swap UUID= root luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived" >> /etc/crypttab }}} Anschließend kann man prüfen[9], ob auch wirklich alles korrekt eingetragen wurde und gegebenenfalls nachbessern. Ein Beispiel mit nicht repräsentativen UUIDs: {{{#!code text # root UUID=c9e6aab5-e3a0-43e9-a594-4bcf1b61e7c1 none luks swap UUID=d09e29f2-9882-457d-b4f0-42f12aebdd3b root luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived }}} Verwendet man eine SSD und möchte discard/TRIM auf den verschlüsselten Partitionen nutzen (und die damit zusammenhängenden [:SSD/TRIM#TRIM-mit-Festplattenverschluesselung: Sicherheitsrisiken] hinnehmen), kann man hinter das "luks" noch ein "discard" anhängen (zusätzlich zur fstab): {{{#!code text # root UUID=c9e6aab5-e3a0-43e9-a594-4bcf1b61e7c1 none luks,discard swap UUID=d09e29f2-9882-457d-b4f0-42f12aebdd3b root luks,discard,keyscript=/lib/cryptsetup/scripts/decrypt_derived }}} ==== Ab Ubuntu 18.04 ==== Die im folgenden Abschnitt genannten Befehle sind ab Ubuntu 18.04 oder Linux Mint 19 "Tara" anscheinend nicht mehr nötig bzw. sogar kontraproduktiv. Es wird weder die Datei "cryptroot" noch die "get.root_crypt.decrypt_derived" benötigt. Insbesondere bei weiteren Volumes oder Laufwerken etwa für (/home) sollte aber in der "crypttab" (s.o.) zusätzlich die Option "initramfs" angegeben werden, da die systemd Version von crypttab offenbar die Option "keyscript" nicht versteht (vgl. dazu [http://manpages.ubuntu.com/manpages/bionic/man5/crypttab.5.html crypttab] {en}). Es kann nun direkt mit [#Kernel-Initramfs-aktualisieren update-initramfs] fortgefahren werden. ==== Ab Ubuntu 15.04 bis 17.04 ==== Zusätzlich zu obigen Schritten sind aufgrund [:systemd:] folgende Schritte nötig, da die Schlüsselableitung sonst nicht mehr funktioniert (vgl. dazu [http://lists.freedesktop.org/archives/systemd-devel/2014-July/021418.html systemd-Mailingliste] {en} , [debianbug:618862: Debian Bug-Tracker] {en} und [post:7520688:hier im Forum]). Falls es sich um eine [:Swap:]-Partition handelt, wendet man die zusätzlichen Änderungen unter [#Workaround-ab-Ubuntu-15.04-mit-systemd Workaround] ab Ubuntu 15.04 mit systemd an, für alle anderen Partitionen benutzt man die nun folgende Anleitung. Entsprechend [ubuntu_doc:community/encryptedZfs#ZFS_on_LUKS_Installation:ZFS on LUKS Installation] im Abschnitt "Create /etc/initramfs-tools/conf.d/cryptroot Entries" legt man zunächst eine Kopie des Skriptes der Schlüsselableitung im [wikipedia:Initramfs:] an: {{{#!vorlage Befehl mkdir /etc/initramfs-tools/scripts/luks cp /lib/cryptsetup/scripts/decrypt_derived /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived }}} Anschließend wird in dieser Kopie anstatt der Variable `$1` überall (ab Ubuntu 17.10 nur noch fast überall) jeweils nochmal der zur `` gehörende `` eingetragen - im folgenden Beispiel wieder `root`: {{{#!vorlage Befehl sed -i s/\"\$1\"/\"root\"/g /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived sed -i s/\ \$1/\ root/g /etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived }}} Diese Befehle sind also unverändert zu übernehmen, lediglich das obige `target` namens `root` ist hier einzusetzen oder ggf. an den eigenen Namen anzupassen. Zuletzt ist noch die Datei `cryptroot` anzulegen. Dazu führt man folgende Befehle, welche anzupassen sind, aus: {{{#!vorlage Befehl echo "target=root,source=UUID=,key=none" >> /etc/initramfs-tools/conf.d/cryptroot echo "target=data,source=UUID=,keyscript=/etc/initramfs-tools/scripts/luks/get.root_crypt.decrypt_derived" >> /etc/initramfs-tools/conf.d/cryptroot }}} In der ersten Zeile wird im Beispiel wieder wie oben das Beispiel `root` für `` eingetragen sowie die UUID `` entsprechend ihrem tatsächlichen Wert eingesetzt. Im zweiten Befehl wird die Partition, welche durch die Schlüsselableitung geöffnet werden soll, eingetragen - in diesem Beispiel unter dem Namen `data`, wenn also entsprechend die Partition unter dem Namen `data` (auch nochmal nachzusehen im Verzeichnis `/dev/mapper`) entschlüsselt wurde. Hier ist ebenfalls mittels `blkid` dessen `` entsprechend einzusetzen. Alternativ kann man auch die, zumindest im Wesentlichen, fertig formulierte und getestete Anleitung aus der [post:8190363:Diskussion zum Wikiartikel] verwenden. Allerdings ist diese auch nicht weniger aufwendig, nicht robuster und es kann für manche Benutzer der Schlüsselableitung nachteilig sein, weil man dabei für jede Partition nur dasselbe Passwort verwenden kann anstatt tatsächlich einen neuen Schlüssel abzuleiten. Abschließend wird mit den nun folgenden Abschnitten dieser Anleitung fortgefahren. === Kernel-Initramfs aktualisieren === Um die Änderungen an der crypttab zu übernehmen, muss noch {{{#!vorlage Befehl update-initramfs -u -k all }}} ausgeführt werden. = Beenden/Neustart = Mit den beiden folgenden Befehlen wird die Chroot-Umgebung geschlossen und das System neugestartet. Beim Bootvorgang sollte dann nach dem Passwort gefragt werden. {{{#!vorlage Befehl exit sync reboot }}} Sollte einem dabei ein Fehler unterlaufen sein, kann man den Chroot jederzeit genauso oder - minimal abweichend - mittels [:chroot/Live-CD/#Einrichtung:] durchführen. Der Hinweis dort zum Initramfs ist bei beiden Variationen bei jeder Wiederholung zu beachten. = Problembehebung = == Workaround ab Ubuntu 15.04 mit systemd == Ohne suspend-to-disk Support kann die [:Swap:]-Partition mit Einwegschlüsseln verwendet werden. Diese Methode kommt ohne das Script '''decrypt_derived''' aus und funktioniert daher auch mit systemd ab Ubuntu 15.04 - ohne obige Zusatzschritte ab Ubuntu 15.04. Es wird eine freie Swap-Partition benötigt, z.B. unter `/dev/sda2`. Die Kennung der Partition (PARTUUID) wird mit `blkid` ermittelt, auch eindeutige Bezeichner unter /dev/disk/by-id und /dev/disk/by-path können verwendet werden. * /dev/sda3 ist als Bezeichner nicht verwendbar! * die UUID ist ebenfalls nicht verwendbar (ändert sich bei jeden Neustart) {{{#!vorlage Warnung Die Verwendung von einem nicht 100% eindeutigen Bezeichner z.B. von `/dev/sda2` führt mit hoher Wahrscheinlichkeit irgendwann zu einem kompletten Datenverlust, wenn z.B. beim Starten mal ein anderer Datenspeicher als `sda` benannt wird! }}} Eintrag der in der '''/etc/crypttab''' für die Swap Partition: {{{ swap PARTUUID="xxxxx-xxx-xxx-xxxx" /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256 }}} `/dev/urandom` ist dabei der Einmalschlüssel. Update der initramfs {{{#!vorlage Befehl sudo update-initramfs -u -k all }}} Der Eintrag in der [:fstab:]: {{{ /dev/mapper/swap none swap sw 0 0 }}} Nach dem Neustart kann mit {{{#!vorlage Befehl ls -la /dev/mapper/ sudo cryptsetup status /dev/mapper/swap }}} gepüft werden, ob der das verschlüsselte Swap-Gerät verfügbar ist, und mit {{{#!vorlage Befehl swapon -s top }}} ob es verwendet wird. Quelle: [archwiki:Dm-crypt/Swap_encryption:] {en} #tag: System, Sicherheit, Installation, Vollverschlüsselung, Systemverschlüsselung