使用智能HTTP和suexec的Git:找不到存储库

时间:2016-05-17 15:01:03

标签: git suexec smart-http

我尝试使用智能HTTP在我的一台服务器上安装自己的Git存储库。

它适用于没有suexec的虚拟服务器,但在我的生成服务器上没有启用suexec。当我尝试克隆或推送它时说:

  

致命:存储库' http://domain.tld/git/project/'找不到

Apache配置如下:

<VirtualHost *:80>
    Options -Indexes +ExecCGI

    ServerAdmin user@domain.tld

    DocumentRoot /var/www/domain.tld

    ServerName domain.tld

    Alias /fcgi-bin/ /var/www/domain.tld/fcgi-bin/
    SuexecUserGroup domainuser domainuser

    ########## GIT ##########

    SetEnv GIT_PROJECT_ROOT /var/www/git/git_domain
    SetEnv GIT_HTTP_EXPORT_ALL
    SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
    ScriptAlias /git/ /var/www/git/git_domain/git-http-backend/

    Alias /git /var/www/git/git_domain
    <Directory /usr/lib/git-core>
        Options +ExecCGI +SymLinksIfOwnerMatch
        AllowOverride All
        Require all granted
    </Directory>

    <Directory /var/www/git/git_domain>
        Options -Indexes -SymLinksIfOwnerMatch
        AllowOverride All
        Require all granted
    </Directory>

    ########## PROJECT DIRS HTPASS ##########

        <LocationMatch "^/git/project1/.*$">
#            DAV on
            AuthType Basic
            AuthName "project1"
            AuthUserFile /var/www/git/gitpass/domain/project1
            Require valid-user
        </LocationMatch>

    ########## /PROJECT DIRS HTPASS ##########
    ########## /GIT ##########

如果我禁用

  

ScriptAlias / git / / var / www / git / git_domain / git-http-backend /

我可以克隆,但可以推送,因为在这种情况下它可以与DAV配合使用。

我想我改变了所有文件&#39;所有者和权限的权限(domainuser,755)和suexec不会在其日志中抱怨任何内容。

谁能告诉我哪里做错了什么?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

这很简单:mod_suexec在运行目标程序之前擦除所有环境变量,因此所有SetEnv指令都没有效果。

不幸的是,我最后一次检查(遇到同样的问题)mod_suexec没有&#34;白名单&#34;环境变量的配置旋钮,所以正确的方法是:

  1. 创建一个脚本包裹您的实际git-http-backend

    好像你已经有了。

  2. 使用shell SetEnv内置来重新制定所有相关的export指令。

    即,

    SetEnv GIT_PROJECT_ROOT /var/www/git/git_domain
    

    becames

    export GIT_PROJECT_ROOT=/var/www/git/git_domain
    

    在脚本代码中。

  3. 如果您需要相同的虚拟主机配置文件,则可以在&#34; normal&#34;模式并在mod_suexec下对你的SetEnv指令块旁边的这个怪癖进行了广泛的评论,建议下一个人让它们与包装脚本中的内容保持同步。

    有关mod_suexec行为的更多详细信息,请here