首页/系统/信创系统运维速查/rpm 校验文件完整性(-V)
命令与包管理65 条

rpm 校验文件完整性(-V)

怀疑系统文件被改坏或篡改时:rpm -V 比对文件大小、权限、校验和与元数据记录值,输出哪类不一致一目了然。

信创系统运维速查系统更新于 2026-10-13

rpm -V 在比对什么

rpm -V 把磁盘上文件的当前属性,与安装时写进 rpmdb 的记录逐项比对,覆盖文件大小、摘要、权限、属主、属组、修改时间、设备号、符号链接指向与 capabilities。它既能发现磁盘坏道导致的文件静默损坏,也能发现被替换过的可执行文件,是主机入侵排查与完整性核查的常用入口。

基本信息

单包校验rpm -V 包名
全量校验rpm -Va(慢,噪音大)
按文件反查rpm -Vf /path/to/file
输出标记9 位,依次为 S M 5 D L U G T P
常见标记S 大小不符、5 摘要不符、M 权限变更、U 属主变更、T 时间变更
权限要求普通用户可查,输出会比较晦涩;root 才能读到全部文件

典型使用场景

  • 怀疑系统被入侵或植入了替换过的二进制,做完整性核查
  • 磁盘出现 I/O 报错后,确认关键文件是否损坏
  • 服务行为异常且怀疑程序文件被动过,先排除二进制被替换
  • 等保或安全审计要求提供完整性校验证据时留档
  • 批量核查核心包(openssh、systemd、glibc)是否被改动

校验与聚焦

校验与聚焦
rpm -V openssh-server                 # 单个包校验,输出只列不一致的项
rpm -Va 2>/dev/null | grep '^..5'     # 全量校验后只看摘要不符的行,聚焦内容被改的文件
rpm -Vf /etc/ssh/sshd_config          # 按文件路径反查属于哪个包并校验
rpm -Vf $(which ls) | head            # 关键二进制是否被替换
rpm -qf /usr/bin/passwd               # 先确认文件归属哪个包,再决定校验对象

结果落档与恢复

结果落档与恢复
rpm -Va 2>/dev/null > /tmp/rpm-verify-$(date +%F).txt   # 全量结果留档,便于与下次比对
rpm -V coreutils | grep -v '^.' > /tmp/verify-coreutils.txt
rpm -qf $(rpm -Va 2>/dev/null | grep '^..5' | awk '{print $NF}' | head -1)   # 反查首个异常文件所属包
dnf reinstall coreutils               # 确认是被改坏而非人为配置后,用重装恢复原始文件

输出逐列读法

标记位检查项含义
S大小文件长度与记录不符,常见于被截断或替换
5MD5/摘要内容与原始包不一致,重点排查项
M权限mode 被改动,含 setuid 位变化
U / G属主 / 属组所有权被改动,可能影响服务启动
T修改时间mtime 与记录不同,配置文件常因此报警
L / D / P链接 / 设备号 / capabilities符号链接指向变化、设备文件或能力集被改
被打上 c 标记的配置文件(如 /etc/ssh/sshd_config)本来就会被运维修改,校验出现 T 或 5 属正常,判断时要区分文件类型与变更记录。
全量 rpm -Va 在多包系统上耗时数分钟且输出里绝大多数是配置文件噪音,实操中通常按包、按目录分段校验。

易错点

  • 把 rpm -Va 的全部输出当成异常,其中大部分是人工改过的配置文件,未做区分就逐个『修复』会覆盖掉业务配置
  • 用 dnf reinstall 恢复文件前没有留备份,把人为调整过的配置文件一起还原,服务重启后行为变化
  • 旧包或跨越版本做过签名算法升级的系统会出现摘要误报,需结合包版本与变更记录判断,不能直接判定为入侵
  • 只校验二进制不看库文件与脚本,被替换的 .so 或 /usr/bin 下的 shell 脚本同样是常见落地点
  • 全量校验结果不落盘留档,事后无法比对『今天和上个月比多变了什么』,失去了发现新增改动的能力

数据来源与参考

  • rpm -V 手册
  • RPM 校验文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌