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

git-http-backend, ro для всех, написать требующий пароль? (с lighttpd)

Я хотел бы предложить доступ только для чтения к моим репозиториям GIT для всех (т.е. имя пользователя и пароль не требуются), но требовать аутентификации для записи. В git-http-backend страница руководства предполагает, что это возможно путем сопоставления с местоположением ^/git/.*/git-receive-pack$. Для Apache 2.x это будет выглядеть так:

<LocationMatch "^/git/.*/git-receive-pack$">
    AuthType Basic
    AuthName "Git Access"
    Require group committers
    ...
</LocationMatch>

Сейчас я использую lighttpd, но перевод приведенного выше не должен вызвать проблем. За исключением того, что мой журнал доступа предполагает, что все вышесказанное все равно не сработает. Это то, что я вижу, когда выполняю git push:

192.168.1.84 tracsrv.local - [06/Apr/2013:20:00:20 +0200] "GET /git/foo.git/info/refs?service=git-receive-pack HTTP/1.1" 403 5 "-" "git/1.8.2"

Похоже, мне нужно сопоставить строку запроса. Для легкого я пробовал это:

$HTTP["querystring"] =~ "service=git-receive-pack" {
    $HTTP["url"] =~ "^/git" {
        cgi.assign = ( "" => "" )
        setenv.add-environment = (
            "GIT_PROJECT_ROOT" => "/srv/git",
            "GIT_HTTP_EXPORT_ALL" => ""
        )

        auth.backend = "plain"
        auth.backend.plain.userfile = "/srv/tracprjs/trac.plain"
        auth.require = (
            "/" => (
                "method" => "basic",
                "realm" => "trac",
                "require" => "valid-user"
                )
            )
    }
}

$HTTP["url"] =~ "^/git" {
    cgi.assign = ( "" => "" )
    setenv.add-environment = (
        "GIT_PROJECT_ROOT" => "/srv/git",
        "GIT_HTTP_EXPORT_ALL" => ""
    )
}

Пароль не требуется для git fetch и это требуется для git push. Однако git push на самом деле не удается. Любые указания о том, как этого добиться?

Я нашел рабочую конфигурацию с помощью людей из списка рассылки git: http://www.spinics.net/lists/git/msg203744.html