文件归属与来源判定
Linux 上的绝大多数二进制与配置文件来自软件包,包管理器保存了文件与包之间的对应关系。用 rpm -qf 或 dpkg -S 反查某个文件的归属,可以把文件分成三类:发行版自带、第三方仓库安装、以及不在包数据库中的手工投放文件。第三类最关键,因为手工投放往往意味着有人直接把文件写进了文件系统。rpm -Vf 与 debsums 还能进一步校验已安装包的文件是否被改动过。
基本信息
| Debian 系 | dpkg -S <文件>,debsums 校验包内文件 |
|---|---|
| RHEL 系 | rpm -qf <文件>,rpm -Vf <文件> 校验 |
| 无归属目录 | /usr/local、/opt、/tmp 通常不属于发行版包 |
| 注意 | 包数据库本身被篡改时会给出错误答案 |
典型使用场景
- 给可疑二进制定性:系统自带还是手工投放
- 核查系统二进制是否被替换,校验摘要是否变化
- 排查 /etc/cron.d 下新增任务文件的来源
- 确认某个 agent 是随包安装还是临时放上去的
- 为基线比对提供依据:哪些目录天然不由包管理覆盖
反查与校验
反查与校验
rpm -qf /usr/local/bin/agent 2>/dev/null || dpkg -S /usr/local/bin/agent 2>/dev/null # 反查归属
rpm -Vf $(command -v curl) 2>/dev/null | head # 校验包内文件是否被改动
dpkg -S /bin/ls 2>/dev/null # Debian 系反查示例
rpm -qf /etc/cron.d/backup 2>/dev/null || echo 'no owner' # 无归属即为手工投放线索
rpm -Va 2>/dev/null | head -20 # 全量校验,改动项排在前面rpm -V 输出读法
| 标记 | 含义 | 判读要点 |
|---|---|---|
| S | 文件大小变化 | 二进制被替换的常见信号 |
| M | 权限或文件类型变化 | 提权类改动会体现在此 |
| 5 | 内容摘要变化 | 最能说明文件内容被改过 |
| T | 修改时间变化 | 与其他标记结合判断处置时间 |
/usr/local 与 /opt 下的文件通常不属于发行版包,反查会返回空结果,这属于正常现象;判断时要用部署记录与变更单解释来源,而不是直接判为异常。
容器镜像内往往没有包数据库,docker exec 进去执行反查会直接失败,此时改用镜像层的构建记录来确认文件来源。
若包数据库自身被篡改,rpm -qf 与 dpkg -S 都会给出被操纵的答案,涉及结论性判断时应与安装介质或官方仓库的哈希交叉验证。