如何通过全盘加密(在LUKS之上使用LVM)使Ubuntu上的RAM挂起安全?


20

我正在使用全盘加密(在LUKS之上为LVM)的Ubuntu 13.04。

我想将其合并luksSuspend到暂挂过程中(并在以后使用luksResume),这样我就可以暂挂到RAM而无需在内存中保留密钥材料并且无需锁定根。

到目前为止,我一直在尝试为Arch Linux移植一个脚本,至今为止没有成功:坦白地说,我不知道自己在做什么……我花了7个小时...

谁能帮我移植(或从头开始创建类似的东西)?或者,至少,有人能指出我有关如何将内容挂接到挂起过程以及如何确保必要的二进制文件和脚本(例如cryptsetup)可用的文档,即使已阻止所有IO根(通过luksSuspend)。

关于如何保持必要的二进制文件和脚本可用于简历,该另一篇博客文章(也适用于Arch)将其复制到/boot;但是,我想在Vianney前面提到的脚本中使用更多的内容,因为这种方法在这方面似乎更优雅。


我在此上花了更多时间...
乔纳斯·马拉科

我编辑了组成的脚本,pm-suspend看来我快到了。但是,我发现echo -n "mem" > /sys/power/state冻结根文件fs ()之后不能仅仅暂停系统()cryptsetup luksSuspend ...,因为这仍然需要一些I / O ...
Jonas Malaco 2013年

1
我阅读了有关Debian列表(以及链接或链接到这些列表的其他列表)的一些讨论,到目前为止,似乎在解决方案上将需要类似“ deinitramfs”的内容:内核将处理对deinitramfs的控制在实际挂起系统之前,以便此tmpfs可以执行最终的清理操作(例如,擦除rootfs的加密密钥)。
乔纳斯·马拉科

我真的很想也回答这个问题。
BenAlabaster

Answers:


3

我遇到了相同的问题,因此我在移植相同的脚本时又拍了一下,您可以在此处看到。之后,它不会再接触任何非易失性存储luksSuspend,因此,即使使用加密的/ boot进行真正的全盘加密,它也可以正常工作。但是,您需要小心-偶尔可能无法正常工作!

移植脚本执行以下操作:

  • 在某个地方创建一个Ramfs坐骑
  • 提取initramfs的内容(包括initramfs暂停脚本)
  • 绑定安装相关的目录(例如/sys/proc/dev/run)到RAMFS安装
  • 停止任何可能干扰的服务(systemd-udevd,systemd-journald)
  • 使用nobarrier重新挂载根文件系统(ext4或btrfs),以使Linux在尝试进入S3时不会挂起,然后进行同步
  • 将Chroot放入initramfs挂载中,该挂载再次同步,运行luksSuspend,并使计算机进入睡眠状态
  • 唤醒后luksResume,重新挂载文件系统,重新启动服务,在initramfs挂载中卸载绑定挂载
  • 最后,卸载initramfs挂载,以便释放用于initramfs文件的RAM。

我尚未对脚本进行大量测试,但它似乎对我来说可靠。如果使用其他文件系统(即不是ext4或btrfs),则可能会遇到屏障问题,因此也需要修改脚本。

无论哪种方式,最好都测试并验证脚本是否首先起作用。如果您在尝试将Linux放入S3时遇到死机(即echo mem > /sys/power/state),那么您应该能够恢复:

  • 挂起之前,打开tty或其他终端(可以访问,所以最好是tty)
  • 将cryptsetup和相关库加载到RAM中: sudo cryptsetup luksResume anything_here
  • 暂停使用脚本
  • 如果它在chroot之后挂起(例如在starting version xxx新的vt上显示之后),请切换到您先前打开的tty并运行sudo cryptsetup luksResume your_luks_device_name_here
  • 如果也挂起,请打开另一个vt并chroot进入/run/initramfssudo chroot /run/initramfs /bin/ash
  • 尝试运行luksResumecryptsetup luksResume your_luks_device_name_here && exit
  • 然后,您的计算机应挂起。然后,您可以将其唤醒,杀死脚本(如果它们仍在运行),卸载绑定安装和/run/initramfs,并在适当的情况下使用barrier重新安装根文件系统。

1

我没有这种设置的经验,但是许多人声称可以成功。这里有几个。

使用LUKS的dm-
crypt-加密交换分区方法:使用Ubuntu 6.10 Edgy Eft 完全加密的硬盘,包括到磁盘分区的挂起
ubuntu-full-disk-encryption-lvm-luks

但是它们都不使用luksSuspend(这可能是它们起作用的原因)。


感谢您提供的链接...我正在使用与上一个链接类似的设置(由13.04安装程序自动生成)。
乔纳斯·马拉科

到目前为止没有luksSuspend,必须关闭电源以清除内存中的键...不过,感谢您的链接!也许通过了解如何手动配置此功能,我可以对如何使用luksSuspend暂停ram获得一些见识。
乔纳斯·马拉科

1
luksSuspend似乎极其难以使用。由于冻结所有I / O,因此需要一个非常杂技的暂挂脚本。我只能找到一个德语的成功故事,可以(很难)将其翻译成英语。尝试将其用作模板。
harrymc

2
您可能还需要使用ram磁盘和静态链接的cryptsetup。
harrymc

1

我花了一些时间在Ubuntu 15.10上获得此功能。如果您试图在ext2,ext3或ext4上执行此操作,则需要更新/ etc / fstab以使用'nobarrier'选项安装该卷。否则,我建议使用BTRFS。

准备好文件系统后,请在此处使用脚本:https : //github.com/Microcentillion/ubuntu-lukssuspend

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.