104 votes

Comment faire pour qu'Ubuntu (qui utilise le chiffrement complet du disque) appelle LUKSsupend avant de dormir/se mettre en veille en RAM ?

Cette question est liée à un autre par @Stefan, mais il ne s'agit pas d'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 spécifiquement sur la façon de le faire (d'une manière particulière). De plus, l'autre question n'a obtenu aucune réponse utile pour les implémenteurs, à l'exception d'une réponse récente qui ne faisait que renvoyer à ma tentative.

Ayant expliqué le problème du "double"...

Je suis sur Ubuntu 14.04 et j'utilise un chiffrement complet du disque (LVM au-dessus de LUKS) et je voudrais incorporer luksSuspend dans la procédure de suspension (et l'utilisation ultérieure luksResume ) afin que je puisse suspendre vers la RAM sans laisser de matériel clé sur la mémoire et la racine déverrouillée.

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

Quelqu'un peut-il m'aider à réaliser ce portage (ou à créer quelque chose de ce type à partir de zéro) ? Ou, au moins, quelqu'un peut-il m'indiquer de la documentation sur la façon d'accrocher des choses dans les procédures de suspension et comment garder les binaires nécessaires et les scripts (tels que cryptsetup) disponibles même après que toutes les entrées-sorties vers root aient été bloquées (par luksSuspend ) ?

En ce qui concerne la façon de garder les binaires et scripts nécessaires disponibles pour la reprise, ceci autre article de blog (également pour Arch) les a copiés sur /boot J'aimerais cependant utiliser quelque chose de plus proche de ce que Vianney a utilisé dans le script que j'ai mentionné précédemment, car cette approche semble être un peu plus élégante dans cet aspect.

Je n'ai pas atteint beaucoup, mais mon développement peut être trouvé sur GitHub .

1voto

sibaz Points 773

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

Il me semblerait logique d'appeler l'arrêt/le démarrage des services cryptdisks et cryptdisks_early lors de l'hibernation/la reprise également. Est-ce que le fait d'appeler cryptdisks_stop et cryptdisks_start à l'intérieur d'un script en pm-utils/sleep.d font l'affaire ? Je suppose que cela aurait le même résultat que d'appeler cryptsetup luksSuspend directement.

0voto

Elder Geek Points 34144

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

Un certain travail a été fait pour le porter sur Ubuntu 14.04. ici. Ce n'est en aucun cas une solution parfaite, car il y a encore quelques les questions ouvertes et il apparaît qu'aucune œuvre n'a été publiée depuis le 11 juin 2014. Cependant, cela semble être un bon point de départ pour un développement futur.

Source : https://github.com/jonasmalacofilho/ubuntu-luks-suspend

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X