Ich möchte Git-Repository über "Smart" HTTP, auf die ich nur schieben kann, aber jemand (oder jemand mit Account) klonen/holen von haben.Wie kann ich anonymen Lesezugriff (Pull), aber authentifizierten Schreibzugriff (Push) auf ein Git-Repository über http aktivieren?
Im git-http-backend(1) Manpage man die folgende Beispielkonfiguration für Apache-Webserver finden:
Stellen Sie sicher, mod_cgi, mod_alias und mod_env aktiviert sind, stellen GIT_PROJECT_ROOT (oder DocumentRoot) entsprechend, und erstellen Sie eine Script auf die CGI:
SetEnv GIT_PROJECT_ROOT /var/www/git SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
anonymen Lesezugriff zu aktivieren, aber authentifizierten Schreibzugriff, eine Zulassung mit einer Location Richtlinie:
<LocationMatch "^/git/.*/git-receive-pack$"> AuthType Basic AuthName "Git Access" Require group committers #... </LocationMatch>
Leider funktioniert diese Konfiguration nicht. Ich kann Abruf-/Klon-Repository ohne Probleme, ohne authenthication zu erfordern, aber drängen versagt:
$ git push origin master
error: Cannot access URL http://localhost/git/test.git/, return code 22
fatal: git-http-push failed
Prüfungs error.log
von Apache Web-Server nicht hilft:
[...] Service not enabled: 'receive-pack' [...] Request not supported: '/var/www/git/test.git/'
Die access.log
sagt uns, dass git push
zuerst verwendet die GET-Methode unter /git/test.git/info/refs?service=git-receive-pack
abfragebasierte URL, die nicht von der LocationMatch-Direktive abgedeckt wird:
[...] "GET /git/test.git/info/refs?service=git-receive-pack HTTP/1.1" 403 304 "-" "git/1.7.10.4" [...] "GET /git/test.git/info/refs HTTP/1.1" 200 267 "-" "git/1.7.10.4" [...] "GET /git/test.git/HEAD HTTP/1.1" 200 337 "-" "git/1.7.10.4" [...] "PROPFIND /git/test.git/ HTTP/1.1" 404 250 "-" "git/1.7.10.4"
(In den folgenden Zeilen geht es um einen "dummen" WebDAV-basierten HTTP-Push - ist es möglich, diesen Fallback zu deaktivieren?).
Vorerst verwende ich die folgende Lösung: I gültige erfordern sowohl für Abruf- und push (unter Verwendung von modifizierten Konfiguration von „Authentifizierung für Lese- und Schreibvorgänge“ example in git-http-backend(1) -Manpage) und Filterung der Push-to-Single-User-via pre-receive
hook durch Untersuchung REMOTE_USER
Umgebungsvariable.
können Sie schreiben (oder Verwendung) einen Haken, der Anmeldeinformationen (Umgebungsvariablen) und verwerfen unerwünschte Schübe überprüft. Sie können die Dinge auch auf diese Weise einschränken (zB erlauben Sie Pushs auf "devel", aber nur bestimmte Benutzer zu "master") –
@Vi .: Ich weiß, das ist was ich in meiner _ "Fallback" _ Lösung mache. .. aber meine Fallback-Lösung benötigt 'valid-user', also ist es nicht wirklich anonymes Lesen (fetch). –
@ JakubNarębski oh ... meine Lösung benötigt auch 'valid-user', wie aktuell konfiguriert. Sie könnten 'REMOTE_USER' jedoch auf einen Dummy-Wert in Ihrem anonymen Zugriffsbereich setzen. Da 'all
VonC