编辑 sudoers.d 以允许 www-data 运行特定文件

编辑 sudoers.d 以允许 www-data 运行特定文件

我正在使用 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

相关内容