linux限制用户使用crontab通过/etc/cron.allow(白名单,推荐)和/etc/cron.deny(黑名单)实现,权限须为600,root在allow中需显式添加,配置后立即生效无需重启服务。

Linux 中限制指定用户使用 crontab,核心是通过系统级访问控制文件 /etc/cron.allow 和 /etc/cron.deny 实现,无需修改用户账户或重启服务,策略即时生效。
用 cron.allow 实现白名单管控(推荐)
该方式最安全可控,只允许明确授权的用户使用 crontab:
- 若
/etc/cron.allow不存在,先创建它:sudo touch /etc/cron.allow - 向其中写入被允许的用户名,每行一个(注意大小写和无空格):
echo "admin" | sudo tee -a /etc/cron.allow - 确保
/etc/cron.deny被移除或重命名(如sudo mv /etc/cron.deny /etc/cron.deny.bak),避免干扰 - root 用户也必须显式写入该文件,否则连 root 都会被拒绝
用 cron.deny 实现黑名单禁用(适合少量禁止)
当大多数用户可正常使用、仅需禁用个别账号时更便捷:
- 若
/etc/cron.deny不存在,直接创建:sudo touch /etc/cron.deny - 将要禁止的用户名追加进去:
echo "tomcat" | sudo tee -a /etc/cron.deny - root 始终不受
cron.deny影响,无需担心超级用户被锁 - 该文件为空或不存在时,所有非 root 用户默认可使用(前提是
cron.allow未启用)
关键注意事项
配置后立即生效,但细节决定成败:
- 两个文件权限必须为
600(sudo chmod 600 /etc/cron.allow /etc/cron.deny),否则 cron 守护进程会忽略它们 - 用户名必须与
/etc/passwd中登录名完全一致,不支持别名或通配符 - 已有任务不会自动清除,需手动清理:
sudo crontab -u username -r - 修改后无需重启
crond服务,cron 每次读取任务前都会重新检查这两个文件
验证是否生效
切换目标用户测试即可确认:
- 被允许用户执行
crontab -e应正常打开编辑器 - 被禁止用户执行相同命令会提示:
You (username) are not allowed to use this program - 也可用脚本快速自查:
cat /etc/cron.allow 2>/dev/null | grep "^$(whoami)$"











