rpm -Va 是做什么的
rpm -Va 把系统上所有已安装包的文件与 RPM 数据库里记录的属性逐一比对,检查文件大小、权限、属主、属组、符号链接目标、修改时间与内容摘要,输出任何不一致的条目。它是 RPM 系系统(麒麟、openEuler 等)上快速发现系统文件被替换或改动的手段之一,代价是输出量大、误报多,因此正确做法是先落盘留档,再按规则过滤后研判。
基本信息
| 适用平台 | RPM 系发行版,deb 系对应 debsums 等工具 |
|---|---|
| 全量核对 | rpm -Va,输出到文件便于过滤 |
| 单文件核对 | rpm -Vf /usr/bin/ls |
| 所属包查询 | rpm -qf /usr/bin/ls |
| 权限要求 | 普通用户即可运行,读取部分文件需 root |
典型使用场景
- 安全事件后快速筛查系统二进制是否被替换
- 等保核查要求主机具备完整性检查手段,作为定期巡检项
- 变更后核对:确认升级或打补丁只影响了预期文件
- 排查异常进程时确认其可执行文件未被篡改
- 交付验收阶段留存一份基线输出,后续对比使用
- 与 AIDE 等工具交叉验证,提高结论可信度
全量与单文件核对
全量与单文件核对
rpm -Va > /tmp/rpm-va.txt 2>&1 # 完整输出落盘留档
wc -l /tmp/rpm-va.txt # 先看条目规模
# 过滤配置与文档类差异,聚焦二进制与库
grep -vE ' c | d |/var/log|/etc/' /tmp/rpm-va.txt | head -40
rpm -Vf /usr/bin/ls # 核对单个文件
rpm -qf /usr/bin/ls # 确认文件属于哪个包
grep '5' /tmp/rpm-va.txt | head -20 # 只看摘要(校验和)失配的条目第二列标记读法
| 标记 | 含义 | 关注程度 |
|---|---|---|
| S | 文件大小变化 | 与内容变化常同时出现 |
| M | 权限或文件类型变化 | 权限被改动需重点确认 |
| 5 | 内容摘要不一致 | 最需要关注,说明内容被改 |
| U | 属主变化 | 可能被提权或被误改 |
| G | 属组变化 | 权限体系变动线索 |
| T | 修改时间变化 | 与正常升级时间对照 |
标记多位同时出现时以内容摘要(5)与权限(M)最为关键:配置文件(标记 c)与文档(标记 d)的差异多为正常变更,二进制与库文件的摘要失配才需要深入核实。
输出量很大,先重定向到文件再过滤,避免在终端里翻看整屏内容漏掉关键行;保留原始输出文件,作为后续比对与说明的依据。