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