添加到 /etc/sudoers 列表后无法使用 sudo 访问 crontab

添加到 /etc/sudoers 列表后无法使用 sudo 访问 crontab

我的用户“craig”位于/etc/sudoers我的 CentOS 5.6 VM 上的文件中,但是当我尝试使用以下命令访问 crontab 时,出现了一条错误消息:

sudo crontab -e -u crmpicco-stock-dev
[sudo] password for craig:
Sorry, user craig is not allowed to execute '/usr/bin/crontab -e' as root on dev.localdomain.

为什么我会收到此消息,因为我可以在/etc/sudoers文件中看到我可以访问请求的 crontab。

/etc/sudoers以下是我的文件中的条目:

craig   ALL=(crmpicco-stock-dev) /usr/bin/crontab, /var/spool/cron/crmpicco-stock-dev

答案1

该规范ALL=(crmpicco-stock-dev) /usr/bin/crontab意味着在ALL主机上,您可以以/usr/bin/crontab用户身份运行crmpicco-stock-dev。这并不意味着sudo,每当您尝试运行时/usr/bin/crontab,都会自动选择以用户身份运行crmpicco-stock-dev- 默认值仍然是root,配置不允许,错误消息会泄露这一点:Sorry, user craig is not allowed [...] as root

尝试运行sudo -u crmpicco-stock-dev crontab -e。这将告诉sudo您想要crmpicco-stock-dev并调用/usr/bin/crontab,应该允许;crontab -e默认情况下将尝试编辑当前用户的 crontab - 即crmpicco-stock-dev,因此您无需再次指定它。

将 放在-u crmpicco-stock-dev第一个非选项后面,sudo将假定它是您要运行的命令的一部分,并忽略它。整行看起来相似,但含义却截然不同。

答案2

您可以尝试这样做:

sudo crontab -u crmpicco-stock-dev -e

从手册页来看,这似乎是正确的顺序。

此致

答案3

我认为您必须联系您的系统管理员来帮助您调试问题。我怀疑这是 sudo 中的 setuid() 或 seteuid() 调用以及您正在调用 SUID 程序的某种产物。我以前见过这种情况,修复起来非常令人沮丧。

我可能开始修复它的方法是尝试将 crontab 调用放入没有特殊权限的可执行包装程序中,然后使用 sudo 来调用包装程序。

相关内容