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 改过 |
| T | mtime 变化 | 内容被改或文件被重新生成 |
| missing | 文件缺失 | 被删除,可用 rpm 重装该包恢复 |
被标记为配置文件(rpm -qc 能列出)的文件本来就会被正常修改,出现 M、T 差异属预期;排查重点应放在二进制、库与系统脚本的校验和(5)差异上。
配合使用:rpm -qf 定位文件归属,rpm -qi 看包版本与来源,rpm -qc 列配置文件。确定是某个包的问题后,用包管理器的 reinstall 恢复该包,比手工拷文件安全。