1

我正在尝试使用智能 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 一起使用。

我想我将所有文件的所有者和权限更改为正确的值(域用户,755),并且 suexec 不会抱怨其日志中的任何内容。

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

先感谢您。

4

1 回答 1

1

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

不幸的是,我上次检查时(面临同样的问题)mod_suexec没有环境变量的“白名单”配置旋钮,因此正确的方法是:

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

    好像你已经有一个了。

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

    那是,

    SetEnv GIT_PROJECT_ROOT /var/www/git/git_domain
    

    变成了

    export GIT_PROJECT_ROOT=/var/www/git/git_domain
    

    在脚本代码中。

如果您需要相同的虚拟主机配置文件在“正常”模式下工作,并且在指令mod_suexec块旁边对这个怪癖进行广泛评论,SetEnv建议下一个人让它们与放置在包装脚本中的任何内容保持同步。

mod_suexec可以在此处找到有关行为的更多详细信息。

于 2016-05-17T16:58:29.250 回答