IMA-Appraisal(IMA 评估模式)是 Linux 内核 Integrity Measurement Architecture(IMA)子系统的核心能力之一,用于在系统运行时对文件进行主动完整性验证,防止被篡改的文件被访问或执行。以下从“原理→机制→部署→运行→优化”五个维度进行详解。
一、原理:一句话理解 IMA-Appraisal
“提前把文件应有的样子(哈希或签名)存起来,系统每次真正用到文件时,再算一遍比对,若不一致就拒绝访问。”
二、机制总览:三条技术路线
路线 | 基准值 | 校验方式 | 适用场景 | 工具/命令示例 |
原生哈希 |
security.ima = sha256 值 |
直接比对哈希 |
可变文件、数据文件 |
evmctl ima_hash |
原生签名 |
security.ima = PKCS#7 签名 |
公钥验签 → 得哈希 → 比对 |
关键可执行文件、库 |
evmctl ima_sign --key xxx.key |
摘要列表 |
内核白名单池(哈希表) |
查表即可 |
发行版批量部署、性能要求高 |
openEuler gen_digest_lists + echo /path/list > /sys/kernel/security/ima/digest_list_data |
三、部署流程(以“原生签名”为例)
-
启动进入 fix 模式
ima_appraise=fix ima_policy=appraise_tcb
-
为文件打签名
find /usr/bin -fstype ext4 -type f -executable -uid 0 \
-exec evmctl ima_sign --key /path/ima.key -a sha256 '{}' \;
-
重启切 enforce
ima_appraise=enforce ima_policy=appraise_tcb
-
验证
getfattr -n security.ima /sbin/init
能看到 security.ima
含 0x03 0x00 0x00 0x00 0x30...
的签名串 。
四、运行期关键接口与调试
接口 | 用途 |
/sys/kernel/security/ima/policy |
动态加载评估策略 |
/sys/kernel/security/ima/digest_list_data |
导入摘要列表 |
/sys/kernel/security/ima/digests_count |
查看已导入哈希条目数 |
/sys/kernel/security/ima/ascii_runtime_measurements |
实时度量日志 |
audit.log |
完整性失败事件:type=INTEGRITY_DATA cause=invalid-signature |
五、性能与易用性优化:IMA 摘要列表机制(openEuler 24.03+)
六、证书信任链(签名路线必做)
证书类型 | 存放位置 | 用途 |
根证书 |
内核编译时 CONFIG_SYSTEM_TRUSTED_KEYS="./root.crt" |
验证子证书 |
子证书 |
initrd 里的 /etc/keys/x509_ima.der |
验证文件签名 |
查看命令 |
keyctl show %:.builtin_trusted_keys / keyctl show %:ima |
调试 |
七、一句话总结
IMA-Appraisal 就是“文件级别的 Secure Boot”:从启动到运行,只允许系统执行“预先认可”的代码和数据,其余一律拒之门外。