首页/安全/取证与溯源速查/cron 触发时间的推算方法
Linux 取证135 条

cron 触发时间的推算方法

cron 任务本身不一定有日志:用计划定义 + 文件产物时间 + 系统日志中的 CROND 记录三处交叉,推算真实触发时刻。

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

cron 大多不留专门日志

cron 任务本身通常不写业务日志,只有任务自己在输出里留痕才会被发现。要确定一个计划任务有没有跑、什么时候跑的,得用三处信息交叉:计划定义(时间字段决定了理论触发时刻)、任务产物的文件时间(输出文件、日志、临时目录),以及系统日志里 cron 守护进程的记录。

发行版差异

RHEL 系把 cron 的执行记录写在 /var/log/cron,Debian/Ubuntu 系写在 /var/log/syslog 里并带 CRON 标记;容器化环境里 cron 可能根本没有守护进程记录,只能靠产物时间与任务定义推断。

基本信息

适用平台Linux(cron、anacron)、部分 busybox 精简系统
计划定义/etc/crontab、/etc/cron.d/*、/var/spool/cron/crontabs/*、crontab -l
执行记录RHEL 系 /var/log/cron;Debian 系 /var/log/syslog 中的 CRON
旁证任务输出文件的 mtime、临时目录、数据库里的执行记录
时间字段分 时 日 月 周,特殊值 @reboot、@daily 等

典型使用场景

  • 发现可疑定时外联脚本:先用任务定义推算时刻,再用产物时间验证
  • 用户 crontab 的 mtime 落在窗口内:结合 auth 日志定位是谁在何时写入
  • 任务声称「每小时跑」但产物缺几个时段:判断是否被暂停或执行失败
  • 排查软链接或符号命令被替换:核对 crontab 引用的脚本路径与文件时间
  • 容器环境确认计划任务来源:容器内 crontab 与宿主机 cron 要分开查

三处交叉核对

三处交叉核对
# 系统级与用户级计划定义,注意所有用户都要看
grep -v '^#' /etc/crontab | tail -5
ls -l /etc/cron.d/ /var/spool/cron/crontabs/ 2>/dev/null
for u in root www-data; do echo "== $u"; crontab -l -u $u 2>/dev/null | tail -5; done

# 执行记录:发行版不同,路径不同
grep -i cron /var/log/cron 2>/dev/null | tail -10
grep -i cron /var/log/syslog 2>/dev/null | tail -10

# 用产物时间反推触发时刻
find /tmp /var/tmp -xdev -newermt '2026-01-02 00:00' -type f 2>/dev/null | head

交叉来源与可信度

来源能证明什么局限
任务定义理论上应当在何时触发不证明实际执行过
cron 守护进程日志任务确实被调度并启动并非所有发行版与容器都有
产物文件 mtime任务确实产生了输出mtime 可能被复制或改写
账号与网络日志任务运行时的登录与外联动作需要时间对齐后关联
@reboot 类任务没有固定时刻,只能结合系统启动时间(journalctl 的 boot 记录或 uptime)确定触发点。
用户的 crontab 文件本身也有 mtime,改动时刻与被植入时刻接近;它属于高价值时间戳,分析前不要用会改写时间的工具打开。

易错点

  • 只查 root 的 crontab:植入常发生在普通用户或服务账号名下
  • 把任务定义当执行证据:定义存在不等于任务跑过,必须找产物或守护进程记录
  • 按文件 mtime 反推运行时刻:产物可能是被复制来的,mtime 会整体偏移
  • 忽略容器与宿主机的两套计划任务:只看一处会漏掉真正的触发源
  • 任务名带 systemd-tmpfiles 之类字样就放过:定时任务正利用这类命名伪装

数据来源与参考

  • cron man 手册(crontab(5))
  • Red Hat 文档(/var/log/cron)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌