Ubuntu'yu (tam disk şifrelemeyi kullanarak), RAM'a uyumadan / askıya almadan önce LUKSsupend'i çağırmak için nasıl etkinleştiririm?

106

Bu soru, @Stefan tarafından başka bir ile ilgilidir. bunun bir kopyası değildir. Sorular biraz farklı: Yazar basitçe bunun uygulanıp uygulanmadığını bilmek istedi, özellikle de bunu nasıl yapacağım konusunda yardım isterken (özellikle de). Buna ek olarak, diğer soru, sadece benim bu girişime bağlı olan son zamanlarda hariç olmak üzere, uygulayıcılar için yararlı bir cevap almamıştır.

"Çift" sorunu açıkladıktan sonra ...

Ubuntu 14.04'te tam disk şifrelemeyi kullanıyorum (LUKS'un üstündeki LVM) ve luksSuspend 'i askıya alma prosedürüne dahil etmek istiyorum (ve sonra luksResume kullanın) böylece RAM'i beklemeden askıya alabilirim bellekte kilit materyal ve kök kilidi açık.

Başarısız bir şekilde, şu ana kadar bir Linux için betik yüklemeyi denedim : Şimdilik hayır Ne yaptığımın fikri ...

Herkes bu bağlantıyı kurmamda bana yardımcı olabilir mi (ya da bu gibi bir şey yaratır)? Ya da en azından, herhangi birinin beni askıya alma yordamlarına nasıl bağlayacağına ve tüm IO'yu root engellendikten sonra bile (cryptsetup gibi) gerekli ikili ve betiklerin nasıl saklanabileceğine ( luksSuspend ) ?

Özgeçmiş için gerekli ikili ve betiklerin nasıl saklanacağıyla ilgili olarak, bu diğer blog yazısı (Arch için de) bunları /boot 'ye kopyaladı; Ancak Vianney'in daha önce bahsettiğim senaryoda kullandığı satırlarda daha fazla şey kullanmak isterim, çünkü bu yaklaşım bu açıdan biraz daha zarif görünüyor.

Çok fazla ulaşmadım, ancak geliştirmem GitHub 'da bulunabilir.

    
sordu Jonas Malaco 21.09.2013 06:42

2 cevap

1

Açıklığı bildirdiğimiz için üzgünüm, ancak /usr/lib/pm-utils/sleep.d 'ye cryptsetup luksSuspend / luksResume komutlarını içeren bir script eklemeyi denediniz mi? Öyleyse ne oldu?

Benim için mantıklı görünebilir, kronometrelerin durdurulmasına / başlatılmasına ve hibernate / resume üzerinde cryptdisks_early hizmetlerine çağrı yapılması. Cryptdisks_stop ve cryptdisks_start 'ı bir betik içinde pm-utils/sleep.d olarak çağırmak hile yapar mı? Bunun doğrudan cryptsetup luksSuspend 'yi çağırmakla aynı sonucu alacağını varsayalım.

    
verilen cevap sibaz 18.09.2015 12:32
0

Bulduğum en yakın çözüm, bu 2013 Mikko Rauhala'nın suspend.sh betiğinin kanıtıdır.

#!/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

Bunu, Ubuntu 14.04 burada. belirtmek için bazı çalışmalar yapılmıştır. Bu, hiçbir şekilde mükemmel bir çözüm değildir. hala bazı açık konular olduğu ve 11 Haziran 2014'ten beri hiçbir işin serbest bırakılmadığı anlaşılıyor. Ancak gelecekteki gelişim için iyi bir başlangıç ​​noktası gibi görünüyor.

Kaynak: İşte

    
verilen cevap Elder Geek 15.01.2018 15:18

Etiketlerdeki diğer soruları oku