【问题标题】:Github Service Hooks: post-receive via PHPGithub 服务挂钩:通过 PHP 进行后接收
【发布时间】:2013-02-19 17:37:45
【问题描述】:

我在通过服务挂钩部署时遇到了一些问题,我认为这是权限问题,但我会先说明所有事实。

服务器: Arch Linux 上带有 PHP-FPM 的 Nginx

Nginx 以 http 用户身份运行,并且拥有要由脚本更新的目录的所有权。我还为 HTTP 创建了一个 SSH 密钥并将其安装在 GitHub 上。其他命令似乎可以通过 shell_exec 正常工作,但我无法完成重置或拉动完成,也没有任何输出返回。任何帮助,将不胜感激。谢谢!

挂钩脚本(PHP):

if ( isset($_SERVER["REMOTE_ADDR"]) )    { 
    $requestIP = $_SERVER["REMOTE_ADDR"]; 
} else if ( isset($_SERVER["HTTP_X_FORWARDED_FOR"]) )    { 
    $requestIP = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
} else if ( isset($_SERVER["HTTP_CLIENT_IP"]) )    { 
    $requestIP = $_SERVER["HTTP_CLIENT_IP"]; 
}

// GitHub post-receive IPs
$validIPs = array(
    '207.97.227.253',
    '50.57.128.197',
    '180.171.174.178'.
    '50.57.231.61',
    '54.235.183.49',
    '54.235.183.23',
    '54.235.118.251',
    '54.235.120.57',
    '54.235.120.61',
    '54.235.120.62'
);

if(($payload = $_REQUEST['payload']) && in_array($validIps, $requestIP)) {
    $payload = json_decode($payload);
    $repository = $payload->repository->name;
    $docRoot = '/var/www/'.escapeshellcmd($repository);

    if(is_dir($docRoot)) {
        $command = 'cd '.$docRoot.' && git reset --hard HEAD && git pull';
        $output = shell_exec( $command );
        file_put_contents("hook.log", "$repository: $output\r\n", FILE_APPEND);     
    }
}

【问题讨论】:

  • 我可以将.; rm -rf $HOME 作为错误的回购名称发送到您的服务器,这可能会造成一些损害。逃跑~
  • 是的,我只是在锁定它之前让它工作。我将限制对 github 的访问并转义有效负载。
  • 我编辑了脚本以检查有效 IP、变量是否存在以及存储库是否存在于我的服务器上。还转义了输入。

标签: php git github nginx git-post-receive


【解决方案1】:

你应该检查你的命令运行的环境。git可能不在环境使用的路径中。

如果是这种情况,您可以使用完整路径名运行 git。

【讨论】:

  • 我可以毫无问题地运行 git status 。只有重置和拉动似乎失败了。
  • 你能找出你的命令运行的用户ID是什么(“id”命令),$HOME的值是多少(echo $HOME),它可能没有从正确的地方读取密钥
  • id: uid=33(http) gid=33(http) groups=33(http) $HOME: /srv/http 这两个似乎都是预期值。
  • 您是否尝试过以 http 用户身份运行 git 命令?获得一个外壳(sudo su - http 应该为您提供一个接近 php 运行环境的环境)您是如何在 /var/www/... 中进行初始克隆的?谁拥有 .git 目录?
  • 就是这样。我的 .git 目录不属于 http。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
相关资源
最近更新 更多