如何授权userDemo2查看userDemo1的crontab?解决权限报错
默认情况下,只有root用户才能使用crontab -u选项查看其他用户的定时任务列表,你创建的/etc/cron.d/cron.allow文件只负责控制哪些用户能管理自己的crontab(比如执行crontab -e、crontab -l),和跨用户查看的权限无关,所以才会出现未生效的情况。
下面是几种可行的解决方案:
通过sudo授权(推荐)
编辑sudoers配置文件(必须用visudo命令,避免语法错误导致sudo失效),添加以下一行:userDemo2 ALL=(ALL) NOPASSWD: /usr/bin/crontab -u userDemo1 -l保存后,userDemo2就可以通过
sudo crontab -u userDemo1 -l命令查看userDemo1的crontab列表。如果需要userDemo2输入自己的密码才能执行,去掉NOPASSWD:即可。直接给crontab文件加读权限(不推荐)
每个用户的crontab文件默认存放在/var/spool/cron/crontabs/userDemo1(部分系统如CentOS路径为/var/spool/cron/userDemo1),可以用ACL给userDemo2添加读权限:setfacl -m u:userDemo2:r /var/spool/cron/crontabs/userDemo1之后userDemo2可以通过
cat /var/spool/cron/crontabs/userDemo1查看内容,但这种方法有两个问题:一是无法使用crontab命令的格式化输出,二是系统更新crontab时可能会重置ACL权限,导致权限失效。自定义脚本封装(适合精细控制)
可以写一个简单的脚本封装查看逻辑,比如创建view_user1_cron.sh:#!/bin/bash cat /var/spool/cron/crontabs/userDemo1给脚本设置执行权限:
chmod +x view_user1_cron.sh,然后通过sudo或者ACL让脚本能读取userDemo1的crontab文件,再授权userDemo2执行这个脚本。这种方式适合需要限制用户只能查看不能修改的场景,但本质还是依赖文件权限控制。
内容的提问来源于stack exchange,提问作者Mexman

