我有一个从非特权用户的crontab运行的脚本,该脚本使用调用了一些命令sudo
。除非不是。脚本运行正常,但sudo'ed命令无提示地失败。
该脚本可以作为相关用户从shell完美运行。
Sudo不需要密码。有问题的用户已在中
(root) NOPASSWD: ALL
授予访问权限/etc/sudoers
。Cron正在运行并执行脚本。添加简单的代码
date > /tmp/log
会在适当的时间产生输出。这不是权限问题。同样,脚本确实得到执行,但不是sudo'ed命令。
这不是路径问题。运行
env
从脚本内被运行显示正确的$PATH
变量,包括路径须藤。使用完整路径运行它没有帮助。正在执行的命令被赋予完整路径名。尝试捕获包括STDERR的sudo命令的输出不会显示任何有用的信息。添加
sudo echo test 2>&1 > /tmp/log
到脚本会生成空白日志。sudo二进制文件本身可以很好地执行并识别它具有权限,即使从脚本内的cron运行时也是如此。添加
sudo -l > /tmp/log
到脚本将产生输出:用户ec2-user可以在此主机上运行以下命令:
(root)NOPASSWD:ALL
使用show检查命令的退出代码$?
正在返回错误(退出代码:)1
,但似乎没有错误产生。简单的命令/usr/bin/sudo /bin/echo test
将返回相同的错误代码。
还有什么可能发生?
这是最近创建的运行最新Amazon Linux AMI的虚拟机。crontab属于用户ec2-user
,而sudoers文件是默认的发行版。
sudo
为脚本中所需的命令设置一个具有受限权限/ only / 的单独用户,并完全禁用其登录功能。
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoers
,我的大脑开始大声尖叫,无法继续阅读。