Benutzer-Werkzeuge

Webseiten-Werkzeuge


thoschwiki:linux:ubuntumatebtrfsencrypted

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
Nächste Überarbeitung Beide Seiten, nächste Überarbeitung
thoschwiki:linux:ubuntumatebtrfsencrypted [23.11.2020 16:55]
thosch Zwischenstand
thoschwiki:linux:ubuntumatebtrfsencrypted [27.06.2021 17:06]
thosch Befehlsequenzen in Einzelzeilen aufgebrochen.
Zeile 1: Zeile 1:
-====== Ubuntu Mate mit verschlüsseltem Btrfs ======+====== Ubuntu Mate 20.04 auf Btrfs mit Verschlüsselung ======
  
-<note>Die Seite befindet sich im Aufbau.</note>+Bei der Installation soll ein //Ubuntu Mate 20.04.1// in einem //[[wpde>Btrfs|BTRFS-Filesystem]]// installiert und das System verschlüssel werden.
  
-Bei der Installation soll ein //Ubuntu Mate 20.04.1// in ein veschlüsseltes //[[wpde>Btrfs|BTRFS-Filesystem]]// installiert werdenDer Installationstool //[[ubuntuusers>Ubiquity]]// unterstützt die Art der Installation nicht aktiv. Daher sind diverse Vorund Nacharbeiten notwendig.+Da //Btrfs// (noch?) keinen eigenen Verschlüsselungsmechanismus hat, wird [[ubuntuusers>LUKS]] als Verschlüsselungsebene benutzt, auf der dann das //Btrfs-Filesystem// aufgesetzt wirdDa //[[ubuntuusers>GRUB]]// das Entschlüsseln von LUKS-Partitionen im Format //luks1// beherrscht, erfolgt die Verschlüsselung im //luks1//-Format.
  
-Da //[[ubuntuusers>GRUB]]// das Entschlüsseln von [[ubuntuusers>LUKS|LUKS-Partitionen]] im Format //luks1// beherrscht, erfolgt die Verschlüsselung im //luks1//-Format.+Das Installationstool //[[ubuntuusers>Ubiquity]]// unterstützt diese Art der Installation nicht aktiv. Daher sind manuelle Einriffe vor und nach der eigentlichen Installation notwendig.
  
-===== Ausgangslage =====+Grundlage für das Vorgehen ist eine [[https://www.mutschler.eu/linux/install-guides/ubuntu-btrfs/|Anleitung von Willi Mutschler]].
  
  
 +
 +===== Hardware =====
 +
 +Die Installation soll auf einem schon in Ehren ergrauten //[[https://thinkwiki.de/R500|Lenovo Thinkpad R500]]// (2008-2010 gebaut) mit 8 GiB RAM.
 +
 +Als Massenspeicher ist eine SDD mit 500 GB verbaut, die wie folgt aufgeteilt ist:
 +
 +^ Partition ^ Größe ^ Verwendung ^ spätere LUKS-Bezeichnung ^
 +| /dev/sda1 |  ca. 9 GiB | bestehendes //[[wp>BunsenLabs|Bunsen Labs Linux]]// (bleibt bestehen) | ohne |
 +| /dev/sda2 |  ca. 446 GiB | root-Filesystem der neuen Installation | cryptdata |
 +| /dev/sda3 |  10 GiB | Swap | cryptswap |
  
 ===== Vorarbeiten ===== ===== Vorarbeiten =====
Zeile 21: Zeile 32:
   cryptsetup luksFormat --type=luks1 /dev/sda2   cryptsetup luksFormat --type=luks1 /dev/sda2
  
-An dieser Stelle wird die künftig zu verwendende Passphrase vorgegegeben.+An dieser Stelle wird die künftig zu verwendende Passphrase vorgegeben. 
 + 
 +<note warning> 
 +In der Bootphase, in der die Passphrase abgefragt wird, **ist die Tastatur noch im US-Layout**. Dies kann bei der Eingabe der Passphrase zu Problemen führen, wenn Zeichen verwendet werden, die in den verwendeten Tastatur-Layouts auf unterschiedlichen Tasten liegen (siehe Abschnitt [[#probleme_mit_der_tastaturbelegung|Probleme mit der Tastaturbelegung]]). 
 +</note> 
  
   cryptsetup luksOpen /dev/sda2 cryptdata   cryptsetup luksOpen /dev/sda2 cryptdata
  
-Nach der Eingabe der Passphrase sollte die folgende Ausgabe erscheinen:+Die eben vorgegebene Passphrase ist einzugeben. 
 + 
 +Eine kurze Kontrolle: 
 + 
 +  ls /dev/mapper/ 
 + 
 +Es sollte die folgende //Ausgabe// erscheinen:
  
   control  cryptdata   control  cryptdata
 +
 +Es wurde das zusätzliche Volume angelegt.
  
 Im nächsten Schritt wird das Btrfs-Filesystem erstellen: Im nächsten Schritt wird das Btrfs-Filesystem erstellen:
Zeile 86: Zeile 110:
  
   mount -o subvol=@,ssd,noatime,space_cache,commit=120,compress=zstd /dev/mapper/cryptdata /mnt   mount -o subvol=@,ssd,noatime,space_cache,commit=120,compress=zstd /dev/mapper/cryptdata /mnt
 +
   mount -o subvol=@home,ssd,noatime,space_cache,commit=120,compress=zstd /dev/mapper/cryptdata /mnt/home   mount -o subvol=@home,ssd,noatime,space_cache,commit=120,compress=zstd /dev/mapper/cryptdata /mnt/home
  
Zeile 91: Zeile 116:
  
   for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done   for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
 +
   sudo cp /etc/resolv.conf /mnt/etc/   sudo cp /etc/resolv.conf /mnt/etc/
 +
   sudo chroot /mnt   sudo chroot /mnt
  
Zeile 118: Zeile 145:
 <note>Die Ausgaben können je nach individueller (Hardware)Konfiguration unterschiedlich ausfallen.</note> <note>Die Ausgaben können je nach individueller (Hardware)Konfiguration unterschiedlich ausfallen.</note>
  
-==== cryptab erstellen ====+==== cryptab für das root-Filesystem erstellen ====
  
-Die Einträge für die ''crypttab'' werden manuell angelegt:+Die Einträge für die ''/etc/crypttab'' werden manuell angelegt:
  
   export UUIDVDA3=$(blkid -s UUID -o value /dev/sda2) #this is an environmental variable   export UUIDVDA3=$(blkid -s UUID -o value /dev/sda2) #this is an environmental variable
 +
   echo "cryptdata UUID=${UUIDVDA3} none luks" >> /etc/crypttab   echo "cryptdata UUID=${UUIDVDA3} none luks" >> /etc/crypttab
  
Zeile 133: Zeile 161:
   cryptdata UUID=8a06f062-cd19-4b53-917e-65461f5e27c7 none luks   cryptdata UUID=8a06f062-cd19-4b53-917e-65461f5e27c7 none luks
  
-(Die angezeigte [[wpde>UUID]] wird auf jeden Fall abweichen; ist halt //unique//...)+<note>(Die angezeigte [[wpde>UUID]] wird auf jeden Fall abweichen; ist halt //unique//... :-))</note>
  
 ==== Swap verschlüsseln ==== ==== Swap verschlüsseln ====
  
-Die Swap-Partition sollte auch verschlüsselt werden. Ich weiche hier vom [[https://www.mutschler.eu/linux/install-guides/ubuntu-btrfs/|Vorgehen von Willi Mutschler]] ab, weil ich ggf. //Hibernate// oder //Suspend-to-Disk// nutzen möchte.+Die Swap-Partition sollte auch verschlüsselt werden. Ich weiche hier vom [[https://www.mutschler.eu/linux/install-guides/ubuntu-btrfs/|Vorgehen von Willi Mutschler]] mit einem zufälligen Schlüssel ab, weil ich ggf. //Hibernate// oder //Suspend-to-Disk// nutzen möchte. 
 + 
 +Zunächst wird die entsprechende Partition ähnlich der root-Partition vorbereitet: 
 + 
 +  swapoff /dev/sda3   # swap deaktivieren, falls aktiv 
 + 
 +  cryptsetup luksFormat --type=luks1 /dev/sda3 
 + 
 +An dieser Stelle wird die künftig zu verwendende Passphrase vorgegegeben. 
 + 
 +  cryptsetup luksOpen /dev/sda3 cryptswap  # Volumename abweichend von /root 
 + 
 +Die eben vorgegebene Passphrase ist einzugeben. 
 + 
 +Eine kurze Kontrolle: 
 + 
 +  ls /dev/mapper/ 
 + 
 +Es sollte die folgende //Ausgabe// erscheinen: 
 + 
 +  control  cryptdata  cryptswap 
 + 
 +Es wurde ein zusätzliche Volume angelegt. 
 + 
 + 
 +Im nächsten Schritt wird das Volume als Swap initialisiert: 
 + 
 +  mkswap /dev/mapper/cryptswap 
 + 
 +Wiederum die Einträge für ''/etc/crypttab'' manuell anlegen:
  
   export SWAPUUID=$(blkid -s UUID -o value /dev/sda3)   export SWAPUUID=$(blkid -s UUID -o value /dev/sda3)
 +
 +  echo "cryptswap UUID=${SWAPUUID} none luks" >> /etc/crypttab
      
 +Abschließend ist die geänderte Swap-Konfiguration noch in die ''/etc/fstab'' einzutragen. Hierbei die UUID der Swap-Partition durch die Volume-Bezeichnung ''/dev/mapper/cryptswap'' zu ersetzen:
 +
 +Editor mit ''/etc/fstab'' öffnen:
 +
 +  nano /etc/fstab
 +
 +Entsprechende Zeile wie folgt ändern:
 +
 +  /dev/mapper/cryptswap none            swap    sw              0       0
 +
 +==== Schlüsseldatei implementieren (Optional) ====
 +
 +Bei diesem Stand der Konfiguration würde(n) die Passphrase(n) mehrfach abgefragt werden. Um dies zu vermeiden kann man das Entschlüsseln beim  Mounten auf eine Schlüsseldatei umstellen. Diese Schlüsseldatei liegt abgesichert im root-Filesystem, dass in einem erscten Schritt mit der einmaligen Eingabe der Passphrase entschlüsselt wird.
 +
 +Anlegen und Sichern der Schlüsseldatei im neuen Verzeichnis ''/etc/luks'':
 +
 +  mkdir /etc/luks
 +
 +  dd if=/dev/urandom of=/etc/luks/boot_os.keyfile bs=4096 count=1
 +
 +  chmod u=rx,go-rwx /etc/luks
 +
 +  chmod u=r,go-rwx /etc/luks/boot_os.keyfile
 +
 +Nun wird der Schlüssel jeweils in den zweiten //Key-Slot// abgelegt:
 +
 +  cryptsetup luksAddKey /dev/sda2 /etc/luks/boot_os.keyfile   # /
 +
 +  cryptsetup luksAddKey /dev/sda3 /etc/luks/boot_os.keyfile   # swap
 +
 +<note tip>Sofern nach dem Ausführen eines der beiden Befehle die Meldung <code>Kein Schlüssel mit dieser Passphrase verfügbar.</code> ausgegeben wird, wurde die Passphrase nicht korrekt eingegeben.</note>
 +
 +Anschließend -- mit dem jeweiligen Gerätenamen -- prüfen, ob dies erfolgreich war:
 +
 +  cryptsetup luksDump /dev/sda2 | grep "Key Slot"
 +
 +Erwartete //Ausgabe//:
 +
 +  Key Slot 0: ENABLED
 +  Key Slot 1: ENABLED
 +  Key Slot 2: DISABLED
 +  Key Slot 3: DISABLED
 +  Key Slot 4: DISABLED
 +  Key Slot 5: DISABLED
 +  Key Slot 6: DISABLED
 +  Key Slot 7: DISABLED
 +
 +Anschließend die gleiche Prüfung für ''/dev/sda3'' durchführen.
 +
 +Weitere Sicherungsmaßnahmen:
 +
 +  echo "KEYFILE_PATTERN=/etc/luks/*.keyfile" >> /etc/cryptsetup-initramfs/conf-hook
 +
 +  echo "UMASK=0077" >> /etc/initramfs-tools/initramfs.conf
 +
 +Abschließend nocht die ''/etc/crypttab'' anpassen:
 +
 +  sed -i "s|none|/etc/luks/boot_os.keyfile|" /etc/crypttab # this replaces none with /etc/luks/boot_os.keyfile
 +
 +Die ''/etc/crypttab'' sollte dann diese Struktur haben:
 +
 +  cryptdata UUID=8a06f062-cd19-4b53-917e-65461f5e27c7 /etc/luks/boot_os.keyfile luks
 +  cryptswap UUID=9bd99c32-3d25-42a3-95d5-d819b153d5b2 /etc/luks/boot_os.keyfile luks
 +
 +<note>(Die angezeigten [[wpde>UUID|UUIDs]] werden auf jeden Fall abweichen; sind halt //unique//... :-))
 +</note>
 +
 +==== Bootloader GRUB installieren ====
 +
 +Abschließend it noch  der Bootloader //GRUB// zu installieren.
 +
 +Verschlüsselung //GRUB// aktivieren:
 +
 +  echo "GRUB_ENABLE_CRYPTODISK=y" >> /etc/default/grub
 +
 +Kernelbezogene Software aktualisieren/ergänzen:
 +
 +  apt install -y --reinstall grub-efi-amd64-signed linux-generic linux-headers-generic linux-generic-hwe-20.04 linux-headers-generic-hwe-20.04
 +
 +<note>Sofern man -- wie im hier vorliegenden Fall -- Hardware ohne [[wpde>UEFI]] verwendet, wird man das Paket ''grub-efi-amd64-signed'' weglassen können.</note>
 +
 +//Initramfs// und //GRUB// aktualisieren und installieren:
 +
 +  update-initramfs -c -k all
 +
 +  grub-install /dev/sda
 +
 +  update-grub
 +
 +Prüfen, ob die rechte auf die ''/boot/initrd.img'' restriktiv gesetzt sind:
 +
 +  stat -L -c "%A  %n" /boot/initrd.img
 +
 +Erwartete //Ausgabe//:
 +
 +  -rw-------  /boot/initrd.img
 +
 +Prüfen, ob Schlüsseldatei einthalten ist:
 +
 +  lsinitramfs /boot/initrd.img | grep "^cryptroot/keyfiles/"
 +
 +Erwartete //Ausgabe//:
 +
 +  cryptroot/keyfiles/cryptdata.key
 +
 +===== Reboot =====
 +
 +An dieser Stelle sollte alles fertig sein und man kann das neue System zum ersten Mal booten.
 +
 +Sofern noch in der Change-root-Umgebung ist, muss man diese verlassen:
 +
 +  exit
 +
 +Dann der Reboot
 +
 +  reboot
 +
 +Da ist der Moment zum Daumendrücken, Beten, whatever...
 +
 +<note warning>
 +In der Bootphase, in der die Passphrase abgefragt wird, **ist die Tastatur noch im US-Layout**. Dies kann bei der Eingabe der Passphrase zu Problemen führen, wenn Zeichen verwendet werden, die in den verwendeten Tastatur-Layouts auf unterschiedlichen Tasten liegen (siehe Abschnitt [[#probleme_mit_der_tastaturbelegung|Probleme mit der Tastaturbelegung]]).
 +</note>
 +
 +===== Probleme mit der Tastaturbelegung =====
 +
 +In der Bootphase, in der die Passphrase abgefragt wird, **ist die Tastatur noch im US-Layout**. Dies kann bei der Eingabe der Passphrase zu Problemen führen, wenn Zeichen verwendet werden, die in den verwendeten Tastatur-Layouts auf unterschiedlichen Tasten liegen.
 +
 +Neben den üblichen Verdächtigen (y, z sowie Umlaute ä, ö, ü und ?) betrifft es die meisten der für die Verwendung in Passworten immer wieder empfohlenen Sonderzeichen (beispielsweise "&/=?#*+-<>()[]{}", vgl [[wpde>Tastaturbelegung#USA|Tastaturbelegung USA]]).
 +
 +Hierfür gibt es drei Lösungsstrategien:
 +
 +  * Die problematischen Zeichen meiden (nur Buchstaben außer y und z sowie Zahlen verwenden)
 +  * die Lage der problematischen Zeichen im US-Layout merken und entsprechend "blind" tippen
 +  * die gewünschte Zeichenfolge in der "US-Tippweise" als zusätzliche Passphrase((LUKS erlaubt 8 Passphrase bzw. Schlüssel pro Volume)) vorgeben (z.B. "yulu>echo" statt "zulu:echo"
 +
 +Sofern man eine zusätzliche Passphrase hinzufügen möchte, kann man zuerst den Zustand der Key-Stores ermitteln:
 +
 +  # cryptsetup luksDump /dev/sda2 | grep "Key Slot"
 +  Key Slot 0: ENABLED
 +  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
 +
 +Die zusätzliche Passphrase wird dann folgt hinzugefügt:((Sofern nicht bereits ein Konsole mit root-Rechten geöffnet ist, muss ein ''sudo'' vorangestellt werden)):
 +
 +  # cryptsetup luksAddKey /dev/sda2
 +  Geben Sie irgendeine bestehende Passphrase ein: 
 +  Geben Sie die neue Passphrase für das Schlüsselfach ein: 
 +  Passphrase bestätigen: 
 +
 +<note tip>Sofern nach der Abfrage der bestehenden Passphrase die Meldung <code>Kein Schlüssel mit dieser Passphrase verfügbar.</code> ausgegeben wird, wurde die Passphrase nicht korrekt eingegeben.</note>
 +
 +Abschließend noch den Zustand des Key-Stores prüfen:
 +
 +  # cryptsetup luksDump /dev/sda2 | grep "Key Slot"
 +  Key Slot 0: ENABLED
 +  Key Slot 1: ENABLED
 +  Key Slot 2: DISABLED
 +  Key Slot 3: DISABLED
 +  Key Slot 4: DISABLED
 +  Key Slot 5: DISABLED
 +  Key Slot 6: DISABLED
 +  Key Slot 7: DISABLED
 +
 +Es sollte nun ein Key-Slot mehr belegt sein.
 +
 +<note tip>Wurde für die verschlüsselte Swap-Partition eine [[#schluesseldatei_implementieren_optional|Schlüsseldatei eingerichtet]], dann ist es ausreichend nur für das root-Filesystem eine weitere Passphrase vorzugeben.</note>
 +===== Fazit =====
 +
 +Als ich die [[https://www.mutschler.eu/linux/install-guides/ubuntu-btrfs/|Anleitung von Willi Mutschler]] das erste Mal durchlas, war ich erschlagen und ging davon aus, dass ich das Konzept -- wenn überhaupt -- nur 1:1, Zeile für Zeile nachbauen könnte.
 +
 +Da in dem Artikel ausreichend Hintergrundinformationen enthalten sind ((Die im vorliegenden Artikel teilweise fehlen.)), konnte ich mir Stück für die Stück die Thematik erarbeiten. Dazu trug sicherlich bei, dass ich parallel mein Vorgehen im vorliegenden Artikel dokumentierte und es dafür sprachlich aufbereiten musste.
 +
 +Gegen Ende war mir dann schon möglich, ein eigene, von der Vorlage abweichendes Vorgehen für die Swap-Partition zu erarbeiten und umzusetzen.
  
 ===== Quellen ===== ===== Quellen =====
thoschwiki/linux/ubuntumatebtrfsencrypted.txt · Zuletzt geändert: 28.08.2022 17:58 von thosch