计划任务的访问控制文件
cron 和 at 都支持用 allow 与 deny 两组文件限制谁能创建定时任务。规则很简单:allow 文件存在时只有名单内的用户能建任务,名单外一律拒绝;allow 不存在而 deny 存在时,名单内被拒绝、其余放行。两个文件同时存在时 deny 不起作用,这是配置歧义最常见的来源。
配置歧义从哪里来
不少基线文档同时写了「创建 allow 白名单」与「清空 deny」,执行时只做了前者,于是在沿用旧配置的机器上出现加了白名单却仍能建任务的现象。另一个常见偏差是把普通运维账号一并清出名单,业务调度随之静默失效,而 cron 本身不报错,问题往往几天后才被发现。
基本信息
| cron 文件 | /etc/cron.allow、/etc/cron.deny |
|---|---|
| at 文件 | /etc/at.allow、/etc/at.deny |
| 推荐做法 | 只保留 allow 白名单,权限设为 600 |
| 影响范围 | 只限制创建任务,不影响已存在任务的执行 |
典型使用场景
- 等保与主机基线要求收敛计划任务的创建权限,只允许运维账号使用
- 排查异常任务来源时,先确认哪些账号有权限创建 crontab
- 服务账号被误加定时任务导致资源争用,需要按账号收口
- 从传统系统迁移到信创平台后重新梳理调度权限,避免沿用宽松默认值
- 交接或加固前盘点多用户共用服务器上的调度归属
cron 控制
cron 控制
cat /etc/cron.allow 2>/dev/null # 存在即白名单生效
cat /etc/cron.deny 2>/dev/null
ls /var/spool/cron/ # 统计哪些用户已有 crontab,避免锁掉在用账号
echo 'root' > /etc/cron.allow
chmod 600 /etc/cron.allow
rm -f /etc/cron.deny # 移除 deny,避免与 allow 并存产生歧义at 同理
at 同理
ls -l /etc/at.allow /etc/at.deny 2>/dev/null
atq # 查看当前排队任务,确认没有在用账号被漏掉
echo 'root' > /etc/at.allow && chmod 600 /etc/at.allow
rm -f /etc/at.deny文件组合与结果
| allow | deny | 实际效果 |
|---|---|---|
| 存在 | 不存在 | 只有名单内用户可创建任务,推荐做法 |
| 不存在 | 存在 | 名单内被拒绝,名单外全部放行 |
| 存在 | 存在 | deny 被忽略,只有 allow 生效,极易误判 |
| 都不存在 | 都不存在 | 取决于发行版默认,通常放行全部用户 |
收口前先看 /var/spool/cron/ 与 atq,确认没有任何业务账号依赖定时任务,否则会出现任务静默不执行、业务数据延迟这类难定位的问题。