IMA-Appraisal Signatrue 介绍
在 IMA(Integrity Measurement Architecture)的 appraisal 模式 中,Signature(签名机制) 是对文件完整性进行加密级验证的核心手段,区别于哈希校验,它通过数字签名确保文件未被篡改且来源可信。以下是详细解释:
一、IMA 签名的作用与位置
| 项目 | 说明 |
|---|---|
| 作用 | 验证文件内容是否被篡改,并确认其来源(谁签的名) |
| 存储位置 | 文件的扩展属性 security.ima 中,或追加在摘要列表文件末尾(CMS签名) |
| 验证触发时机 | 每次访问文件时由 IMA 子系统自动触发(读/执行/映射等) |
二、签名方式与流程
✅ 1. IMA扩展属性签名(原生方式)
-
签名存储:签名信息写入文件的
security.ima扩展属性。 -
工具命令:
evmctl ima_sign --key /path/to/ima.key -a sha256 <文件路径> -
验证逻辑:
-
内核从
security.ima读取签名; -
使用内核信任的证书链(
builtin_trusted_keys或ima密钥环)验证签名合法性; -
若验证失败,拒绝访问并记录审计日志。
-
✅ 2. IMA摘要列表追加签名(CMS签名,openEuler 24.03+默认)
-
适用场景:签名信息较长(含证书链),无法存入扩展属性。
-
签名存储:CMS签名追加在文件末尾,类似内核模块签名。
-
验证流程:
-
导入摘要列表时,内核自动验证签名;
-
验证通过后才允许使用该摘要列表做白名单匹配。
-
三、签名验证失败的处理
若文件签名无效或缺失,IMA 在
enforce 模式下会:-
拒绝访问(返回
Permission denied); -
记录审计日志,如:
type=INTEGRITY_DATA cause=invalid-signature comm="bash" ...
四、证书管理(信任链)
IMA 支持两类证书来源:
| 证书来源 | 用途说明 |
|---|---|
builtin_trusted_keys |
内核编译时预置的根证书(需将 CA 公钥编译进内核) |
ima 密钥环 |
系统启动后通过 initrd 导入的子证书(需由根证书签发) |
示例:导入自定义证书
# 生成根证书
openssl x509 -in root.crt -out root.der -outform DER
# 编译内核时加入
CONFIG_SYSTEM_TRUSTED_KEYS="./root.crt"
五、签名 vs 哈希对比
| 对比维度 | 签名(Signature) | 哈希(Hash) |
|---|---|---|
| 验证内容 | 文件内容 + 来源(谁签的名) | 仅文件内容是否一致 |
| 防篡改性 | 强(需私钥签名) | 弱(哈希可被重新计算) |
| 依赖 | 需证书链 + 私钥 | 仅参考哈希值 |
| 适用场景 | 高安全需求(生产环境、Secure Boot 场景) | 初始化或内部管理场景 |
六、实践建议
-
部署阶段:先用
ima_appraise=fix生成签名,再切换为enforce强制验证。 -
证书更新:跨版本升级时注意证书兼容性,避免签名验证失败。
-
调试工具:
# 查看文件签名 getfattr -n security.ima /usr/bin/bash # 查看内核信任证书 keyctl show %:.builtin_trusted_keys
总结:IMA 的签名机制通过数字签名+证书链验证,提供了比哈希更强的完整性和来源可信保障,是构建可信启动链(Secure Boot → IMA → 应用)的关键环节。

浙公网安备 33010602011771号