我在使用 UEFI/Secure Boot 在 Fedora 27 中签署我的 zfs 模块时遇到了一些麻烦,我希望这里的人可以提供帮助。
作为对我通常如何执行此操作的快速说明,我使用已生成并在 efibootmgr 中注册的密钥对 VirtualBox 模块进行签名,并使用以下命令:
# /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./key.priv ./key.der $(modinfo -n vboxdrv)
它工作得很好,因为 vboxdrv 作为一个普通的内核模块存在,而且我对每次内核更新都成功地做同样的事情,而且这个过程足够通用,我应该能够用 zfs 做同样的事情。但尝试这样做失败了。检查# modinfo -n zfs
,我看到 zfs 内核模块似乎以压缩文件的形式存在 - /lib/modules/4.15.17-300.fc27.x86_64/extra/zfs.ko.xz
(这是正确的当前内核版本)。
为了查看其他地方是否存在另一个模块,我运行# find / -name zfs.ko
它什么都不返回,所以这个 .xz 文件是唯一可用的 zfs 模块。好的,所以我运行 # xz --decompress zfs.ko.xz
。这告诉我数据已损坏(xz 实用程序是返回此错误的原因,表明它不是 xz 压缩文件,或者至少以某种方式进行了修改,否则内置 xz 无法处理) .
# modinfo zfs
只是返回 zfs.ko.xz 的路径和一个 modinfo 错误。
所以我在这一点上不知所措。禁用安全启动并不是我真正要考虑的选项。如果我不能先解压缩文件,我应该如何签署压缩模块?或者它是否已经使用我应该注册的某个地方可供我下载的密钥签名?
您可以解压缩压缩模块,对其进行签名,然后重新压缩它
或更通用(我将其用于 evdi,灵感来自https://gist.github.com/dop3j0e/2a9e2dddca982c4f679552fc1ebb18df)
运行后正常
sudo depmod -a
modprobe evdi
工作:)