首页/安全/应急响应速查/at 一次性任务排查

at 一次性任务排查

at 任务只执行一次、藏得比 cron 深:atq 列出,at -c 看内容,适合几小时后回来干活的延迟动作。

应急响应速查安全更新于 2026-10-13

at 一次性任务是什么

at 用来安排延迟执行的一次性任务,只跑一次,比 cron 更隐蔽——任务执行后会从队列中消失,不留配置痕迹。排查时用 atq 列出待执行任务,用 at -c 查看完整脚本内容(含执行环境),队列文件位于 /var/spool/at 下。

基本信息

列表命令atq 或 at -l
查看内容at -c <任务号> 输出完整脚本
队列位置/var/spool/at 或 /var/spool/cron/atjobs
显著特点任务执行后自动消失
权限控制/etc/at.allow 与 /etc/at.deny
输出内容完整脚本与环境变量

典型使用场景

  • 排查延迟执行的持久化动作
  • 事件处置时清点所有待执行任务
  • 排查「几小时后出现异常动作」的现象
  • 加固巡检:确认队列中没有陌生任务
  • 与 cron、systemd timer 一起做完整清点
  • 处置后确认队列已清空
  • 演练中练习检查一次性任务
  • 结合日志判断某个异常动作是否由 at 任务触发

列出并读取任务

列出并读取任务
atq                                                  # 列出待执行任务
at -c 3 | tail -n 40                                 # 查看任务完整内容与环境
at -l 2>/dev/null                                    # 另一种列出方式
ls -la /var/spool/at/ /var/spool/cron/atjobs/ 2>/dev/null | head   # 队列文件与时间
cat /etc/at.allow /etc/at.deny 2>/dev/null           # 权限控制文件内容

命令与文件读法

对象作用读法
atq列出任务编号与执行时间关注执行时间与提交者
at -c输出完整脚本包含环境变量与实际命令
at.allow / at.deny控制谁能创建任务两文件语义相反,容易搞混
atrm删除任务留档之后再删除
队列目录任务落盘位置直接看文件与 mtime
at 任务执行后即被清除:发现可疑任务先 at -c 全量导出再删除,否则脚本内容就再也拿不回来。
at.allow 与 at.deny 语义相反(allow 存在时只有列出的用户能用),排查权限问题时不要把两者弄混。
atq 输出里的执行时间要和事件时间线对齐:攻击者常把时间设在凌晨或维护窗口,那正是监控最松的时段。
没有待执行任务不代表没有用过 at:已经执行完的任务会从队列消失,要去日志里找 atd 的执行记录来确认历史动作。

易错点

  • 只查 cron 不查 at:延迟动作全在另一条队列里,容易整体漏掉
  • 看到任务消失就以为没执行:at 任务成功执行后会自动清除记录
  • at -c 只看尾部:脚本包含环境变量与前缀,需要完整浏览
  • 删除任务不留档:丢失攻击者计划执行的命令这一关键证据

数据来源与参考

  • at(1) 与 atd(8) 手册

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌