晚上好,在谷歌搜索后我没有找到我的问题的答案。
当安装激活安全启动的发行版(例如 Ubuntu)时,安装程序会在 NVRAM 中创建一个 MOK 密钥,可以使用“mokutil -l”查看该密钥。
后来,我决定将发行版更改为 Fedora,安装程序将在 NVRAM 中插入自己的密钥,我可以使用“mokutil -l”看到该密钥,但 Ubuntu 密钥在 Fedora 中不可见。
这是否意味着每个发行版都会在 NVRAM 中创建自己的数据库?是否可以看到之前安装的其他发行版的密钥?要清除旧发行版中这些旧 MOK 的 NVRAM 吗?
这是出于安全原因,也是为了节省空间。由于NVRAM的容量很小,如果频繁安装,会不会有内存满的风险?
在 UEFI 中恢复安全启动出厂设置会重置 PEK、KEK、DB 和 DBX 密钥,但在我的情况下似乎不会删除 MOK 密钥。
MOK 的概念并不是 Microsoft 安全启动的正式组成部分。它由 Shim 实现,Shim 是一种特殊的加载程序,实际上覆盖了固件的安全启动处理 - 它有自己的签名验证代码,允许 MOK 签名的加载程序完全绕过内置的 SB 验证。
因此,MOK 数据库存储为名为 的普通 EFI NVRAM 变量
MokList
,唯一的保护是它被标记为“仅对启动服务可见”,即您可以从EFI Shell环境中看到它,但不能/sys/firmware/efi/efivars
从正在运行的操作系统中看到它。 (Shim 创建它的只读副本,命名MokListRT
为供 Linux mokutil 查看。)EFI 变量由供应商 GUID 命名,因此理论上 Shim 的两个副本(来自不同的来源)可以具有独立的 MokList 变量,并且只有 Fedora 的 Shim 支持的变量在 Fedora 内才可见为 MokListRT。 (我不知道实际情况是否如此。)新的 Ubuntu 安装将看到以前的 Ubuntu MOK。
一种非常手动的清理方法是下载EFI Shell并配置系统以启动它。从那里您可以使用 Ubuntu 的
MokUtil.efi
– 或运行dmpstore -b
以获取所有 EFI 变量(包括仅引导服务的变量)的列表,查找“Mok”的任何实例,然后使用dmpstore -d <name> -guid <guid>
.在 dmpstore 输出中,
NV
表示非易失性(例如 MokStore 是 NV,而 MokStoreRT 不是 NV,仅存在于临时 RAM 中);BS
表示可用于启动服务(EFI 应用程序);以及RT
可供运行时服务使用的 maeans(操作系统可见)。