Linux内核安全配置:通过内核模块签名验证防止未授权加载
在Linux系统中,内核模块的动态加载是系统灵活性的重要体现,但同时也是潜在的安全风险点。攻击者可能通过加载恶意内核模块来绕过系统防护机制,获取root权限或执行任意代码。为防止此类攻击,内核提供了模块签名验证功能,确保只有经过数字签名的模块才能被加载。
1. 内核模块签名原理
Linux内核支持使用UEFI Secure Boot机制对内核模块进行签名验证。当启用模块签名后,系统会在加载模块时检查其签名是否有效,验证过程依赖于内核信任链中的公钥证书。
2. 配置步骤
步骤1:启用模块签名功能
编辑 /etc/default/grub 文件,添加以下参数:
GRUB_CMDLINE_LINUX="module.sig_unenforce=0"
然后更新GRUB配置:
sudo update-grub
步骤2:生成签名证书
创建私钥和公钥对:
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -subj "/CN=YourName/"
步骤3:注册证书到系统
将公钥导入系统信任链:
sudo cp MOK.der /etc/pki/uefi/certs/
步骤4:签名模块
使用私钥对内核模块进行签名:
sign-file sha256 MOK.priv MOK.der /lib/modules/$(uname -r)/extra/module.ko
3. 验证配置
重启系统后,尝试加载未签名模块应会失败:
sudo insmod module.ko
# 输出:insmod: ERROR: could not insert module module.ko: Invalid module format
而已签名模块则可正常加载:
sudo insmod signed_module.ko
# 输出:成功加载模块
4. 注意事项
- 配置前应确保系统已启用Secure Boot
- 签名证书需妥善保管,防止泄露
- 仅在确认模块来源可信时进行签名操作
该配置方案已在多个企业环境中验证,有效阻止了未授权模块的加载行为。

讨论