如何在睡眠/挂起到RAM之前启用Ubuntu(使用全盘加密)来调用LUKSsupend?

这个问题与@Stefan的另一个问题有关,但它并不是它的重复。 问题略有不同:作者只是想知道这是否已经实施,而我正在寻求帮助,特别是如何做到这一点(以特定的方式)。 另外,另一个问题没有为实施者提供有用的答案,除了最近一个仅与我的尝试有关的问题。

解释了“重复”问题……

我在Ubuntu 14.04上使用全盘加密(LVM在LUKS之上),我想将luksSuspend合并到挂起程序中(后来使用luksResume ),这样我就可以暂停到RAM,而不会在内存和root上留下密钥材料解锁。

我试图为Arch Linux移植脚本 ,到目前为止还没有成功:老实说,我不知道我在做什么……

任何人都可以帮助我移植(或从头开始创建这样的东西)? 或者,至少,任何人都可以向我指出有关如何将内容挂钩到挂起过程以及如何在所有IO到root被阻止(通过luksSuspend )之后保持必要的二进制文件和脚本(例如cryptsetup)的luksSuspend

关于如何保持必要的二进制文件和脚本可用于恢复,这个其他博客文章(也为Arch)将它们复制到/boot ; 然而,我想在Vianney之前使用的脚本中使用更多的东西,因为在这方面,这种方法看起来更优雅。

我没有达到太多,但我的开发可以在GitHub上找到 。

很抱歉说明了这一点,但您是否尝试将包含cryptsetup luksSuspend / luksResume命令的脚本添加到/usr/lib/pm-utils/sleep.d ? 如果是这样发生了什么

对我来说,在hibernate/恢复上调用停止/启动cryptdisks和cryptdisks_early服务似乎是合乎逻辑的。 会在pm-utils/sleep.d的脚本中调用cryptdisks_stop和cryptdisks_start吗? 我假设这与直接调用cryptsetup luksSuspend结果相同。

我能找到的最接近的解决方案是Mikko Rauhala的2013年概念证书suspend.sh脚本。

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

已经完成了一些工作,将其移植到Ubuntu 14.04 。 这绝不是一个完美的解决方案,因为仍有一些未解决的问题 ,而且自2014年6月11日以来似乎没有发布任何工作。但这似乎是未来发展的良好起点。

资料来源: https : //github.com/jonasmalacofilho/ubuntu-luks-suspend