【问题标题】:How to securely trigger a git pull using a webhook?如何使用 webhook 安全地触发 git pull?
【发布时间】:2021-02-27 15:09:05
【问题描述】:

我已经设置了一个 github webhook 来与我的 webserver api 对话(服务器是 apache2)。我使用他们帮助页面上指定的有效负载加密安全地检查 github 机密。

当在 web 应用程序的 repo 上推送到 master 时,会通过 <?php exec 触发一个脚本 (deploy.sh)。如果我以 root 身份手动触发此脚本,那么一切都很完美。当然,正常情况下触发脚本的用户是www-data。

我的问题是 www-data 对新仓库进行 git pull 的最佳实践是什么?我大多放弃了执行 exec sudo,但也许就是这样。我在使 www-data 触发 git pull 时面临的众多问题中的一个问题是 ~/.ssh/id_rsa 文件仅针对 root 设置(在 docker 上构建服务器映像时)。它是一个只读的 ssh 密钥。

这是一个遗留应用程序,所以真正让我担心的是,通过一些 php 漏洞利用,有人可以在没有 github 的情况下执行 exec。并从那里升级以获得对 repo 或更糟的读取访问权限。

问题真的是,使用 webhook 更新 Web 应用程序的最佳实践是什么

【问题讨论】:

标签: php git security github devops


【解决方案1】:

解决方案是允许 www-data 执行部署命令:

echo 'www-data ALL=(ALL) NOPASSWD: /var/my-cool-scripts/deploy.sh' | sudo EDITOR='tee -a' visudo

关于 php:

exec('sudo -n /var/my-cool-scripts/deploy.sh')

PS:其实用这个巧妙的技巧就知道执行没问题

$did_the_script_run_okay = exec('sudo -n /var/my-cool-scripts/deploy.sh') == "okay" || false;

deploy.sh 的最后一行:

echo "okay"

exec 命令返回命令回显的最后一行,所以我检查以确保完整执行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2021-09-01
    • 2021-07-07
    相关资源
    最近更新 更多