脚本目录与 anacron
/etc/cron.hourly、daily、weekly、monthly 是「放脚本即执行」的目录:由 run-parts 按周期执行其中所有带可执行位的文件,anacron 负责把关机期间错过的任务在下次开机后补跑。攻击者只要丢一个脚本进去,就获得长期、无需用户 crontab 的执行能力。
为什么必须单独查
这些目录属于系统级入口,不体现在任何用户的 crontab -l 里。很多巡检只查用户 crontab,结果整片漏掉;而这些脚本以 root 运行,权限比用户任务更高。
基本信息
| 目录 | /etc/cron.hourly、daily、weekly、monthly |
|---|---|
| 执行者 | run-parts(按周期遍历执行) |
| 补跑机制 | anacron 读 /etc/anacrontab,开机后补未执行任务 |
| 执行身份 | root,脚本需带可执行位才会被执行 |
| 归属核对 | rpm -qf / dpkg -S 判断脚本来自哪个软件包 |
| 适用平台 | RHEL/CentOS 与 Debian/Ubuntu 通用 |
典型使用场景
- 排查「没有 crontab 却有周期性行为」的执行来源
- 核对系统自带维护脚本是否被追加了额外命令
- 检查第三方软件安装时留下的脚本
- 结合 cron 日志还原某个时间点实际执行了什么
- 事件收尾时确认目录内容与软件包构成一致
检查脚本目录与 anacron
检查脚本目录与 anacron
ls -la /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
cat /etc/anacrontab
grep -rEn 'curl|wget|base64|/dev/tcp|nc ' /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly 2>/dev/null
rpm -qf /etc/cron.daily/* 2>/dev/null | sort -u # 判断脚本归属(Debian 系用 dpkg -S)
stat -c '%n %a %y' /etc/cron.daily/* | head -n 20输出逐列读法
| 检查项 | 含义 | 正常/异常 |
|---|---|---|
| 目录内文件 | 存在的脚本清单 | 非软件包安装的脚本必须能解释来源 |
| 权限位 | 是否会被 run-parts 执行 | 无可执行位的脚本不会运行 |
| anacrontab 行 | 任务名、间隔、延迟、命令 | 出现自定义命令属高价值线索 |
| 归属查询 | 脚本所属软件包 | 提示不属于任何包时需重点核查 |
anacron 是补跑机制:任务在关机期间错过也会在下次开机后执行,因此不能用「当时机器没开机」排除某个脚本。
这些脚本以 root 运行且不进用户 crontab;只查 crontab -l 会整片漏掉,必须把四个目录与 /etc/cron.d 一起过。
核对执行历史
核对执行历史
grep -ai 'cron.hourly\|cron.daily' /var/log/cron 2>/dev/null | tail -n 20
journalctl -u crond --since "2026-10-01" --no-pager | head -n 30
ls -la /var/spool/anacron 2>/dev/null # anacron 记录上次运行时间戳清理前要先做的事
- 把脚本内容与时间戳复制到证据目录
- 记录脚本引用的外部地址与落地文件路径
- 用归属查询确认是否为软件包自带脚本
- 确认对应的守护进程与网络行为,再决定删除顺序