Linux systemd安全启动指南
Linux systemd安全启动
在 Linux 系统中,systemd
作为现代初始化系统,其启动过程的安全性与 UEFI Secure Boot 和 systemd
自身的安全配置密切相关。以下是关于安全启动和 systemd
安全增强的详细指南:
一、UEFI Secure Boot 基础
Secure Boot 是 UEFI 固件的安全特性,确保只有经过签名的引导加载程序、内核和内核模块被加载。若系统启用 Secure Boot,需确保以下组件被正确签名:
- 引导加载程序(如 GRUB、systemd-boot)
- Linux 内核(
vmlinuz
) - 内核模块(如驱动模块)
- UEFI 应用(如
shim
)
二、配置 Secure Boot 的步骤
1. 检查 Secure Boot 状态
1 | mokutil --sb-state |
输出 Secure boot enabled
表示已启用。
2. 使用发行版预签名组件
大多数主流发行版(Ubuntu、Fedora 等)已提供签名的内核和引导加载程序:
- Ubuntu: 依赖
shim-signed
和grub-efi-amd64-signed
包。 - Fedora: 默认支持 Secure Boot。
3. 自定义内核或模块的签名
若需自行编译内核或模块,需手动签名:
生成密钥对:
1 | openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes |
签名内核:
1 | sbsign --key key.pem --cert cert.pem --output vmlinuz-signed vmlinuz |
签名内核模块:
1 | # 安装签名工具 |
4. 注册自定义密钥到 UEFI
- 将
cert.der
复制到 FAT 格式的 USB 设备。 - 进入 UEFI 固件设置界面,选择 Enroll Key 或类似选项。
- 导入
cert.der
到数据库(db)。
三、systemd 启动过程的安全增强
1. 限制服务的权限
在 systemd
服务单元文件(.service
)中,通过以下选项增强安全性:
1 | [Service] |
2. 启用沙盒功能
1 | [Service] |
3. 防止服务被篡改
- 使用
systemctl edit <service>
覆盖服务配置时,检查完整性。 - 通过
systemd-analyze security <service>
分析服务的安全性评分。
四、Secure Boot 常见问题解决
1. 系统启动失败(显示 “Invalid Signature”)
- 原因:组件未正确签名或密钥未注册。
- 解决:
- 禁用 Secure Boot 临时启动系统。
2 检查签名工具命令(如sbsign
)是否正确。
3 重新注册密钥到 UEFI。
- 禁用 Secure Boot 临时启动系统。
2. 内核模块加载失败
- 原因:模块未签名或签名不匹配。
- 解决:
1
2sudo modprobe -v <module> # 查看详细错误
sudo kmodsign sha512 key.pem cert.pem /path/to/module.ko
3. 更新后 Secure Boot 失效
- 原因:内核或引导加载程序更新后未重新签名。
- 解决:配置自动签名脚本(如 DKMS 钩子)。
五、推荐工具
- sbsigntools: 签名 EFI 二进制文件。
- efitools: 管理 UEFI 密钥。
- mokutil: 修改 Secure Boot 设置。
六、注意事项
- 备份数据:操作前备份重要数据。
- 测试环境:建议在虚拟机中测试 Secure Boot 配置。
- 发行版文档:参考特定发行版的 Secure Boot 指南(如 Ubuntu Secure Boot)。
通过结合 UEFI Secure Boot 和 systemd
的安全配置,可显著提升 Linux 系统的启动安全性。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Helloeuler!