首页/系统/Linux 运维命令速查/rpm -V 校验系统文件完整性

rpm -V 校验系统文件完整性

rpm -Va 对比数据库与磁盘:文件缺失、大小/权限/时间变化都会报;排查入侵篡改与误改配置的利器。

Linux 运维命令速查系统更新于 2026-10-13

rpm -V 是什么

rpm -V 用 RPM 数据库里记录的元数据(文件大小、权限、属主属组、符号链接目标、mtime 与内容校验和、能力位)与磁盘上的实际文件逐项比对,把不一致的项以标记形式报出来。它是排查「系统文件被篡改、被误删、权限被改」的常用手段,也是入侵响应里建立文件完整性基线的低成本做法。

基本信息

适用平台RHEL、CentOS、Fedora、Rocky、Alma 等 RPM 系发行版
命令语法rpm -V 包名 或 rpm -Va 校验全部已安装包
常用选项-a 全部包 -f 按文件反查所属包 -q 查询模式 --nomtime 忽略时间差异 --nosize 忽略大小差异 --nofiledigest 忽略校验和差异
输出字段顺序依次为 S 大小、M 权限、5 校验和、D 设备号、L 链接、U 属主、G 属组、T 时间、P 能力
权限说明普通用户可查询,但读取部分系统文件内容需要 root

典型使用场景

  • 入侵排查:确认关键二进制(sshd、ss、netstat)是否被替换成后门版本
  • 误删恢复定位:找出缺失文件属于哪个包,再用包管理器重装
  • 变更审计:对比加固前后哪些系统文件的权限或属主被改过
  • 升级后核查:确认包升级是否完整落地
  • 基线建立:定期采集 rpm -Va 结果做差分,及时发现异常改动

常用示例

常用示例
rpm -V openssh-server                              # 校验单个包
rpm -Va --nomtime --nosize | grep -v '^$' | head -n 40   # 忽略常见正常差异
rpm -Vf /usr/sbin/sshd                             # 按文件反查并校验
rpm -qf /usr/sbin/sshd                             # 只查这个文件属于哪个包
rpm -qc openssh-server                             # 列出该包的配置文件
rpm -Va | awk '$1 !~ /^..5/' | head -n 20          # 只关注非校验和差异

输出字段读法

标记含义常见原因
S文件大小与数据库记录不符文件被追加内容或被截断
M权限位或文件类型变化被 chmod 改过,或权限被放宽
5内容校验和变化文件内容被修改,是篡改排查的重点
D设备号变化设备文件被重建
L符号链接目标变化链接被改指向别处
U / G属主或属组变化被 chown 改过
Tmtime 变化内容被改或文件被重新生成
missing文件缺失被删除,可用 rpm 重装该包恢复
被标记为配置文件(rpm -qc 能列出)的文件本来就会被正常修改,出现 M、T 差异属预期;排查重点应放在二进制、库与系统脚本的校验和(5)差异上。
配合使用:rpm -qf 定位文件归属,rpm -qi 看包版本与来源,rpm -qc 列配置文件。确定是某个包的问题后,用包管理器的 reinstall 恢复该包,比手工拷文件安全。

易错点

  • rpm -Va 在刚升级或手工改过配置后会产生大量正常差异,先建基线再做复核,否则会被噪音淹没
  • 服务器被入侵后 RPM 数据库本身也可能被改写,仅靠 -V 会得到「全部正常」的假象,需要结合离线介质或包校验做二次确认
  • 缺换行、权限被 umask 影响的文件会出现大量无意义差异,脚本里先用 --nomtime --nosize 收敛噪音
  • 校验和默认对比的是数据库记录值,换过包签名或使用不同构建版本的场景要先确认基线来源
  • -V 只能暴露差异,不能证明文件是恶意的:出现 5 差异后要人工确认内容,别直接当作后门结论

数据来源与参考

  • man 8 rpm(-V 输出代码)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌