Meine Firma arbeitet an der Implementierung einiger Ubuntu-Systeme in einige ihrer neuen Testprojekte und ich wurde mit einer Verschlüsselungslösung für sie beauftragt. Da ich hauptsächlich Windows-Benutzer bin und nur über Grundkenntnisse in Ubuntu und Linux/Unix im Allgemeinen verfüge, war dies eine kleine Herausforderung, aber auch faszinierend. Ich weiß, dass viele vorhandene Verschlüsselungsdienste mit Windows funktionieren, habe aber festgestellt, dass diese für Ubuntu fehlen, und nachdem ich mehr als 20 Beiträge hier darüber gelesen hatte, entschied ich, dass eine Neuinstallation mit vollständiger Festplattenverschlüsselung die einzige realistische Option ist. Allerdings waren einige der Systeme bereits im Einsatz und könnten nicht einfach gelöscht und mit Verschlüsselung neu installiert werden. Ich müsste ALLE Einstellungen und Änderungen sowie vorhandene Dateien kopieren/sichern. Daher ist es nicht so einfach wie das Kopieren von /home. Ich war neugierig, was für mich die beste Vorgehensweise wäre. Ich habe eine vollständige Kopie der Partition (mit gparted eine schnelle Kopie auf eine externe Festplatte erstellt) für meine Testmaschine und eine Neuinstallation von Ubuntu mit LUKS. Ich bin mit den Grundlagen von Clonezilla vertraut, aber soweit ich das verstehe, glaube ich nicht, dass es mir hier weiterhelfen wird.
tldr: Ich muss eine Vollinstallation von Ubuntu 16.04 auf eine verschlüsselte Festplatte verschieben. Einige Maschinen werden TPM-fähig sein, andere nicht. Ich muss für jede Maschine wissen, was ich am besten tun soll. Vielen Dank, dass Sie einem neuen Administrator helfen.
BONUS, wenn Sie einen Weg beschreiben können, der keinen externen Netzwerkzugriff erfordert, aber nicht erforderlich. Wenn also ein Paket benötigt wird, kann ich es auf einem Test-PC auf USB/CD/DVD herunterladen und das Paket offline installieren.
Antwort1
Im Folgenden wird ein Verfahren beschrieben, das ich mehrfach erfolgreich verwendet habe. Es funktioniert für Ubuntu 16.04 und 18.04. Im Gegensatz zu der von @Arno in ihrer Antwort vorgeschlagenen Lösung ist keine manuelle Bearbeitung der Kernel-Boot-Optionen erforderlich. Stattdessen basiert es auf der update-grub
Generierung einer korrekten Konfiguration basierend auf /etc/crypttab
– einer kanonischeren (Wortspiel nicht beabsichtigten) Lösung, die auch von Ubuntu bei der Installation mit seiner standardmäßigen, LVM-basierten Verschlüsselung verwendet wird. (Diese Lösung verwendet weder LVM noch verschlüsselt /boot
)
Ich bin nicht verantwortlich für Datenverluste oder andere mögliche unangenehme Folgen, die sich aus der Befolgung dieser Anleitung ergeben. Stellen Sie sicher, dass Sie über zuverlässige Backups verfügen, bevor Sie etwas unternehmen.
Ich teste diese Anleitung nicht, während ich dies hier schreibe. Sie basiert auf einer (getesteten)Blogbeitrag von mir selbstüber einen ähnlichen Fall und an einige Einzelheiten kann ich mich erinnern.
In diesem Handbuch wird Folgendes vorausgesetzt:
- Ubuntu ist bereits installiert
- Das System bootet mit (U)EFI, nicht mit BIOS/CSM
/boot
befindet sich auf einer separaten Partition 1- Sie können ein Live-Medium von Ubuntu 16.04/18.04 oder Pop!_OS 18.04 booten (von USB, PXE, DVD, was auch immer) 2
Wenn sich Ihr Programm /boot
nicht auf einer separaten Partition befindet, ist das Extrahieren ziemlich einfach: Erstellen Sie irgendwo eine 200–500 MB große Partition, formatieren Sie sie in ext4, kopieren Sie den aktuellen /boot
Inhalt, fügen Sie /etc/fstab
einen Eintrag hinzu update-grub
und starten Sie neu.
1. Sicherung
Sie müssen die aktuelle(n) Systempartition(en) sichern. Am einfachsten geht das mit Clonezilla. Es ist benutzerfreundlich und erfordert kein Handbuch – folgen Sie einfach den Anweisungen.
2. Verkleinerung von Partitionen
LUKS-Header beanspruchen einen Teil des Speicherplatzes einer Partition. Clonezilla/partclone kann keine Images auf Geräten wiederherstellen, die kleiner als die Quellgeräte sind. Sie können also kein Image einer unverschlüsselten Partition in einem verschlüsselten Container wiederherstellen, da es etwas kleiner ist.
Wir müssen dann die zu verschlüsselnden Partitionen etwas verkleinern. Verkleinern Sie sie sicherheitshalber um 10 MB oder mehr. Am einfachsten geht das mit GParted. Es ist auf Ubuntu Live Media verfügbar.
3. Erstellen von Images verkleinerter Partitionen
Entweder tun Sie dies erneut mit Clonezilla oder Sie machen sich bereits mitTeilklon, das Clonezilla standardmäßig verwendet. Wir werden Bilder später manuell mit Partclone wiederherstellen.
Klonen in ein Image mit Partclone:
sudo partclone.ext4 -c -s /dev/sda2 | pigz -0 > /mnt/backup/sda2.ext4.ptcl.gz
partclone.ext4
ist eine der Partclone-Binärdateien, die speziell für die Arbeit mit ext4 entwickelt wurde. Jedes unterstützte Dateisystem erhält seine eigene Partclone-Binärdatei./dev/sda2
ist offensichtlich die Partition, die Sie klonen möchten. Ich bevorzuge es, Partitionen durch ihre Teilbezeichnung zu bezeichnen, z. B./dev/disk/by-partlabel/os
– meiner Meinung nach viel übersichtlicher./dev/sda2
ist jedoch leichter zu erkennen.Schweinchenist Multicore-GZIP.
-0
weist es an, Geschwindigkeit gegenüber effektiver Komprimierung zu bevorzugen./mnt/backup
hier steht für einen externen Speicherort, an dem Sie das Image speichern möchten. Wenn Sie zuvor nur Clonezilla verwendet haben, kann es trotzdem unter gemountet werden/home/partimag
. Wenn Sie eine SMB-Freigabe mounten möchten:sudo mount -t cifs -o username=gronostaj //192.168.1.90/Backup /mnt/backup
(fragt interaktiv nach dem Passwort)
4. Partition(en) auf Originalgröße vergrößern
Wir möchten den zusätzlichen Speicherplatz für LUKS-Header zurückhaben, nicht wahr? Setzen Sie die Partitionsgröße wieder auf die Originalgröße zurück.
5. Formatierung in LUKS
In diesem Moment verlieren Sie Ihre Originaldaten. Stellen Sie sicher, dass Ihre Backups in Ordnung sind.
Formatieren Sie die Systempartition(en) (außer /boot
) in LUKS:
sudo cryptsetup luksFormat --type luks2 /dev/sda2
Erstellte Container öffnen:
sudo cryptsetup open /dev/sda2 os
Stellen Sie sicher, dass der gesamte verschlüsselte Container wie zufälliger Müll aussieht und Ihre alten Daten nicht mehr lesbar sind:
sudo dd if=/dev/zero of=/dev/mapper/os bs=1M
(dadurch wird der entschlüsselte Inhalt des Containers mit Nullen überschrieben, der verschlüsselte Inhalt sieht jedoch wie zufälliger Müll aus)
6. Bilder wiederherstellen
Führen Sie Partclone manuell aus, um Bilder wiederherzustellen:
cat /mnt/backup/sda2.ext4.ptcl.gz | pigz -d | sudo partclone.ext4 -r -o /dev/mapper/os
Wenn Sie den einfachen Weg gewählt und „verkleinerte“ Backups mit Clonezilla erstellt haben, schauen Sie in die Ausgabedateien. Sie werden leicht herausfinden, welche die Partclone-Quellen sind. Sofern Sie keine große Blockgröße festlegen, werden sie fragmentiert. Sie müssen cat
sie zusammenfügen, bevor Sie sie an Pigz weiterleiten.
Sie sollten auch die Dateisystemgeometrie so anpassen, dass sie auf die gesamte Partition passt:
sudo resize2fs /dev/mapper/os
7. Verschlüsselungsunterstützung aktivieren
Führen Sie zunächst ein chroot-Verfahren in das gerade wiederhergestellte Betriebssystem durch:
mkdir /mnt/os
sudo mount /dev/mapper/os /mnt/os
cd /mnt/os
mount --bind /etc/resolv.conf etc/resolv.conf
mount --bind /dev dev
mount -t tmpfs tmpfs tmp
mount -t sysfs sys sys
mount -t proc proc proc
sudo chroot .
mount -a
Dieses Terminal funktioniert jetzt auf Ihrer installierten Ubuntu-Instanz, nicht auf der Live-Instanz.
InstallierenVerschlüsselungssetup:
apt update
apt install cryptsetup -y
Es sollte eine Datei erstellt werden /etc/crypttab
. Wenn nicht, keine Sorge, erstellen Sie sie manuell. Bearbeiten Sie diese Datei und fügen Sie Einträge für Partition(en) hinzu:
os /dev/sda2 none luks
Speichern und Editor beenden. Initramfs neu erstellen:
update-initramfs -u -k all
GRUB-Einträge aktualisieren:
update-grub
8. Entfernen zusätzlicher Passwortabfragen
Wenn Sie mehr als eine verschlüsselte Partition haben, müssen Sie beim Booten das Passwort für jede einzelne Partition eingeben. LUKS ermöglicht Ihnen jedoch das Hinzufügen zusätzlicher Schlüsseldateien, die anstelle von Passwörtern zum Entsperren von Partitionen verwendet werden können. Sie können diese Schlüsseldateien auf der verschlüsselten /
Partition speichern und sie zum Entsperren nachfolgender Partitionen verwenden.
Erstellen Sie eine zufällige Schlüsseldatei:
dd if=/dev/urandom of=/luks.key bs=4096 count=1
Fügen Sie es zu Nicht-Root-Partition(en) hinzu:
cryptsetup luksAddKey /dev/sda3 /luks.key
Einträge hinzufügen crypttab
:
home /dev/sda3 /luks.key luks
Initramfs neu erstellen:
update-initramfs -u -k all
1 Warum ich separate verwende /boot
:
- So ist es einfacher ;)
- GRUB unterstützt LUKS2 noch nicht und
/boot
darf sich daher nicht auf einer mit LUKS2 verschlüsselten Partition befinden. - Wenn Sie LUKS-
/boot
und LUKS2-verschlüsselt verwenden möchten/
, müssen Sie das Passwort zweimal eingeben oderSchlüsseldatei in Initramfs einbetten- meiner Meinung nach zu viel Aufwand, weil … - Verschlüsselung
/boot
allein macht Sie nicht weniger angreifbar, denn selbst wenn Ihre/boot
verschlüsselt ist, kann Ihre EFI-Systempartition nicht verschlüsselt werden, sodass Angreifer sie manipulieren und z. B. ihren eigenen schädlichen Kernel/Initramfs anstelle Ihres von verwenden können/boot
. (Um dies zu beheben, müssen SieErstellen Sie eine selbstcontainerisierte GRUB-Binärdatei und signieren Sie sie mit Ihrem privaten Schlüssel, dann verwenden Sie UEFI Secure Boot, um es zu überprüfen)
Definieren Sie Ihr eigenes Bedrohungsmodell und entscheiden Sie, welches Sicherheitsniveau (und wogegen) Sie benötigen.
2 Sie können Ihr Glück mit anderen Ubuntu-Versionen oder Rettungs-CDs versuchen, wieGRML, aber bei Ihnen kann das anders sein. Ich habe erlebt, dass dieses Verfahren fehlschlug, nur weil die Live-Medien nicht mit dem System übereinstimmten.
Antwort2
Sie könnten ein Image der Root-Partition erstellen, es mit LUKS formatieren, mounten und mit dem Image überschreiben. Anschließend wären ein paar Änderungen an GRUB nötig, damit es beim Booten entschlüsselt wird.Ich habe die folgenden Schritte nicht getestet, sie sind nur ein Hinweis.
Ich bin davon ausgegangen, dass /boot
es eingeschaltet ist sdb1
, die Root-Partition eingeschaltet ist sdb2
und /media/hdd
es sich um ein externes Laufwerk handelt. Wir befinden uns auf einem Live-USB in einer Administrator-Eingabeaufforderung.
Verschlüsseln Sie die Root-Partition
dd if=/dev/sdb2 of=/media/hdd/diskimg bs=1M
cryptsetup luksFormat /dev/sdb2
cryptsetup luksOpen /dev/sdb2 enc_root
dd if=/media/hdd/diskimg of=/dev/mapper/enc_root
Mounten Sie die Partitionen
mount /dev/sdb2 /mnt
mount /dev/sdb1 /mnt/boot
GRUB konfigurieren
Notieren Sie die UUID der Partition, indem Sie Folgendes ausführen:
blkid /dev/sdb2
Bearbeiten Sie /mnt/etc/default/grub
, suchen Sie die Zeile mit GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
. Ändern Sie sie wie folgt und ersetzen Sie sie device-UUID
durch die UUID, die Sie im vorherigen Schritt notiert haben.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cryptdevice=UUID=device-UUID:enc_root root=/dev/mapper/enc_root"
Aktualisieren Sie dann die GRUB-Konfiguration:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
chroot /mnt
update-grub
exit
Und alles aushängen:
umount /mnt/dev
umount /mnt/sys
umount /mnt/proc
umount /mnt/boot
umount /mnt
Und neu starten. Ein paar Fallstricke:
- Ich habe nichts davon getestet und schon eine Weile nicht mehr mit Linux-Partitionen gespielt, daher bin ich fast sicher, dass ich etwas vergessen oder vermasselt habe. Warten Sie, bis die Leute es Korrektur gelesen und behoben haben.
- Dies setzt voraus, dass
/boot
es sich um eine separate Partition handelt. Es würde nicht funktionieren, wenn sich alles auf derselben Partition befände. - Vergessen Sie bei einem UEFI-System nicht, auch die EFI-Partition an der entsprechenden Stelle zu mounten.
dd
wird kopierenallesWenn Sie den freien Speicherplatz berücksichtigen, ist es schneller, nur die Dateien in der Partition zu kopieren.
Viel Glück!