当当前 Linux 发行版在 UEFI 安全启动下运行时,将设置“内核锁定”。多个内核消息
Lockdown: swapper/0: hibernation is restricted; see man kernel_lockdown.7
可能支持这样的解释:UEFI 安全启动的休眠状态已被破坏 - 在阅读大多数互联网资源时,这种印象将得到支持。这个解释是错误的, 尽管。这就是为什么该消息使用“受限”一词,而不是“禁用”。事实证明,用于支持 kernel_lockdown 的签名内核/内存映像的补丁已经从大约 2017 年开始开发。 2011年。
LUKS 至少加密交换空间(如果不是完整的 HD),可以在锁定下启用休眠,即使在涉及 TPM 时高度自动化也是如此。
推荐阅读:
哪个主流内核版本可以实现此功能?哪些最专业维护的发行版已安装补丁,可以在锁定状态下启用休眠功能,那么如何激活它呢?
这些发行版可能是 RHEL 和 Clones、Debian(和 Ubuntu)、SLES/OpenSuse,但是,我无意开始讨论什么是“最专业”的发行版。如果您知道适用于任何大型用户群发行版的最佳“简单”解决方案,请随时回答。
我想知道是否像建议的那样注入自己的补丁修补内核以允许在启用安全启动的情况下休眠对于当前的发行版来说确实有必要。我需要一个发行版-打高尔夫球地点。
答案1
同时我可以声明开放苏塞15.3和15.4这绝对是可能的,但舒适度各不相同,主要集中在手动密码输入和通过加密令牌自动解密。
新安装(OpenSuse)
最简单的安装路径是在安装时选择磁盘加密和 LVM(“引导安装”)。这会将根文件系统和交换放在加密的 LV 上。内核仍然会发出“休眠受到限制”消息,但是内核似乎检测到交换区已加密并将挂起到磁盘,例如,
systemctl hibernate
不过,您必须确保至少您的 RAM 大小适合交换,尽管只要您的大部分 RAM 用于缓冲区和缓存,写入的图像就会比您的 RAM 大小小很多。在 GUI(KDE 测试)上,您将看到“睡眠”和“休眠”按钮。
修改现有系统
我还能够配置一个预装的系统,该系统带有一个加密交换,但没有 LVM。这应该与发行版无关。但是,请注意,只要您的根目录未加密,这确实提供了有限的保护。您很可能至少能够在安全启动下休眠。
使用 gdisk 创建基本交换分区(例如 /dev/sdaX)。分区类型 dm-crypt (8308)
格式化基本分区
cryptsetup luksFormat -y -v --type luks2 /dev/sdaX
输入加密密码
打开未加密的设备
cryptsetup luksOpen /dev/sdaX cr_swap
- 在这种情况下,我的 /etc/crypttab 不是由 cryptsetup 创建的,因此我必须输入(从 获取 fs uuid
lsblk -d -o uuid /dev/sdaX
):
cr_swap UUID=[/dev/sdaX 的 fs UUID] 无 x-initrd.attach
- 格式交换
mkswap /dev/mapper/cr_swap
- 记下 cr_swap 的 UUID
lsblk -o name,type,uuid
- 使用以下行更新 /etc/fstab
UUID=[cr_swap 的 UUID] 交换交换默认 0 0
- 测试交换
swapon -a
swapon -s
在GRUB2 Boot Loader中,添加内核参数
resume=/dev/disk/by-uuid/[UUID of cr_swap]
确保 initrd 已更新(例如,恢复模块必须存在!)
dracut -f
- 执行重新启动并尝试休眠。
您可以检查是否检测到您的加密交换:
fwupdmgr security --force
应该在某个地方输出:
✔ Linux kernel lockdown: Enabled
✔ Linux swap: Encrypted
✔ fwupd plugins: Untainted
结果
不过,还有改进的空间。
选项一中带有 LVM 的 Opensuse 系统将要求您提供磁盘密码。两次。 (GRUB2+initrd)
第二个版本应该让 systemd 在启动时询问您交换密码。一次。
使用 TPM 或 FIDO2 设备可能会让您无需密码即可解密磁盘,但是,这是另一回事了。