Comment puis-je activer Ubuntu (en utilisant le chiffrement intégral du disque) pour appeler LUKSsupend avant de dormir / suspendre en RAM?

106

Cette question concerne une autre de @Stefan, mais n'est pas un duplicata. Les questions sont légèrement différentes: l’auteur voulait simplement savoir si cela avait été mis en œuvre, alors que je demande de l’aide pour savoir comment faire (d’une manière particulière). De plus, l’autre question n’a pas eu de réponses utiles pour les exécutants, à l’exception d’une récente qui ne faisait que relier ma tentative.

Après avoir expliqué le problème du "doublon" ...

Je suis sur Ubuntu 14.04 en utilisant le chiffrement intégral du disque (LVM au-dessus de LUKS) et je voudrais incorporer luksSuspend dans la procédure de suspension (et utiliser plus tard luksResume ) pour pouvoir suspendre la RAM sans quitter matériel clé sur la mémoire et la racine déverrouillée.

J'ai essayé de porter un script pour script pour Arch Linux , sans succès jusqu'à présent: idée de ce que je fais ...

Quelqu'un peut-il m'aider à porter ceci (ou à créer quelque chose comme ça à partir de rien)? Ou, du moins, est-ce que quelqu'un peut m'orienter vers la documentation sur la façon d'accrocher des éléments dans les procédures de suspension et sur la disponibilité des binaires et scripts nécessaires (comme cryptsetup) même après blocage de tous les E / S (par luksSuspend ) ?

En ce qui concerne la manière de conserver les binaires et les scripts nécessaires pour la reprise, autre billet de blog (également pour Arch) les a copiés dans /boot ; J'aimerais toutefois utiliser quelque chose de plus dans les lignes utilisées par Vianney dans le script que j'ai mentionné précédemment, car cette approche semble un peu plus élégante dans cet aspect.

Je n'ai pas atteint grand chose, mais mon développement se trouve sur GitHub .

    
posée Jonas Malaco 21.09.2013 - 06:42
la source

2 réponses

1

Désolé de vous en dire plus, mais avez-vous essayé d'ajouter un script contenant les commandes cryptsetup luksSuspend / luksResume à /usr/lib/pm-utils/sleep.d ? Si oui, que s'est-il passé?

Il me semblerait logique d’appeler stop / start les cryptdisks et les services cryptdisks_early sur hibernate / resume. Appeler cryptdisks_stop et cryptdisks_start dans un script en pm-utils/sleep.d ferait-il l'affaire? Je suppose que cela aurait le même résultat que d'appeler directement cryptsetup luksSuspend .

    
réponse donnée sibaz 18.09.2015 - 12:32
la source
0

La solution la plus proche que j'ai pu trouver est ce script de preuve de concept suspend.sh 2013 de 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

Certains travaux ont été effectués pour transférer ce contenu vers Ubuntu 14.04 ici. Ce n’est en aucun cas une solution parfaite Comme il existe encore des numéros ouverts , il semble qu'aucun travail n'ait été publié depuis le 11 juin 2014. Cependant, cela semble être un bon point de départ pour le développement futur.

Source: lien

    
réponse donnée Elder Geek 15.01.2018 - 15:18
la source

Lire d'autres questions sur les étiquettes