这是关于Linux安全启动和签名模块两篇系列文章的第1篇:
- Linux系统安全启动
- 构建并安装已签名Kvaser驱动程序模块
这是关于Linux安全启动和签名模块两篇系列文章的第1篇:
两者都可初始化计算机,任务是加载操作系统。BIOS通过读取硬盘上的第一个扇区(主引导记录(MBR))并执行它来启动。相比之下,UEFI通过从硬盘上的分区(称为EFI系统分区(ESP))加载EFI程序文件(使用.efi文件扩展名)来启动。3
最简单的方法是检查文件夹/sys/firmware/efi
是否存在。
secureBoot:~$ ls /sys/firmware/efi/
config_table fw_platform_size runtime systab
efivars fw_vendor runtime-map vars
如果Linux计算机使用传统BIOS启动,则不会出现/sys/firmware/efi
文件夹。
legacy:~$ ls /sys/firmware/efi
ls: cannot access /sys/firmware/efi: No such file or directory
mokutil
命令用于管理机主密钥(MOK)。这些密钥由shim层用于验证grub2和内核映像,也可用于验证安全启动是否启用。
secureBoot:~$ mokutil --sb-state
SecureBoot enabled
我们也可以使用mokutil
命令来查看当前所有已注册的密钥。
secureBoot:~$ mokutil --list-enrolled
如果我们在启用了安全启动的计算机上编译并安装了无有效签名的Kvaser驱动程序模块,即使我们连上了Kvaser分析仪,在运行listChannels示例的时候我们也不会侦测到任何通道。
secureBoot:~$ ./listChannels
Canlib version 5.20
Found 0 channel(s).
我们可以使用lsusb
命令验证Kvaser分析仪实际上是由USB子系统连接和识别的。
secureBoot:~$ lsusb | grep Kvaser
Bus 003 Device 008: ID 0bfd:0108 Kvaser AB
我们现在查找系统日志中的错误,并会发现类似错误“所需密钥不可用”。
apr 19 16:05:38 mypc /usr/sbin/mhydra.sh[22789]: modprobe: ERROR: could not insert ’mhydra’:
Required key not available
apr 19 16:05:38 mypc systemd-udevd[22776]: Process ’/usr/sbin/mhydra.sh start’ failed
with exit code 1.
这告诉我们需要签名模块使其在计算机上工作。在下篇文章中我们将看看如何构建和签署Kvaser驱动程序模块,以便能够在启用了安全启动的Linux计算机上使用它们。
1 根证书是由受信任的证书颁发机构(CA)颁发的证书
2 有关安全启动的更多内容见Ubuntu维基https://wiki.ubuntu.com/SecurityTeam/SecureBoot/
3 BIOS和UEFI之比较见超级用户文章:https://superuser.com/questions/496026/what-is-the-difference-in-boot-with-bios-and-boot-with-uefi