Ubuntu 22.04中IMA未计算可执行文件哈希值的问题排查求助
看起来你在配置IMA(Integrity Measurement Architecture)时遇到了测量规则未生效的问题,我来帮你一步步排查:
首先,先看你dmesg里的关键提示:ima: No architecture policies found,这说明IMA并没有加载到有效的测量策略——这很可能是核心问题所在。结合你的配置,我整理了几个排查方向:
1. 修复重复的GRUB启动参数
你在/etc/default/grub里写了两个ima_policy参数:
GRUB_CMDLINE_LINUX="rootflags=i_version dolvm lsm=integrity ima_appraise=enforce ima_policy=tcb ima_policy=appraise_tcb"
Linux启动参数中重复的项会被最后一个覆盖,这里ima_policy=appraise_tcb会替换掉前面的tcb,而appraise_tcb策略更偏向于校验而非测量。建议你保留一个适合需求的策略,比如先尝试tcb(Trusted Computing Base)策略,修改后内容:
GRUB_CMDLINE_LINUX="rootflags=i_version dolvm lsm=integrity ima_appraise=enforce ima_policy=tcb"
然后执行sudo update-grub,重启系统生效。
2. 确认IMA策略是否成功加载
重启后,检查当前IMA的策略配置:
cat /sys/kernel/security/ima/policy
如果输出为空或者没有包含测量相关的规则(比如measure func=BPRM_CHECK这类条目),说明默认的tcb策略没有加载。这可能是因为你的内核没有开启CONFIG_IMA_DEFAULT_POLICY=y选项——你可以检查/boot/config-5.19.0-41-generic文件中是否存在这个配置,如果没有,可能需要重新编译内核开启该选项,或者手动添加自定义策略。
3. 手动添加IMA测量规则(临时/永久)
如果默认策略未加载,你可以手动添加规则来触发测量:
- 临时生效:执行以下命令添加针对root用户可执行文件的测量规则:
echo "measure func=BPRM_CHECK uid=0" > /sys/kernel/security/ima/policy echo "measure func=FILE_MMAP uid=0" >> /sys/kernel/security/ima/policy - 永久生效:创建
/etc/ima/ima-policy文件,写入以下内容:
然后重启系统,IMA会自动加载这个文件中的规则。# 测量root用户拥有的可执行文件(执行时触发) measure func=BPRM_CHECK uid=0 # 测量root用户拥有的内存映射文件 measure func=FILE_MMAP uid=0
4. 使用正确的方式触发IMA测量
你当前用的dd if='{}' of=/dev/null count=0命令只会打开文件但不会触发IMA的测量条件——IMA通常在**文件执行(BPRM_CHECK)或内存映射(FILE_MMAP)**时才会计算哈希并记录。你可以尝试以下方式触发:
- 手动执行几个root权限的可执行文件,比如
/bin/ls、/usr/bin/cat等 - 重启系统,让系统服务在启动时访问相关文件
- 使用
ldd /bin/ls这类命令,触发文件的内存映射
之后再查看/sys/kernel/security/ima/ascii_runtime_measurements,应该就能看到新增的测量条目了。
5. 关于TPM-bypass的说明
dmesg里的ima: No TPM chip found, activating TPM-bypass!是正常提示,TPM-bypass模式下IMA依然可以正常记录测量值,只是不会将PCR值扩展到TPM中,这不影响哈希计算和日志记录。
备注:内容来源于stack exchange,提问作者Renascence Tarafder Prapty

