Linux 通过 /etc/cron.allow(白名单)和 /etc/cron.deny(黑名单)控制 crontab 使用权限:若 cron.allow 存在,则仅其列出用户可用;否则若 cron.deny 存在,则其中用户被禁用;两者皆无时,传统上仅 root 可用。

Linux 中限制普通用户使用 crontab,并不是靠给用户“加权限”或“改文件属主”来实现的,而是通过系统级白名单和黑名单机制控制谁能运行 crontab 命令本身。
crontab 权限由 /etc/cron.allow 和 /etc/cron.deny 控制
这两个文件决定哪些用户可以调用 crontab -e、crontab -l 等命令。系统检查顺序严格:
- 如果
/etc/cron.allow存在,则只有该文件中列出的用户能使用 crontab;此时/etc/cron.deny完全被忽略 - 如果
/etc/cron.allow不存在,但/etc/cron.deny存在,则其中列出的用户被禁止使用 crontab,其余用户默认允许 - 如果两个文件都不存在,传统行为是:只有 root 用户可使用 crontab(注意:部分现代发行版如较新 Ubuntu 默认允许所有用户,但依据仍是“两文件均不存在”这一状态)
只允许特定用户使用 crontab(白名单模式)
适合安全要求高的环境,例如仅允许运维账号和备份账号设置定时任务。
- 清空或删除
/etc/cron.deny(避免冲突):rm -f /etc/cron.deny - 创建并写入白名单:
echo "admin" > /etc/cron.allow,再追加其他用户:echo "backup" >> /etc/cron.allow - 确保文件权限为
600(仅 root 可读写):chmod 600 /etc/cron.allow - 普通用户执行
crontab -e时会立即收到错误提示:you (username) are not allowed to use this program
禁止个别用户使用 crontab(黑名单模式)
适用于大多数场景——默认开放,仅封禁高风险账号(如临时测试账户、FTP-only 账户等)。
- 确认
/etc/cron.allow不存在:ls /etc/cron.allow,若存在则先移除 - 向
/etc/cron.deny添加用户名,一行一个:echo "testuser" >> /etc/cron.deny - 同样建议设为
600权限:chmod 600 /etc/cron.deny - 该用户下次执行
crontab -l就会失败,而其他用户不受影响
验证与注意事项
修改后无需重启 crond 服务,策略即时生效。但要注意:
- 文件必须由 root 创建和编辑,普通用户无法绕过该检查
- 用户名拼写必须完全匹配
/etc/passwd中的登录名(区分大小写) - 即使用户被禁止使用 crontab,其已存在的
/var/spool/cron/用户名文件仍保留,只是不能再更新或查看 - root 用户始终不受这两个文件限制,可随时用
crontab -u username -e代为管理他人任务


















