依据 scripts/sign-file, 命令行签名模块及验证签名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
a.c
1 2 3 4 5 6 7 8 9 10 11 12 |
|
scripts/sign-file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
|
https://www.jianshu.com/p/215eee5dbb05
整篇文章经由对Signing Kernel Moudles For Security Boot实践整理而成。如果能看懂原版的话,建议看该网页
在我们安装一个自己编译的模块包后,需要modprobe xx 然而,可能出现required key not available这样的提示。
这是由于采用EFI的Linux系统限制只有通过签名的模块才能加载运行。如果你是安装自己编译的模块,就需要自己签名了。
1.需要安装依赖的工具:
1 2 3 4 5 |
|
2.对于System Key Rings的解释:
咱们的X.509 Keys放在哪儿呢?请看下表
1 2 3 4 |
|
密钥要经过系统验证,也就是说咱们的一对密钥中的公钥要加载进MOK中
3.检查自己是否是EFI
1
|
|
你看到的就是MOK list
如果是EFI,你可以看到包含 EFI 字样的keyring。咱们在安装过程中,也要把自己的keyring也加到里面去。
4.生成自己的密钥对
生成密钥配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
你的名字和E-mail地址这些东西是为了标识你的签名密钥,毕竟是自己做的作品嘛。你还可以在 [req_distinguished_name] 部分添加更多信息,也可以删减。
生成密钥
1 2 3 4 |
|
5.登记你的公钥
公钥要登记在MOK list里
Centos7、RedHat EL7系系统,可以使用mokutil
1
|
|
这时系统会要你为MOK登记设置一个密码
设置完密码后,重启:
1
|
|
重启过程中会进入EFI的确认界面,输入刚刚设置的密码,一直确认就行
重启后,输入
1
|
|
你会发现MOK list比以前多了一项,也就是你的签名
6.给你的模块签名
这里我结合我自己给wl模块签名的实例
这里 我的wl模块 来源于我安装了一个叫wl-kmod的包,这是无线网卡驱动,为了找到模块位置,我先输入:
1
|
|
找到了wl.ko的位置在/lib/modules/3.10.0-514.10.2.el7.x86_64/extra/wl/wl.ko
如果能给安装包直接签名貌似更好,但是我是已经安装完才进行补救的
那么就是给wl.ko签名啦:
1 2 3 4 5 |
|
签名成功后,输入
1
|
|
载入模块没有问题,说明我的签名成功了