sudo - 冒充用户

krz*_*zto 8 users sudo

我正在尝试正确使用 sudo 命令和 sudoers 文件,以便我可以以其他用户身份运行命令。

我的 sudoers 文件设置如下:

beans ALL = (root,apache) NOPASSWD: /opt/renovations/var/script-*.sh
Run Code Online (Sandbox Code Playgroud)

root、apache 和 beans 是 bean 组的一部分。
另外 /opt 有 755 权限,而 /opt/renovations 目录及其子目录由 beans 用户和组拥有。

我试图作为 bean 运行的命令是:

sudo -n -u apache -i /opt/renovations/var/script-test.sh  
Run Code Online (Sandbox Code Playgroud)

-n: 是这样我就不会被提示输入密码,因为这将由 cron 运行
-u: 是这样我可以模拟 apache 用户
-i: 是这样我模拟登录,以及我的 .profile已加载。我需要这个以便我访问 .profile 中的环境变量。

问题是当我运行 sudo 命令时,我收到以下消息:

sudo:抱歉,运行 sudo 需要密码

我已经尝试在 AIX 和 Ubuntu 上运行它,但问题出在两个系统上。如果我运行,这会起作用:

sudo -n -u apache /opt/renovations/var/script-test.sh
Run Code Online (Sandbox Code Playgroud)

但是没有 -i,我的环境不包含我需要在那里的所有环境变量。

我需要在我的 sudoers 文件中更新什么才能做到这一点吗?

小智 4

正如您@krzysto 所说,解决方案是将以下内容添加到 sudoers 文件中

beans ALL = (root,apache) NOPASSWD: /usr/bin/ksh -c /opt/renovations/var/script-*.sh 
beans ALL = (root,apache) NOPASSWD: /usr/bin/bash -c /opt/renovations/var/script-*.sh
Run Code Online (Sandbox Code Playgroud)

下一个缺少的部分是确保该组具有脚本的执行权限,以便您可以执行它们。