首页/安全/取证与溯源速查//etc/cron* 与 anacrontab 体系
Linux 取证135 条

/etc/cron* 与 anacrontab 体系

系统级计划任务分散在 /etc/crontab、/etc/cron.d/、/etc/cron.{hourly,daily,weekly,monthly}/ 与 /etc/anacrontab,逐处核对才完整。

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

/etc/cron 体系与 anacron

定时任务在 Linux 上分散在多处:/etc/crontab 是系统级表且每行比用户表多一个用户名段,/etc/cron.d/ 下的文件使用同样格式,/etc/cron.hourly、daily、weekly、monthly 目录里的脚本由 run-parts 按周期执行,/etc/anacrontab 则用间隔天数与延迟时间描述任务。逐处核对才算完整,只查一个位置必然漏项。

基本信息

主要位置/etc/crontab、/etc/cron.d/、/etc/cron.{hourly,daily,weekly,monthly}/、/etc/anacrontab
执行机制周期目录内的脚本由 run-parts 调用,需要可执行权限与合规文件名
用户级任务存放在 /var/spool/cron/ 或 /var/spool/cron/crontabs/ 下
执行日志部分发行版默认不记录 cron 执行结果,需单独开启
权限要求cron.d 文件需正确属主与权限,否则会被静默跳过

典型使用场景

  • 排查服务与 timer 之外的定时型持久化
  • 定位某次周期性行为由哪个任务触发
  • 核对周期目录里的脚本是否为近期新增或被改写
  • 判断某个任务以哪个用户身份执行
  • 与执行记录对照,确认任务是否真的运行过

清点与核对

清点与核对
grep -v '^#' /etc/crontab | grep -v '^$'                   # 系统主表,注意多一个用户名列
ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/      # 清点目录任务与权限
ls -la /var/spool/cron/ /var/spool/cron/crontabs/ 2>/dev/null   # 用户级任务
find /etc/cron.d /etc/cron.daily -newermt '-30 days' -type f    # 近期改动或新增的任务
grep -v '^#' /etc/anacrontab                                # 间隔天数与延迟时间描述

位置与差别

位置格式特点注意点
/etc/crontab五段时间加用户名加命令多出的用户名段最容易看错
/etc/cron.d/与系统主表相同格式属主或权限不正确会被静默跳过
cron.hourly 等目录脚本文件,由 run-parts 调用文件名需符合命名规则才会执行
/etc/anacrontab间隔天数与延迟分钟语法与 crontab 表达式不是一套
run-parts 会忽略名称不合规的文件,例如带扩展名或含点号的脚本。放进去看起来像正常任务的脚本可能根本不会执行;判断一个任务是否真的落地运行,要同时看命名、权限与实际执行记录。
把新增的 cron 脚本当成正常运维任务忽略是常见失误:周期目录下的脚本以 root 身份运行,运行前不产生任何交互痕迹。排查持久化时这些脚本必须逐个打开阅读内容,而不是只看文件名。

易错点

  • 只查 /etc/crontab,漏掉 cron.d、周期目录与 anacrontab
  • 把 cron.d 文件权限异常当成不存在,忽视被静默跳过的情况
  • 忽略 run-parts 的命名规则,误判某个脚本会被执行
  • 把周期目录里的脚本当作官方自带,未打开确认实际内容

数据来源与参考

  • man 5 crontab
  • man 8 run-parts(debianutils)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌