logrotate 配置篡改排查
logrotate 的配置与状态文件被改动,可能让痕迹提前轮转清除,也可能让某个日志完全跳过轮转。排查重点是新增的配置片段与文件修改时间,以及 postrotate 指向的脚本内容。
基本信息
| 配置 | /etc/logrotate.conf 与 /etc/logrotate.d/ |
|---|---|
| 状态文件 | /var/lib/logrotate/status 或 logrotate.status |
| 可疑点 | 新增规则、copytruncate 覆盖、postrotate 指向脚本 |
| 核对手段 | mtime 与包归属(dpkg -S / rpm -qf) |
| 影响 | 日志保留时长与轮转节奏被改变 |
| 安全预览 | logrotate -d 调试模式,不实际执行 |
典型使用场景
- 排查日志为何异常缩短或提前消失
- 确认某个服务的日志是否仍正常轮转
- 加固巡检:核对 logrotate.d 下的文件清单
- 排查「日志一天内被清空多次」的现象
- 配合日志断档排查定位原因
- 处置后验证轮转配置已恢复正常
- 演练中练习检查轮转配置
- 排查服务日志目录被写入异常脚本的情况
核对配置与状态
核对配置与状态
ls -la --time-style=long-iso /etc/logrotate.d/ # 清单与修改时间
grep -rn 'copytruncate\|postrotate' /etc/logrotate.d/ | head -n 20 # 可疑指令
ls -la /var/lib/logrotate* 2>/dev/null # 状态文件
dpkg -S /etc/logrotate.d/nginx 2>/dev/null || rpm -qf /etc/logrotate.d/nginx 2>/dev/null
logrotate -d /etc/logrotate.conf 2>&1 | head -n 30 # 调试模式预览指令与风险
| 指令 | 含义 | 风险 |
|---|---|---|
| daily / weekly | 轮转周期 | 改成 daily 会让日志更快消失 |
| rotate N | 保留份数 | 改小会缩短可回查窗口 |
| copytruncate | 复制后截断原文件 | 覆盖式清空,痕迹更难恢复 |
| postrotate | 轮转后执行脚本 | 可挂载命令执行 |
| compress | 压缩归档 | 与保留份数共同决定回查范围 |
改动配置本身不构成攻击:关键是改动时间是否与事件时间线吻合、postrotate 是否指向异常脚本。
不要用 logrotate -f 强制轮转来验证:那会真的切走当前日志,先把待查内容移出当前文件,应改用 -d 调试模式预览。
配置片段要连文件属主一起看:非 root 属主或组可写的轮转配置属于异常,攻击者往往先改权限再改内容。
轮转节奏变化会直接改变可回查窗口:把周期改成 daily、保留份数改小,几天之内老日志就会被清理掉,所以时间相关的改动要优先核对。