补充说明
mokutil 由 shim 项目提供,用于在启用 UEFI Secure Boot 的机器上管理 MOK(Machine Owner Key)。MOK 是介于固件密钥与发行版密钥之间的一层信任机制,允许用户为自己编译的驱动或内核模块签名。
典型场景:安装 NVIDIA 私有驱动、VirtualBox、DKMS 模块时,需要生成密钥对,用 mokutil --import 把公钥加入待注册队列,重启后在 MokManager 界面完成注册,再用该密钥签名模块。
导入或删除操作只是“排队”,必须重启并在蓝色 MokManager 界面确认才会真正生效。导入时会要求设置一次性密码,重启时输入同一密码。操作前请确认 Secure Boot 状态,非 UEFI 或已关闭 Secure Boot 的机器不需要 MOK。
语法
mokutil [选项]
选项
--sb-state:显示 Secure Boot 是否启用--import 文件:排队导入 DER 格式公钥--delete 文件:排队删除指定公钥--list-enrolled:列出自注册的密钥--list-new:列出等待注册的密钥--password 密码:为本次导入设置一次性密码--timeout 秒:设置 MokManager 等待时间,-1 表示不超时--disable-validation:请求关闭 shim 的签名校验--enable-validation:恢复签名校验--reset:清除待处理的请求--version:显示版本
实例
# 查看 Secure Boot 状态
sudo mokutil --sb-state
# 生成密钥(示例路径)
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.key -out MOK.crt \
-nodes -days 36500 -subj "/CN=My MOK/"
openssl x509 -in MOK.crt -outform DER -out MOK.der
# 排队导入,按提示设置一次性密码
sudo mokutil --import MOK.der
# 重启前确认请求已入队
sudo mokutil --list-new
# 查看已注册的密钥
sudo mokutil --list-enrolled
# 排队删除(重启后确认)
sudo mokutil --delete MOK.der
注意事项
- 忘记一次性密码会导致注册失败,需要重新执行导入。
- 删除密钥可能使已签名的模块无法加载,操作前确认影响范围。
- 部分发行版将 mokutil 放在
shim或mokutil包中,最小化系统可能未安装。