我尝试使用智能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不会在其日志中抱怨任何内容。
谁能告诉我哪里做错了什么?
提前谢谢。
答案 0 :(得分:1)
这很简单:mod_suexec
在运行目标程序之前擦除所有环境变量,因此所有SetEnv
指令都没有效果。
不幸的是,我最后一次检查(遇到同样的问题)mod_suexec
没有&#34;白名单&#34;环境变量的配置旋钮,所以正确的方法是:
创建一个脚本包裹您的实际git-http-backend
。
好像你已经有了。
使用shell SetEnv
内置来重新制定所有相关的export
指令。
即,
SetEnv GIT_PROJECT_ROOT /var/www/git/git_domain
becames
export GIT_PROJECT_ROOT=/var/www/git/git_domain
在脚本代码中。
如果您需要相同的虚拟主机配置文件,则可以在&#34; normal&#34;模式并在mod_suexec
下对你的SetEnv
指令块旁边的这个怪癖进行了广泛的评论,建议下一个人让它们与包装脚本中的内容保持同步。
有关mod_suexec
行为的更多详细信息,请here。