首页/系统/信创系统运维速查/计划任务访问控制(allow/deny)
安全加固65 条

计划任务访问控制(allow/deny)

限制谁可以创建 cron/at 任务:allow 列表存在时只有名单内用户能建任务,allow 与 deny 并存时 deny 失效;服务收敛后清点两个文件。

信创系统运维速查系统更新于 2026-10-13

计划任务的访问控制文件

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

文件组合与结果

allowdeny实际效果
存在不存在只有名单内用户可创建任务,推荐做法
不存在存在名单内被拒绝,名单外全部放行
存在存在deny 被忽略,只有 allow 生效,极易误判
都不存在都不存在取决于发行版默认,通常放行全部用户
收口前先看 /var/spool/cron/ 与 atq,确认没有任何业务账号依赖定时任务,否则会出现任务静默不执行、业务数据延迟这类难定位的问题。

易错点

  • allow 与 deny 同时存在时 deny 被忽略,运维照 deny 文件排查会得出错误结论
  • 把承载业务调度的普通账号移出白名单,任务不再执行且没有明显报错,故障往往几天后才暴露
  • allow 文件权限设得过松,普通用户可自行改写白名单绕过管控
  • 只处理 cron 不管 at,一次性定时任务仍可被执行,基线核查会被判为不符合

数据来源与参考

  • man 1 cron(cron.allow 说明)
  • man 1 at
  • 等保 2.0 访问控制要求
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌