计划任务日志怎么查
cron 是 Linux 上最常用的定时执行机制,也是攻击者做持久化的常见落点。执行记录集中在 /var/log/cron(RHEL 系)、/var/log/syslog 或 /var/log/cron.log(Debian 系),使用 journald 的系统可用 journalctl -u cron 检索。判读方法是对照两件事:任务定义文件的时间与内容、执行记录的时间与次数。新增任务、任务内容指向临时目录或脚本、以及反复执行失败的任务,都是需要优先核实的对象。除 cron 外还要检查 systemd 定时器(.timer 单元)。
基本信息
| 适用平台 | 各 Linux 发行版(cron 与 systemd timer) |
|---|---|
| 日志位置 | /var/log/cron(RHEL 系)、/var/log/syslog 或 /var/log/cron.log(Debian 系)、journalctl -u cron |
| 任务定义位置 | /etc/crontab、/etc/cron.d/、/etc/cron.{hourly,daily,weekly,monthly}/、/var/spool/cron/crontabs/<用户> |
| systemd 侧 | systemctl list-timers、/etc/systemd/system/*.timer 与对应 .service |
| 关键判读点 | 任务新增时间、执行者身份、执行的命令路径、失败重试 |
典型使用场景
- 确认事件窗口内是否有计划任务被新增,定位持久化入口
- 核对任务定义与执行记录:任务存在但从未执行、或执行了但定义已被删除,都是异常形态
- 排查反复失败的任务:失败信息常泄露攻击者的工具路径与网络目标
- 识别伪装成系统任务的自定义任务:注释与命名看似正常但命令指向用户目录
- 确认数据定期外带行为:固定周期的压缩打包与上传动作
检索与核对
检索与核对
# 执行记录(不同发行版路径不同,两条都试)
grep -i cron /var/log/syslog | tail -50
journalctl -u cron --since '24 hours ago' | tail -50
grep -i 'CRON\|cron' /var/log/cron 2>/dev/null | tail -30
# 任务定义清单与修改时间(新增任务会暴露时间)
ls -l --time-style=full-iso /etc/crontab /etc/cron.d/ /var/spool/cron/crontabs/ 2>/dev/null
crontab -l 2>/dev/null; for u in $(cut -d: -f1 /etc/passwd); do crontab -l -u $u 2>/dev/null | grep -v '^#'; done
# systemd 定时器
systemctl list-timers --all | head -20; grep -Rn 'ExecStart' /etc/systemd/system/*.timer 2>/dev/null记录与定义对照
| 观察点 | 含义 | 判读要点 |
|---|---|---|
| 定义时间晚于基线 | 任务在事件窗口内被创建 | 与变更单核对,非计划即为重点 |
| 有定义无执行记录 | 任务未到触发时间或 cron 服务异常 | 确认服务状态,排除日志缺失 |
| 有执行记录无定义 | 定义被删除或来自其他机制 | 提示清理痕迹,需查其他来源 |
| 反复失败 | 命令路径错误或依赖缺失 | 失败信息中含路径与目标,价值高 |
| 触发频率异常 | 每分钟执行等激进配置 | 常见于恶意持久化,优先核实 |
任务定义文件的修改时间与执行日志要并排看:定义在事件窗口内被改动、紧接着出现执行记录,是最直接的时间证据链。
容器环境里 cron 通常由宿主或编排系统驱动,容器内看不到对应日志;此时要转到宿主机与编排平台的调度记录中排查。