定时任务是服务器安全高危入口,需建立识别、权限控制、监控、完整性验证闭环机制:全面扫描多源任务,严控文件权限与路径规范,部署auditctl基线告警,强化脚本签名与加密执行。

定时任务是服务器安全的高危入口,37% 的入侵事件与其相关。审计不是“看看有没有异常任务”,而是建立从识别、权限控制、监控到完整性验证的闭环机制。
一、全面识别所有定时任务来源
Linux 中定时任务分散在多个位置,漏查任意一处都可能留下后门:
-
用户级任务:每个用户都有独立 crontab,用
crontab -l查当前用户,crontab -l -u username查指定用户 -
系统级配置文件:检查
/etc/crontab和/etc/cron.d/下全部文件,它们以 root 权限运行 -
周期性目录:
/etc/cron.hourly、/etc/cron.daily等目录中的脚本会被自动调用,需逐个查看内容 -
systemd timer:执行
systemctl list-timers --all查看所有启用的 timer 单元,再用systemctl cat xxx.timer审查其触发逻辑
二、权限与配置硬性规范
很多风险源于宽松的权限设置和模糊的写法,必须强制统一标准:
-
/etc/cron.d/ 目录下所有文件属主必须为 root:root,权限严格设为 600(
chmod 600 /etc/cron.d/*) -
禁止在 crontab 中使用通配符路径,例如
/scripts/*.sh易被注入,应明确写成/scripts/backup.sh - 每个任务必须指定完整绝对路径,避免因 PATH 环境变量缺失导致执行失败或被劫持
-
普通用户如需执行定时任务,不得直接编辑 crontab,而应通过 sudoers 精确授权,例如:
username ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
三、实时监控与基线告警
靠人工定期检查无法应对快速植入,必须部署自动化监控:
- 用
auditctl监控关键路径变更:auditctl -w /etc/cron.d -p wa -k cron_d_changesauditctl -w /etc/crontab -p wa -k crontab_changes - 设置基线告警规则:非工作时间(如 02:00–05:00)触发的任务、执行链中含
wget/curl/sh -c的任务、资源占用超阈值的任务,均立即通知 - 为每个任务单独配置日志输出,并用
chattr +a锁定日志文件,防止覆盖篡改:echo "0 2 * * * /backup.sh >> /var/log/backup.log 2>&1" | crontab -chattr +a /var/log/backup.log
四、脚本完整性与可信执行
攻击者常替换脚本内容而不动 crontab 配置,因此防护重心要前移到脚本本身:
- 对核心任务脚本使用 GPG 签名,执行前校验:
gpg --verify /scripts/deploy.sh.sig /scripts/deploy.sh - 敏感脚本建议存于 LUKS 加密分区,任务启动时挂载,执行完毕卸载
- 关键配置文件(如
/etc/crontab)用chattr +i锁定,连 root 也无法修改,修改前需先chattr -i,操作完立即恢复 - 定期用
rpm -V cronie(RHEL/CentOS)或dpkg --verify cron(Debian/Ubuntu)验证 cron 包完整性,防二进制劫持











