Wie mache ich das Suspendieren des Arbeitsspeichers unter Ubuntu mit voller Festplattenverschlüsselung (LVM zusätzlich zu LUKS) sicher?

20

Ich bin auf Ubuntu 13.04 mit voller Festplattenverschlüsselung (LVM zusätzlich zu LUKS).

Ich möchte luksSuspendin die Suspend-Prozedur (und die spätere Verwendung luksResume) einbeziehen , damit ich im RAM suspendieren kann, ohne Schlüsselmaterial im Arbeitsspeicher zu belassen und die Root freizuschalten.

Ich habe in den letzten 7 Stunden versucht, ein Skript für Arch Linux zu portieren , aber bisher ohne Erfolg: Ich habe ehrlich gesagt keine Ahnung, was ich tue ...

Kann mir jemand helfen, dies zu portieren (oder so etwas von Grund auf neu zu erstellen)? Oder kann mich jemand auf die Dokumentation verweisen, wie man etwas in die Suspend-Prozeduren einbindet und wie man die erforderlichen Binärdateien und Skripte (wie Cryptsetup) verfügbar hält, selbst wenn alle E / A-Vorgänge für root (von luksSuspend) blockiert wurden ?

In Bezug auf, wie die notwendigen Binärdateien und Skripte für Lebenslauf, diese zur Verfügung zu halten , andere Blog - Post (auch für Arch) kopierte sie auf /boot; Ich möchte jedoch etwas mehr in den Zeilen verwenden, die Vianney in dem Skript verwendet hat, das ich zuvor erwähnt habe, da dieser Ansatz in dieser Hinsicht etwas eleganter erscheint.

Jonas Malaco
quelle
Ich verbringe noch ein paar Stunden damit ...
Jonas Malaco
Ich habe die Skripte bearbeitet pm-suspendund es sah so aus, als wäre ich fast da. Ich habe jedoch herausgefunden, dass ich das System ( echo -n "mem" > /sys/power/state) nicht einfach aussetzen kann, nachdem ich die Root-Fs ( cryptsetup luksSuspend ...) eingefroren habe , da dies noch einige Ein- /
Ausgaben
1
Ich las einige Diskussionen über Debian-Listen (und einige andere Listen, die mit diesen verknüpft waren oder mit ihnen verknüpft waren) und bis jetzt schien es, dass eine Lösung so etwas wie ein "Deinitramfs" erfordern würde: Der Kernel würde die Kontrolle über die Deinitramfs übernehmen kurz vor dem tatsächlichen Suspendieren des Systems, damit dieser tmpfs die letzten Bereinigungsaktionen ausführen kann (z. B. das Löschen des Verschlüsselungsschlüssels für die rootfs).
Jonas Malaco
Ich würde diese Frage auch gerne beantwortet sehen.
BenAlabaster

Antworten:

3

Ich bin auf dasselbe Problem gestoßen und habe erneut versucht, dasselbe Skript zu portieren, was Sie hier sehen können . Es berührt keinen nichtflüchtigen Speicher danach luksSuspend, so dass es auch mit echter Festplattenverschlüsselung mit einem verschlüsselten / Boot funktioniert. Sie müssen jedoch vorsichtig sein - es funktioniert gelegentlich möglicherweise nicht wie erwartet!

Das portierte Skript führt Folgendes aus:

  • Erstellen Sie irgendwo ein RAMFS-Mount
  • Extrahieren Sie dort den Inhalt von initramfs (einschließlich des initramfs-Suspend-Skripts)
  • Bind Mount entsprechenden Verzeichnisse (zB /sys, /proc, /dev, /run) auf die ramfs montieren
  • Beenden Sie alle Dienste, die möglicherweise stören (systemd-udevd, systemd-journald)
  • Hängen Sie das Root-Dateisystem (ext4 oder btrfs) mit nobarrier erneut ein, damit Linux beim Versuch, in S3 zu wechseln, nicht hängen bleibt und synchronisiert
  • Starten Sie den initramfs-Mount, der erneut synchronisiert wird, ausgeführt luksSuspendwird und den Computer in den Energiesparmodus versetzt
  • Nach Gefolge luksResume, Remount Dateisysteme, restart Dienste, Aushängen Bind Mounts in Initramfs montieren
  • Hängen Sie abschließend den initramfs-Mount aus, damit der für die initramfs-Dateien verwendete RAM freigegeben wird

Ich habe mein Skript noch nicht ausführlich getestet, aber es scheint für mich zuverlässig zu funktionieren. Wenn Sie ein anderes Dateisystem verwenden (z. B. nicht ext4 oder btrfs), können Probleme mit der Barriere auftreten, sodass Sie auch das Skript ändern müssen.

In jedem Fall ist es gut zu testen und zu überprüfen, ob die Skripte zuerst funktionieren. Wenn Sie beim Versuch, Linux in S3 (dh um echo mem > /sys/power/state) zu versetzen, hängen bleiben, sollten Sie in der Lage sein, Folgendes wiederherzustellen:

  • Öffnen Sie vor dem Anhalten ein tty oder ein anderes Terminal (auf das zugegriffen werden kann, idealerweise ein tty).
  • Lade cryptsetup und relevante Bibliotheken in den RAM: sudo cryptsetup luksResume anything_here
  • Mit dem Skript anhalten
  • Wenn es nach dem chroot hängt (z. B. nachdem starting version xxxauf dem neuen vt angezeigt wird), wechseln Sie zu dem tty, das Sie zuvor geöffnet haben, und führen Sie es aussudo cryptsetup luksResume your_luks_device_name_here
  • Wenn das auch hängt, öffne ein anderes vt und chroot in /run/initramfs:sudo chroot /run/initramfs /bin/ash
  • Versuche zu rennen luksResume:cryptsetup luksResume your_luks_device_name_here && exit
  • Ihr Computer sollte dann anhalten. Sie können es dann /run/initramfsaktivieren, die Skripte beenden, wenn sie noch ausgeführt werden, die Bindungsbereitstellungen aufheben und gegebenenfalls das Root-Dateisystem mit Barriere erneut bereitstellen.
Zhongfu
quelle
1

Ich habe keine Erfahrung mit diesem Setup, aber viele Leute behaupten, dass dies erfolgreich ist. Hier sind ein paar davon.

dm-crypt with LUKS - Verschlüsseln der Swap-Partition
Howto: Vollständig verschlüsselte Festplatte einschließlich Suspend-to-Disk-Partition mit Ubuntu 6.10 Edgy Eft
Ubuntu-Full-Disk-Encryption-lvm-luks

Jedoch verwendet keiner von ihnen luksSuspend (weshalb sie möglicherweise funktionieren).

Harrymc
quelle
Vielen Dank für die Links ... Ich verwende ein Setup ähnlich dem letzten Link (vom 13.04-Installer automatisch generiert).
Jonas Malaco
Kein luksSuspend bisher muss ausgeschaltet werden, um die Schlüssel aus dem Speicher zu löschen ... Trotzdem danke für die Links! Wenn ich verstehe, wie man dies manuell konfiguriert, kann ich vielleicht einen Einblick in die Verwendung von luksSuspend für den Verdacht auf RAM erhalten.
Jonas Malaco
1
luksSuspend scheint extrem schwierig zu sein. Da alle E / A-Vorgänge eingefroren werden, ist ein sehr akrobatisches Suspend-Skript erforderlich. Ich konnte nur eine deutsche Erfolgsgeschichte finden, die (schlecht) ins Englische übersetzt werden kann . Versuchen Sie es als Vorlage.
Harrymc
2
Möglicherweise müssen Sie auch eine RAM-Disk und ein statisch verknüpftes Cryptsetup verwenden.
Harrymc
1

Ich habe einige Zeit damit verbracht, Ubuntu 15.10 voll funktionsfähig zu machen. Wenn Sie versuchen, diese Funktion auf ext2, ext3 oder ext4 auszuführen, müssen Sie / etc / fstab aktualisieren, um das Volume mit der Option 'nobarrier' bereitzustellen. Ansonsten empfehle ich die Verwendung von BTRFS.

Sobald Ihr Dateisystem vorbereitet ist, verwenden Sie das Skript hier: https://github.com/Microcentillion/ubuntu-lukssuspend

user569427
quelle