Come abilito Ubuntu (usando la crittografia completa del disco) per chiamare LUKSsupend prima di dormire / sospendere su RAM?

106

Questa domanda è relativa a altro di @Stefan, ma non è un duplicato di esso. Le domande sono leggermente diverse: l'autore voleva semplicemente sapere se questo era stato implementato, mentre io sto chiedendo aiuto specificamente su come farlo (in un modo particolare). Inoltre, l'altra domanda non ha avuto risposte utili per gli implementatori, tranne uno recente che si collegava semplicemente al mio tentativo.

Avendo spiegato il problema "duplicato" ...

Sono su Ubuntu 14.04 usando la crittografia completa del disco (LVM su LUKS) e vorrei incorporare luksSuspend nella procedura di sospensione (e poi usare luksResume ) in modo che possa sospendere la RAM senza lasciare materiale chiave sulla memoria e la radice sbloccata.

Ho provato a portare uno script per Arch Linux , finora senza successo: onestamente non ho idea di quello che sto facendo ...

Qualcuno può aiutarmi a portarlo (o creare qualcosa di simile da zero)? O, almeno, qualcuno può indicarmi la documentazione su come agganciare le cose nelle procedure di sospensione e come mantenere i binari e gli script necessari (come cryptsetup) disponibili anche dopo che tutto l'IO alla radice è stato bloccato (da luksSuspend ) ?

Riguardo a come mantenere i binari e gli script necessari disponibili per riprendere, questo altro post del blog (anche per Arch) copiato in /boot ; Vorrei comunque utilizzare qualcosa di più nelle linee che Vianney ha usato nella sceneggiatura che ho menzionato prima, perché quell'approccio sembra essere un po 'più elegante in questo aspetto.

Non ho raggiunto molto, ma il mio sviluppo può essere trovato su GitHub .

    
posta Jonas Malaco 21.09.2013 - 06:42

2 risposte

1

Mi dispiace dichiarare l'ovvio, ma hai provato ad aggiungere uno script contenente i comandi luksSuspend / luksResume di cryptsetup a /usr/lib/pm-utils/sleep.d ? Se è così, cosa è successo?

Mi sembrerebbe logico, chiamare stop / start dei servizi cryptdisks e cryptdisks_early anche su hibernate / resume. Chiamare cryptdisks_stop e cryptdisks_start all'interno di uno script in pm-utils/sleep.d fa il trucco? Presumo che questo avrebbe lo stesso risultato di chiamare cryptsetup luksSuspend direttamente.

    
risposta data sibaz 18.09.2015 - 12:32
0

La soluzione più vicina che sono riuscito a trovare è questo script di suspend.sh del 2013 bozza di concetto di 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

Qualche lavoro è stato fatto per portarlo su Ubuntu 14.04 qui. Questa non è affatto una soluzione perfetta poiché ci sono ancora alcuni problemi aperti e sembra che nessun lavoro sia stato pubblicato dall'11 giugno 2014. Tuttavia sembra un buon punto di partenza per lo sviluppo futuro.

Fonte: link

    
risposta data Elder Geek 15.01.2018 - 15:18

Leggi altre domande sui tag