首页/安全/取证与溯源速查/日志轮转策略与保留窗口
Linux 取证135 条

日志轮转策略与保留窗口

轮转决定日志能回溯多久:rotation 周期、保留份数与压缩方式都在 logrotate 配置里,决定了时间线的可见边界。

取证与溯源速查安全更新于 2026-10-13

轮转决定了能回溯多久

日志文件不会无限增长,logrotate 按配置定期把当前日志改名归档、压缩或直接删除,再让服务重新创建新文件。轮转周期、保留份数与是否压缩,这三个参数共同决定了时间线的可见边界:保留 7 份按天轮转的日志,就意味着超出这个范围的记录已经不存在了。

copytruncate 会改变判定方式

默认方式是把文件改名后由服务新建文件,历史内容完整保存在归档文件里;而 copytruncate 的做法是先复制一份再把原文件截断为零长度,服务继续往同一个文件描述符写入。这种方式对不支持重新打开日志的程序友好,但被截断的这段时间里的内容无法从原文件恢复,判定「日志是否被删除」时要用完全不同的思路。

基本信息

适用平台Linux(logrotate,通常由计划任务每日触发)
配置文件/etc/logrotate.conf、/etc/logrotate.d/*
关键参数daily/weekly、rotate N、compress、copytruncate
查看现状ls -l /var/log/auth.log* 查看当前与归档文件
另一个体系journald 有自己的容量与轮转策略

典型使用场景

  • 确定回溯边界:查清某类日志最多能回看几天
  • 解释记录缺失:某时段日志为空先确认是否被轮转清理
  • 判断清理行为:对比轮转时间与事件时间,区分正常轮转与人为删除
  • 评估证据完整性:在报告中说明日志保留范围对结论的影响
  • 加固建议:对关键日志延长保留期或启用集中转发

查看轮转策略

查看轮转策略
# 查看各服务的轮转配置要点
grep -R -E 'daily|weekly|rotate |compress|copytruncate' /etc/logrotate.d/ | head -20

# 主配置中的全局默认值
head -30 /etc/logrotate.conf

# 查看某类日志当前的归档情况与保留份数
ls -l /var/log/auth.log*
stat -c '%n | mtime=%y' /var/log/auth.log /var/log/auth.log.1 2>/dev/null

# journald 体系的容量与保留策略
journalctl --disk-usage
# grep -E 'SystemMaxUse|MaxRetentionSec' /etc/systemd/journald.conf

关键参数读法

参数含义对时间线的影响
daily / weekly轮转周期决定单个文件覆盖的时间跨度
rotate N保留份数决定最长可回溯范围
compress归档时压缩需用 zgrep 检索,不影响内容完整性
copytruncate复制后截断原文件被截断内容无法从原文件恢复
notifempty文件为空时不轮转低频日志的保留跨度会变长
journald 与 rsyslog 两套轮转可能并存,实际保留策略要按两边的配置分别确认,只看其中一套会低估或高估可回溯范围。
日志的空洞不一定来自删除:服务重载、轮转间隙、磁盘繁忙导致的写入丢失都会造成缺口,判定人为清理前先排除这些原因。

易错点

  • 按保留份数就能回看到某天:先确认轮转周期,日轮转与周轮转差别很大
  • 忽略 copytruncate 配置:把截断误判为文件被删除或篡改
  • 只看 journald 不看 rsyslog:两套体系并行时保留范围不同
  • 日志缺口一律判为清理:重载与写入丢失同样会造成缺口
  • 不留配置快照:后续无法说明当时的保留策略与结论边界

数据来源与参考

  • logrotate 官方文档(logrotate.conf(5))
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌