首页/系统/Linux 运维命令速查/cron 访问控制:cron.allow 与 cron.deny
定时任务与计划50 条

cron 访问控制:cron.allow 与 cron.deny

控制谁能使用 crontab:allow 存在时仅名单内用户可用;只有 deny 时名单外都可用;两个都不存在则多数发行版仅 root 可用。

Linux 运维命令速查系统更新于 2026-10-13

谁能用 crontab

定时任务的访问控制靠两个文件实现:允许名单与拒绝名单。规则有明确的优先级,只要允许名单文件存在,拒绝名单就会被忽略;两者都不存在的系统,行为随发行版与版本而变,部分实现只允许管理员使用。因此加固时应当显式选择一种策略,而不是依赖默认值。

基本信息

适用平台Linux 各发行版(cron 实现不同,文件位置一致)
控制文件/etc/cron.allow 与 /etc/cron.deny
优先级存在允许名单时忽略拒绝名单
权限要求文件属主应为 root,普通用户不可写

典型使用场景

  • 只允许特定账号在服务器上配置定时任务
  • 安全基线整改,明确禁止普通用户使用定时任务
  • 为运维账号开白名单,同时避免影响系统自身的定时任务
  • 排查某个账号明明被加入拒绝名单却仍能创建任务的原因
  • 变更后验证策略是否真的按预期生效

配置示例

配置示例
sudo tee /etc/cron.allow > /dev/null <<'EOF'    # 仅允许 root 与 deploy 使用
root
deploy
EOF
sudo chmod 0644 /etc/cron.allow
sudo ls -l /etc/cron.allow /etc/cron.deny       # 核对属主与权限
sudo -u ops crontab -l                          # 用目标账号实测是否被拒绝
sudo journalctl -u crond --since today | tail   # 被拒时日志里会有记录

拒绝名单写法

拒绝名单写法
echo baduser | sudo tee -a /etc/cron.deny    # 追加到拒绝名单
sudo cat /etc/cron.deny                      # 核对内容
# 注意:若 /etc/cron.allow 已存在,本规则不会生效

规则组合对照

allow 存在deny 存在结果
是是只允许名单内用户,deny 被忽略
是否只允许名单内用户
否是名单外用户都可用
否否行为依实现而定,多数仅管理员可用
只修改拒绝名单却期望阻止某个用户,而系统里已经存在允许名单时,规则不会生效;改完必须用目标账号实测一次。

加固建议

  • 显式创建允许名单并只写入必要账号,避免依赖默认行为
  • 文件属主设为 root 且不允许组写,权限过宽会被直接忽略
  • 把系统自身需要的账号(如 root)保留在名单内,避免影响系统任务
  • 把这项配置纳入基线检查,机器重装或迁移后容易遗漏
  • 改完留一份变更记录,出现任务不执行时能快速回溯
被拒绝的用户执行任务管理命令时通常会收到明确错误,同时系统日志里也有记录,排查时两边对照看最快。

易错点

  • 两个文件都不存在时行为依发行版而异,加固基线必须显式创建允许名单
  • 文件属主不是 root 或权限过宽时会被直接忽略,配置看起来生效实则无效
  • 只写拒绝名单但系统已有允许名单,规则不生效且不易察觉,必须实测验证
  • 把系统账号一并拒绝会导致系统自身的定时维护任务被跳过,出现日志轮转与缓存清理异常

数据来源与参考

  • man 1 crontab(allow/deny 文件)
  • Red Hat 文档:Controlling access to cron

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌