![sudo - 冒充用户](https://linux22.com/image/40919/sudo%20-%20%E5%86%92%E5%85%85%E7%94%A8%E6%88%B7.png)
我正在尝试正确使用 sudo 命令和 sudoers 文件,以便我可以作为另一个用户运行命令。
我的 sudoers 文件设置如下:
beans ALL = (root,apache) NOPASSWD: /opt/renovations/var/script-*.sh
root、apache 和 beans 是 beans 组的一部分。
另外 /opt 有 755 权限,而 /opt/renovations 目录及其子目录由 beans 用户和组拥有。
我尝试作为 beans 运行的命令是:
sudo -n -u apache -i /opt/renovations/var/script-test.sh
-n:这样我就不会被提示输入密码,因为这将由 cron 运行
-u:这样我就可以模拟 apache 用户
-i:这样我就可以模拟登录,并且我的 .profile已加载。我需要这个才能访问 .profile 中的环境变量。
问题是当我运行 sudo 命令时,我收到以下消息:
sudo:抱歉,运行 sudo 需要密码
我尝试在 AIX 和 Ubuntu 上运行它,但这两个系统上都有问题。如果我运行以下命令,这会起作用:
sudo -n -u apache /opt/renovations/var/script-test.sh
但是如果没有 -i,我的环境将不包含我需要的所有环境变量。
我的 sudoers 文件中是否需要更新某些内容才能实现此目的?
答案1
正如您@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
下一个缺少的部分是确保该组具有脚本的执行权限,以便您可以执行它们。