使用 sudo 通过 web 脚本保护 git 部署

信息安全 php 阿帕奇
2021-09-13 08:08:44

我正在设置一个服务器以使用 Bitbucket 的回发工具从 Bitbucket git 存储库进行自动部署。

简而言之,它是如何工作的:

  1. 我承诺使用 Bitbucket
  2. Bitbucket POST 到指定脚本(仅在从 BB 的 IP 地址调用时运行)
  3. 我的脚本 chdirs 到适当的目录,运行 git reset 和 git pull 以更新到最新版本(这是一个使用 exec() 的 php 脚本)。

我的想法来自:

http://www.stephenradford.me/blog/tutorials/deploy-via-bitbucket-or-github-service-hooks

总体而言,它似乎还可以,但它对我来说有一个主要的安全问题 - 为了使其工作,您需要授予 apache 对站点目录的写访问权限/所有权来进行部署。这让我觉得这是个坏主意,因为攻击者使用 apache 在目录中写入任意文件。

作为替代方案,我的想法是:

  1. 创建另一个用户,“部署”,然后使该用户拥有站点目录。
  2. 使用 sudoers 使 apache 能够在用户部署时运行特定的 shell 脚本,并将我的 git reset、pull 命令等放在该 shell 脚本中。
  3. 在我的 exec() 调用中,执行例如“sudo -u deploy shell-script.sh”

任何人都可以看到任何缺陷/漏洞吗?

1个回答

从 apache 调用 sudo 听起来并不正确,尽管事实上我无法确定这不是一个坏主意的确切原因。

我建议不要使用 sudo 来运行一个非常简单的 CGI 作为“suexecusergroup deploy”,它将接收来自 bitbucket 的回发并执行 git 命令。这更加直接和理智。