我正在使用 Amazon AWS 运行 Ubuntu 服务器,并尝试允许 www-data 运行特定文件,该文件会将代码推送到我的 git 存储库。
该文件位于 /var/ 下,我将其命名为 push.sh。我在 sudoers.d 下创建了一个文件,并使用 visudo 添加了以下行:
www-data ALL=NOPASSWD: /var/push.sh
每当我跑步
sudo -u www-data sudo -l
我收到以下响应:“用户 www-data 可以在 (serverip): (root) NOPASSWD: /var/push.sh 上运行以下命令”。但是当我尝试运行此代码时
sudo -u www-data sudo sh /var/push.sh
系统要求我输入 www-data 的密码。
此外,当我创建一个 php 文件来使用 shell_exec 运行代码时
sh /var/push.sh
工作正常,但是
sudo sh /var/push.sh
不行。我会这样做,但问题是我需要使用 sudo 才能让 git 正确推送。
我可能遗漏了一些简单的东西,但我已经为此困扰了好几个小时。任何帮助都将不胜感激,谢谢。
PS 如果我需要提供更多信息请告诉我
答案1
入口
www-data ALL=NOPASSWD: /var/push.sh
允许www-data
执行确切地/var/push.sh
无需密码即可执行命令sudo
。它不会扩展sudo sh /var/push.sh
甚至sh /var/push.sh
为了按你想要的方式工作,你必须使其/var/push.sh
本身具有可执行性,即
确保它在顶部有适当的shebang(假设
#!/bin/sh
你正试图用明确的方式运行它sh
)使其至少可执行
www-data
然后直接调用它sudo -u www-data /var/push.sh