Linux用户级crontab文件位于/var/spool/cron/,以用户名命名,仅root可读写;系统级配置在/etc/crontab和/etc/cron.d/,支持指定执行用户;权限由/etc/cron.allow和/etc/cron.deny控制,两者共存时allow优先。

查所有用户的 crontab 文件位置和权限
Linux 系统中,用户级 crontab 任务不全在 /var/spool/cron/ 下明文可读——普通用户文件由 cron 进程以对应 UID 权限读取,但该目录默认仅 root 可列。直接 ls -l /var/spool/cron/ 看不到非 root 用户条目,除非你已经是 root。
实操建议:
- 用
sudo ls -la /var/spool/cron/查看是否存在非空用户文件(如www-data、mysql、deploy等服务账户) - 注意:某些发行版(如 CentOS 8+/RHEL 8+)默认启用
cronie的systemd-cron兼容模式,部分任务可能转为systemd timer,需同步检查systemctl list-timers --all - 若
/var/spool/cron/为空,不代表没任务——用户可能改用anacron或写入/etc/crontab或/etc/cron.d/目录下带 UID 指定的条目
扫描 /etc/crontab 和 /etc/cron.d/ 下的可疑条目
/etc/crontab 和 /etc/cron.d/ 是系统级 crontab 入口,支持显式指定执行用户(第五列),常被隐蔽利用——比如写成 * * * * * root /tmp/.X11-unix/sh,表面是 root 执行,实际脚本藏在临时目录。
实操建议:
- 运行
sudo grep -r "^[^#].*sh\|bash\|python\|perl\|curl\|wget\|base64" /etc/crontab /etc/cron.d/ 2>/dev/null快速定位含可疑命令的行 - 重点检查是否包含非标准路径(如
/tmp/、/dev/shm/、/var/tmp/)、无扩展名二进制名(如/usr/bin/.a)、或 base64 编码字符串 -
/etc/cron.d/下文件名无限制,攻击者常起名伪装成合法服务(如logrotate、php-update),需人工核对文件 mtime 和属主:sudo stat /etc/cron.d/* 2>/dev/null | grep -A1 "File\|Uid"
检查 cron 服务是否被替换成后门二进制
高级隐藏方式是直接劫持 cron 进程本身:替换 /usr/sbin/cron 或 /usr/bin/crond,让它在加载用户 crontab 时偷偷注入额外任务,或读取某个隐藏配置(如 /etc/cron.secret)。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
实操建议:
- 比对二进制哈希:
sha256sum /usr/sbin/cron /usr/bin/crond 2>/dev/null,再与同版本官方包的哈希比对(可通过dpkg -V cron(Debian/Ubuntu)或rpm -V cronie(RHEL/CentOS)验证) - 查看 cron 进程打开的文件:
sudo lsof -p $(pgrep -f "cron\|crond") 2>/dev/null | grep -E "\.so|\.conf|\.secret",留意非常规 so 库或配置 - 用
strace -p $(pgrep crond) -e trace=openat,open,read -s 512 2>&1 | grep -E "(cron\.|spool|secret)"实时观察它试图读哪些文件(需短时间运行)
用 auditd 捕获动态新增的 crontab 行为(需提前部署)
如果系统已启用 auditd,可以回溯谁、何时、往哪个 crontab 文件写了什么——这是唯一能还原“隐藏任务如何上线”的方法。没开 auditd 的话,此时只能靠内存/进程快照反推。
实操建议:
- 检查是否运行:
sudo systemctl is-active auditd;若启用,查写入行为:sudo ausearch -m AUSEARCH -i | grep -i "crontab\|/var/spool/cron\|/etc/{cron\|cron.d}" - 若未启用,现在补加规则仍有助于后续防护:
sudo auditctl -w /var/spool/cron/ -p wa -k cron_spool,并写入/etc/audit/rules.d/cron.rules - 注意:攻击者删 crontab 时也可能触发
unlink事件,所以别只盯write,ausearch -m UNLINK -i也值得扫一眼
真正难发现的不是“有没有 crontab”,而是任务是否通过环境变量、LD_PRELOAD、或 cron 自身解析逻辑漏洞(如 CVE-2021-3156 类堆溢出)间接执行。排查到这一步,建议同步检查 ps auxf 中异常子进程树、/proc/[pid]/environ 内容,以及 cron 日志(/var/log/syslog | grep CRON)里缺失或跳过的执行记录。

















