如何筛选签名不匹配或无签名的rpm文件并仅输出对应文件名
RPM签名不符合筛选脚本实现
直接使用以下组合命令即可满足需求,支持配合find批量处理数千个rpm文件,仅输出签名key不匹配、无签名的文件路径:
# 替换expected_key的值为你需要的目标key ID,替换find后的路径为实际rpm存放目录 find /your/rpm/directory -type f -name "*.rpm" -exec rpm -K {} + | awk -v expected_key="123456" ' # 匹配rpm文件路径行,重置状态 /:$/ { current_rpm = substr($0, 1, length($0)-1) is_valid = 0 } # 匹配合法签名行,校验key ID /key ID [0-9a-fA-F]+: OK/ { if ($7 == expected_key) is_valid = 1 } # 匹配无签名/签名校验失败场景,直接标记无效 /NOT OK|MISSING KEYS/ { is_valid = 0 } # 每个rpm校验结束后判断是否输出 /MD5 digest: OK|MD5 NOT OK/ { if (is_valid == 0) print current_rpm } '
逻辑说明
- 用
find -exec rpm -K {} +批量校验rpm签名,相比逐文件调用rpm -K性能提升数倍,处理2000个文件无压力 - awk逐行处理校验输出,每个rpm的校验结果块独立判断:
- 先存储当前校验的rpm路径,初始化合法标记为否
- 只要检测到存在目标key ID的合法签名,就标记为合法
- 只要检测到无签名、签名校验失败的日志,直接标记为不合法
- 每个rpm校验完成后,若标记为不合法则输出对应路径
针对你给出的测试样例,执行后输出结果为:
/a/folder/rpm_invalid_signature.rpm /a/folder/rpm_unsigned_signature.rpm
如果不需要筛选无签名的文件,删除/NOT OK|MISSING KEYS/ {is_valid = 0}这一行即可。
内容的提问来源于stack exchange,提问作者user486670
相关产品推荐
相关产品推荐

