Wie aktiviere ich Ubuntu (mit voller Festplattenverschlüsselung), um LUKSsupend vor dem Einschlafen / Aussetzen in den RAM aufzurufen?

106

Diese Frage bezieht sich auf ein anderes von @Stefan, aber es ist ist kein Duplikat davon. Die Fragen sind etwas anders: Der Autor wollte einfach wissen, ob dies umgesetzt wurde, während ich speziell nach Hilfe frage, wie dies (in einer bestimmten Weise) zu tun ist. Außerdem hat die andere Frage keine nützlichen Antworten für die Implementierer gefunden, außer einer kürzlichen, die nur mit meinem Versuch verbunden war.

Nachdem ich das "doppelte" Problem erklärt habe ...

Ich bin auf Ubuntu 14.04 mit voller Festplattenverschlüsselung (LVM über LUKS) und ich möchte luksSuspend in die Aussetzungsprozedur integrieren (und später luksResume verwenden), so dass ich zum RAM anhalten kann, ohne zu gehen Schlüsselmaterial im Speicher und der Stamm entsperrt.

Ich habe versucht, ein Skript für Arch Linux zu portieren, bisher ohne Erfolg: Ich habe ehrlich gesagt keine Idee von dem was ich tue ...

Kann mir jemand helfen, dies zu portieren (oder so etwas von Grund auf neu zu erstellen)? Oder, zumindest, kann jemand mich auf Dokumentation verweisen, wie man Sachen in die Suspend-Prozeduren einbringt und wie man die notwendigen Binaries und Skripte (wie cryptsetup) auch nach dem Blockieren aller IO zu root erhält (von luksSuspend ) ?

In Bezug darauf, wie die erforderlichen Binärdateien und Skripts für die Wiederaufnahme verfügbar gehalten werden, anderer Blogbeitrag (auch für Arch) kopiert sie nach /boot ; Ich möchte jedoch etwas mehr in den Zeilen verwenden, was Vianney in dem oben erwähnten Skript verwendet hat, da dieser Ansatz in diesem Aspekt etwas eleganter erscheint.

Ich habe nicht viel erreicht, aber meine Entwicklung kann auf GitHub gefunden werden.

    
Jonas Malaco 21.09.2013, 06:42
quelle

2 Antworten

1

Entschuldigen Sie das offensichtliche, aber haben Sie versucht, ein Skript hinzuzufügen, das die Befehle cryptsetup luksSuspend / luksResume zum /usr/lib/pm-utils/sleep.d enthält? Wenn ja, was ist passiert?

Es erscheint mir logisch, die Dienste cryptdisks und cryptdisks_early bei hibernate / resume anzuhalten / zu starten. Würden cryptdisks_stop und cryptdisks_start in einem Skript in pm-utils/sleep.d aufrufen? Ich nehme an, dies hätte das gleiche Ergebnis wie der direkte Aufruf von cryptsetup luksSuspend .

    
sibaz 18.09.2015 12:32
quelle
0

Die nächste Lösung, die ich finden konnte, ist das 2013 proof of concept-Skript suspension.sh von Mikko Rauhala.

#!/bin/sh

# A proof of concept script for forgetting LUKS passwords on suspend
# and reasking them on resume.

# The basic idea is to copy all of the files necessary for luksResume
# onto a RAM disk so that we can be sure they'll be available without
# touching the disk at all. Then switch to a text VT to run the resume
# (easier to make sure it'll come up than to do the same with X).

# The suspend itself has to be done from the ramdisk too to make sure it
# won't hang. This is also a reason why this couldn't be reliably done as a
# self-contained /etc/pm/sleep.d script, so to make the concept clear
# (and because I'm lazy) I did just a minimal standalone proof of concept
# instead. Integrating the functionality into the usual pm tools would be
# encouraged. (Though suspend_pmu would apparently need perl on the ramdisk...)

# (C) 2013 Mikko Rauhala 2013, modifiable and distributable under
# CC0, GPLv2 or later, MIT X11 license or 2-clause BSD. Regardless
# of what you pick, there is NO WARRANTY of any kind.

RAMDEV=/dev/ram0
ROOT=/run/cryptosuspend

PATH=/sbin:/bin:/usr/sbin:/usr/bin

# Cleanup not strictly necessary every time but good for development.
# Doing it before rather than after a suspend for debugging purposes

for a in "$ROOT"/dev/pts "$ROOT"/proc "$ROOT"/sys "$ROOT" ; do
    umount "$a" > /dev/null 2>&1
done

if mount | grep -q "$ROOT" ; then
    echo "Cleanup unsuccessful, cryptosuspend root premounted." 1>&2
    exit 2
fi

if grep -q mem /sys/power/state; then
    METHOD=mem
elif grep -q standby /sys/power/state; then
    METHOD=standby
else
    echo "No mem or standby states available, aborting" 1>&2
    exit 1
fi

if ! mount | grep -q "$RAMDEV" ; then
    mkfs -t ext2 -q "$RAMDEV" 8192
    mkdir -p "$ROOT"
    mount "$RAMDEV" "$ROOT"
    mkdir "$ROOT"/sbin "$ROOT"/bin "$ROOT"/dev "$ROOT"/tmp "$ROOT"/proc "$ROOT"/sys
    cp "$(which cryptsetup)" "$ROOT"/sbin
    for a in $(ldd "$(which cryptsetup)" | grep "/" | cut -d / -f 2- | cut -d " " -f 1) ; do
        mkdir -p "$ROOT""$(dirname /$a)"
        cp "/$a" "$ROOT"/"$a"
    done
    cp "$(which busybox)" "$ROOT"/bin/
    ln -s busybox "$ROOT"/bin/sh
    ln -s busybox "$ROOT"/bin/sync
    cp -a /dev "$ROOT"
    mount -t proc proc "$ROOT"/proc
    mount -t sysfs sysfs "$ROOT"/sys
    mount -t devpts devpts "$ROOT"/dev/pts
fi

CRYPTDEVS="$(dmsetup --target crypt status | cut -d : -f 1)"

echo '#!/bin/sh' > "$ROOT"/bin/cryptosuspend
echo "sync" >> "$ROOT"/bin/cryptosuspend
echo "for a in $CRYPTDEVS ; do" >> "$ROOT"/bin/cryptosuspend
echo "  cryptsetup luksSuspend $a" >> "$ROOT"/bin/cryptosuspend
echo "done" >> "$ROOT"/bin/cryptosuspend
echo "echo -n \"$METHOD\" > /sys/power/state" >> "$ROOT"/bin/cryptosuspend
echo "for a in $CRYPTDEVS ; do" >> "$ROOT"/bin/cryptosuspend
echo '  while ! cryptsetup luksResume'" $a ; do" >> "$ROOT"/bin/cryptosuspend
echo "    true" >> "$ROOT"/bin/cryptosuspend
echo "  done" >> "$ROOT"/bin/cryptosuspend
echo "done" >> "$ROOT"/bin/cryptosuspend
chmod a+rx "$ROOT"/bin/cryptosuspend

sync
exec openvt -s chroot "$ROOT" /bin/cryptosuspend

Es wurde etwas getan, um dies auf Ubuntu 14.04 hier zu portieren. Dies ist auf keinen Fall eine perfekte Lösung da es noch einige offene Probleme gibt und es scheint, dass seit dem 11. Juni 2014 keine Arbeit veröffentlicht wurde. Es scheint jedoch ein guter Ausgangspunkt für die zukünftige Entwicklung zu sein.

Quelle: Pfandrecht

    
Elder Geek 15.01.2018 15:18
quelle

Tags und Links