HTTP Authentifikation in Gerrit

Was ist Gerrit?

„Gerrit is a web based code review system, facilitating online code reviews for projects using the Git version control system.“ 1 Immer öfter wird Git statt SVN (Subversion) verwendet und immer wichtiger wird ein ordentliches Review. Gerrit verbindet diese beiden Punkte.

Der Workflow ist nicht sonderlich kompliziert: Ein Push über Git wird zunächst auf einer – nennen wir es mal – Seitenablage abgelegt. Dort hat nun ein Reviewer die Möglichkeit die Änderungen zu prüfen. Falls etwas zu korrigieren ist, lässt sich dies über die Weboberfläche von Gerrit diskutieren. Auch das Akzeptieren der Änderungen und das damit verbundene Hinzufügen der Änderungen zum Hauptzweig, wird über diese Weboberfläche vorgenommen.

Möglichkeiten der Authentifikation

Auf der Weboberfläche von Gerrit kann man sich über mehrere Wege anmelden. Eine Möglichkeit ist OpenId. Besteht schon ein Account bei Yahoo oder Google, so kann dieser Verwendet werden, um sich bei Gerrit anzumelden. Abhängig von firmeninternen Richtlinien eignet sich diese Authentifikation nicht immer sonderlich gut. Jeden Mitarbeiter aufzufordern sich einen Account bei Yahoo oder Google zu erstellen ist auch nicht immer möglich. In diesem Falle lässt sich die HTTP Authentifikation verwenden.

Für die HTTP Authentifikation sind zwei Dateien besonders wichtig. Zum einen die Datei gerrit.config und die Konfigurationsdatei des Webservers (beispielsweise httpd.conf). Da sich manche Nutzer von Gerrit mit der Konfiguration dieser beiden Systeme schwer tun, habe ich nachfolgend eine mögliche Konfiguration erstellt, die entsprechend der eigenen Bedürfnisse angepasst werden kann.

Konfiguration von Gerrit

Der Code-Ausschnitt zeigt die Datei gerrit.conf, die üblicherweise imVerzeichnis etc von Gerrit liegt. Einige Attribute, wie beispielsweise der Typ der Datenbank oder der Pfad von javaHome, können natürlich abweichen. Wichtig sind aber die Attribute [auth] und [httpd].

[gerrit]
	basePath = git
[database]
	type = h2
	database = db/ReviewDB
[auth]
	type = HTTP
[sendemail]
	smtpServer = localhost
[container]
	user = root
	javaHome = /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre
[sshd]
	listenAddress = *:29418
[httpd]
	listenUrl = proxy-http://192.168.12.145:8081/
[cache]
	directory = cache

Durch diese Konfiguration erwartet Gerrit die Authentifikation durch den HTTP Server. Das bedeutet, dass der direkte Aufruf der Gerrit-Seite keine Möglichkeiten für einen Login bietet. Es muss zunächst die Authentifikation durch den Server geschehen, der dann eine Weiterleitung an Gerrit vornimmt.

Konfiguration von Apache

Der folgende Code-Ausschnitt zeigt den entscheidenden Teil der httpd.conf. Dieser Teil kann der bestehenden Konfiguration einfach angefügt werden. Erläuternde Kommentare beginnen mit einer Raute (#). Wichtig ist hier die Zeile 15. Denn in der Datei gerritpass befinden sich die Benutzernamen und Passwörter. Diese Datei kann mit einem simplen Generator wie dem .htaccess Generator erstellt werden.

# VirtualHost mit Port 8082
<VirtualHost *:8082>
	# Gibt den Host weiter
	ProxyPreserveHost On
	# Gateway zu Gerrit (Port 8081)
	ProxyPass / http://192.168.12.145:8081/
	# ServerName
	ServerName 192.168.12.145

    # Für Location / gelten folgende Bedingungen
    <Location /> 
	    AuthType Basic  
        AuthName "Gerrit Code Review"  
        # Passwörter liegen unter /etc/httpd/passwd/gerritpass
        AuthUserFile /etc/httpd/passwd/gerritpass
	    Require valid-user        	
	    Order Deny,Allow  
        Allow from all    
	</Location> 
</VirtualHost>

Ist die Konfiguration abgeschlossen, so können Gerrit und der HTTP Server neu gestartet werden, um die Konfiguration zu übernehmen. Ruft man nun die Adresse mit Port 8082 auf, so wird durch den HTTP Server der Benutzername und das Passwort geprüft. War der Login erfolgreich, leitet der HTTP Server auf Port 8081, wo sich Gerrit befindet, weiter.

Quellen