我正在尝试在 apache2 服务器上安装 gitolite 3。因此我需要运行 拥有的 CGI 脚本git:git
。我实现此目的的配置(主要基于这) 是:
<VirtualHost myserver.com>
ServerName myserver.com
ServerAlias git
SuexecUserGroup git git
ScriptAliasMatch "(?x)^/(.*/(HEAD | info/refs | objects/(info/[^/]+ | [0-9a-f]{2}/[0-9a-f]{38} | pack/pack-[0-9a-f]{40}\.(pack|idx)) | git-(upload|receive)-pack))$" \
/srv/www/gitolite_suexec_wrapper.sh/$1
</VirtualHost>
我遇到的问题是,每当查询与我的 stript 别名正则表达式匹配时,客户端就会收到 403,并且我的 apache 错误日志(设置为调试级别)会告诉我以下内容:
client denied by server configuration: /srv/www/gitolite_suexec_wrapper.sh
我的 apache2 服务器有用户 wwwrun 和组 www。suexec 模块正在运行,因此我测试一切正常,如下所示:
su -c "/usr/sbin/suexec2 true" wwwrun
suexec policy violation: see suexec log for more details
因此该用户可以启动 suexec。之前我的权限有误,/srv/www/gitolite_suexec_wrapper.sh
并且有几行已登录/var/log/apache2/suexec.log
,现在我什么都没有了,所以我猜我的权限在 suexec 和包装脚本方面设置正确。
我仍然不确定这个脚本是否应该由我需要 apache2 运行的脚本的所有者拥有。wwwrun:www
我猜git:git
suexec 帮助应该是这样的wwwrun:www
,无论如何我都尝试了,但都没有用。
su -c "/srv/www/gitolite_suexec_wrapper.sh" wwwrun
给出一个输出,所以我认为我的权限在这个脚本上设置正确。
我还应该检查什么?我做错了什么?
在此先感谢您的帮助!
答案1
好的,我找到了解决方案,我必须像这样授予对脚本文件的访问权限(在同一个虚拟主机中):
<Directory "/srv/www">
<Files "gitolite_suexec_wrapper.sh">
Order allow,deny
Allow from all
</Files>
</Directory>
然后就好了。