Назад | Перейти на главную страницу

locationmatch с git-receive-pack не работает

Я пытаюсь настроить git-http-backend на своем сервере apache2. Прямо сейчас он работает с suexec, оболочкой и всем остальным, но без ограничений. Я могу тянуть и толкать.

Теперь я хотел включить раздел для ограничения разрешений push:

<LocationMatch "^/git/.*/git-receive-pack$">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /var/www/vhosts/librepdm.alitecs.de/users
    Require user alexander
</LocationMatch>

Пользовательский файл на месте и заполнен. Это говорит мой apache access_log:

93.95.132.202 - - [28/Mar/2012:15:23:18 +0200] "GET /git/test.git/info/refs?service=git-receive-pack HTTP/1.1" 403 357 "-" "git/1.7.8.msysgit.0"
93.95.132.202 - - [28/Mar/2012:15:23:18 +0200] "GET /git/test.git/info/refs HTTP/1.1" 200 331 "-" "git/1.7.8.msysgit.0"
93.95.132.202 - - [28/Mar/2012:15:23:18 +0200] "GET /git/test.git/HEAD HTTP/1.1" 200 341 "-" "git/1.7.8.msysgit.0"
93.95.132.202 - - [28/Mar/2012:15:23:22 +0200] "PROPFIND /git/test.git/ HTTP/1.1" 405 536 "-" "git/1.7.8.msysgit.0"

и это мой error_log

[Wed Mar 28 15:23:18 2012] [error] [client 93.95.132.202] Service not enabled: 'receive-pack'

Хорошо, подсказка хороша, если я включаю http.recievepack в репо, он работает, НО, если я не сообщаю учетные данные в URL-адресе, я снова получаю сообщение об ошибке, И я не хочу его активировать. Я попробовал кое-что еще. Я отредактировал LocationMatch следующим образом:

<LocationMatch "^/git/.*$">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /var/www/vhosts/librepdm.alitecs.de/users
    Require user alexander
</LocationMatch>

Я удалил "git-recieve-pack" из регулярного выражения. И сюрприз, что теперь все защищено, также вытаскивает, НО, если я не сообщаю свои учетные данные в URL-адресе, TortoiseGIT запрашивает у меня пользователя и пароль И запускает работу без установки http.recievepack в значение true. Журнал apache немного отличается:

93.95.132.202 - - [28/Mar/2012:15:46:16 +0200] "GET /git/test.git/info/refs?service=git-receive-pack HTTP/1.1" 401 691 "-" "git/1.7.8.msysgit.0"
93.95.132.202 - - [28/Mar/2012:15:46:20 +0200] "GET /git/test.git/info/refs?service=git-receive-pack HTTP/1.1" 401 691 "-" "git/1.7.8.msysgit.0"
93.95.132.202 - alexander [28/Mar/2012:15:46:20 +0200] "GET /git/test.git/info/refs?service=git-receive-pack HTTP/1.1" 200 466 "-" "git/1.7.8.msysgit.0"
93.95.132.202 - alexander [28/Mar/2012:15:46:21 +0200] "POST /git/test.git/git-receive-pack HTTP/1.1" 200 380 "-" "git/1.7.8.msysgit.0"

Если я сравниваю это с первым, первый вызов доступа отличается. В первой части указано 403 - неавторизованный, но у меня не спрашивали учетные данные, и это не помогает передавать в URL-адресе. Во втором - 401, что хорошо.

Итак, у меня вопрос: почему вход в систему работает, если я защищаю все местоположение, а не если я хочу только безопасное нажатие? Команды get идентичны, но меня почему-то не просят ввести логин. IMHO, это проблема не git, TortoiseGT или mysysgit, а apache ...

С уважением, Александр

взглянуть на запрос

/git/test.git/info/refs?service=git-receive-pack

Больше не совпадало <LocationMatch "^/git/.*/git-receive-pack$"> так как service=git-receive-pack параметр, а не местоположение (URI)

Я обновил свою конфигурацию следующим образом:

  <Location /public >

 SetEnv CGIT_CONFIG /srv/git/etc/cgitrc-public
 SetHandler cgi-script
 Options +ExecCGI

 RewriteCond %{QUERY_STRING} service=git-receive-pack
 RewriteRule .* - [E=AUTHREQUIRED:yes]

 AuthzLDAPAuthoritative Off
 AuthLDAPURL "ldap://myldap.mycorp.com/dc=mycorp,dc=com?mailNickname"
 AuthLDAPBindDN "ldapaccount"
 AuthLDAPBindPassword password
 AuthType Basic
 AuthName "MyCorp LDAP Protected Area"
 require valid-user