首页/安全/取证与溯源速查/at 延时任务队列核查
Linux 取证135 条

at 延时任务队列核查

at 用于一次性定时执行,任务存放在 /var/spool/cron/atjobs(部分发行版为 /var/spool/at),是容易被忽略的持久化方式。

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

at 延时任务队列核查

at 用于一次性延时执行,任务在提交时被固化成一个脚本文件放在队列目录里,由 atd 在指定时刻取出执行。相比 cron 的周期性,at 只跑一次,容易被忽略:事件后的清理、延迟回连、定时删除日志都可能用它完成。队列文件本身保留了任务的完整内容与提交时间,即使任务已经执行完毕,文件也可能因未清理而留下记录,是很有价值的一手材料。

基本信息

查看命令atq 列出队列,at -c <任务号> 查看内容
队列目录/var/spool/cron/atjobs 或 /var/spool/at
依赖服务atd(未运行则任务不执行)
输出去向任务输出以邮件形式发给提交者,受 MAILTO 影响

典型使用场景

  • 排查一次性延时任务,识别被安排在未来执行的命令
  • 查看已执行任务的原始内容,还原当时的下发命令
  • 确认清理类动作的提交时间,对齐事件时间线
  • 检查队列目录中残留的历史任务文件
  • 评估 atd 是否启用,判断这类持久化是否可行

查看队列与内容

查看队列与内容
atq                                   # 列出当前队列中的任务号与执行时间
at -c 3 2>/dev/null | tail -30        # 查看任务 3 的完整脚本内容
ls -lt --time-style=long-iso /var/spool/cron/atjobs/ 2>/dev/null | head
ls -lt --time-style=long-iso /var/spool/at/ 2>/dev/null | head
systemctl is-active atd 2>/dev/null   # 确认调度服务是否在运行

atq 输出读法

位置含义判读要点
第一列任务号用于 at -c 查看具体内容
第二列计划执行时间与事件时间线对齐的锚点
第三列队列字母默认 a 队列,字母可区分批量任务
第四列提交用户区分管理员维护与异常提交
atd 未运行时任务不会执行,但队列文件仍可能留在磁盘上,这反而更能反映投放意图;不同发行版的队列目录与权限不同,采集前先确认实际路径。
at -c 会把任务脚本原样回显,其中可能含重定向与命令替换,复制粘贴到终端有被误执行的风险,查看时只读不复制。
队列中的任务可用 atrm 按任务号删除,取证阶段不要执行删除操作,那会让队列证据消失;确需清理时先把整个队列目录复制留存,再在副本上操作。

易错点

  • 只查 cron 不查 at,一次性延时任务整类被漏掉
  • at -c 输出被误当普通文本粘贴执行,触发任务中的命令
  • 队列文件被后续任务覆盖或清理,采集时先整体复制再做分析
  • 把 atd 未启用当作无风险,忽略了队列中已排定的任务

数据来源与参考

  • man 1 at(at 与 atd)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌