SVN Authentifizierung und Autorisierung

Transcrição

SVN Authentifizierung und Autorisierung
Bachelor Thesis
SVN Authentifizierung und
Autorisierung
Authentifizierung und Autorisierung von SVN-Benutzern
via Active Directory und OpenLDAP
Gérard Bieli, Christian Haller
Dozent:
Prof. Dr. Peter Gysel
Betreuer:
Matthias Krebs, Beat Walti
Windisch, 13. August 2009
Inhaltsverzeichnis
1. Ausgangslage und Problemstellung
1.1. IST-Zustand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Problemstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
1
2. Konzept
2.1. Anforderungen . . . . . . . . . . .
2.2. Lösungsvarianten . . . . . . . . . .
2.2.1. Variante 1: Shibboleth . . .
2.2.2. Variante 2: Direkte Abfrage
2.3. Entscheid . . . . . . . . . . . . . .
.
.
.
.
.
2
2
3
3
7
9
3. Abweichung vom Konzept
3.1. Modul mod authn alias anstelle von Penrose . . . . . . . . . . . . . . . . . . . . . . .
10
10
4. Implementation
4.1. Funktionsweise . . . . . . . . . . . . . .
4.2. Konfiguration . . . . . . . . . . . . . . .
4.2.1. Verwendete Hard- und Software .
4.2.2. SVN . . . . . . . . . . . . . . . .
4.2.3. Apache . . . . . . . . . . . . . .
4.2.4. Datenbank . . . . . . . . . . . .
4.3. Ablauf und Zusammenspiel im Detail . .
4.3.1. Client-Anfrage . . . . . . . . . .
4.3.2. Authentifizierung . . . . . . . . .
4.3.3. Autorisierung . . . . . . . . . . .
4.3.4. Server-Antwort . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
11
11
12
12
12
13
16
19
19
20
25
25
. .
. .
. .
der
. .
. . . .
. . . .
. . . .
LDAP
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . .
. . . . . . . .
. . . . . . . .
Verzeichnisse
. . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5. Probleme
5.1. Penrose . . . . . . . . . . . . . . . . . . . . . .
5.1.1. Probleme mit Umlauten . . . . . . . . .
5.2. Apache . . . . . . . . . . . . . . . . . . . . . .
5.2.1. Kompilieren des Moduls mod authz svn
5.2.2. SSL Verbindung zum FHNW AD . . . .
. .
. .
. .
db
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
27
27
27
31
31
31
6. Tests
6.1. Testumgebung .
6.2. Allgemeines . . .
6.3. Authentifizierung
6.4. Autorisierung . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
34
34
35
35
35
7. Ausblick
7.1. SVN Verwaltungsapplikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.1. Use Case Diagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
36
36
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
I
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Inhaltsverzeichnis
Inhaltsverzeichnis
7.1.2. GUI Entwurf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A. Anhang: Scripts und Konfigurationen
A.1. SQL: Erstellung der Datenbank .
A.2. SQL: Beispieldaten . . . . . . . .
A.3. SQL: Datenbankabfrage . . . . .
A.4. Bash: Buildscript Apache Modul
A.5. Konfigurationsdatei: Apache . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
38
40
41
42
45
46
46
B. Anhang: Pflichtenheft
49
Literaturverzeichnis
50
Bachelor Thesis
II
SVN Authentifizierung und Autorisierung
Abbildungsverzeichnis
2.1.
2.2.
2.3.
2.4.
Ablauf
Ablauf
Ablauf
Ablauf
der
der
der
der
Shibboleth Authentifizierung . . . . . . . . . . . . . . . . . .
Shibboleth DAV Basic Authentifizierung . . . . . . . . . . .
Shibboleth DAV Basic Authentifizierung mit Zwischenschicht
LDAP SVN Authentifizierung und Autorisierung . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
4
5
7
4.1.
4.2.
4.3.
4.4.
4.5.
4.6.
4.7.
4.8.
Ablauf der Authentifizierung und
ERD . . . . . . . . . . . . . . . .
Tabellen der Datenbank . . . . .
Client Request . . . . . . . . . .
EDU-Abfrage . . . . . . . . . . .
ADM-Abfrage . . . . . . . . . . .
OpenLDAP-Abfrage . . . . . . .
Server Response . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
16
16
19
20
22
23
25
5.1. Penrose Testumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2. Capture 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3. Capture 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
29
30
6.1. Verwendete Testumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
7.1. Use Case Diagramm der Applikation . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2. Repositoryverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3. Benutzerverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
38
39
Autorisierung
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
III
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Zusammenfassung
Das Ziel dieser Bachelor Arbeit war es, eine Lösung zu finden, so dass sich Benutzer der SVNRepositories des Departements IMVS mit dem Benutzernamen und Passwort ihres Active Directory
Kontos anmelden können. Zudem sollte eine vernünftige Zugriffsregelung für die einzelnen Benutzer
gefunden und implementiert werden. In diesem Dokument wird die Ausgangslage im Detail analysiert
und verschiedene Lösungswege evaluiert. Die gewählte Lösung wird genauer betrachtet und beschrieben, wobei die Abweichungen vom Konzept ebenfalls erklärt und begründet werden.
1. Ausgangslage und Problemstellung
1.1. IST-Zustand
Die SVN-Repositories des Departements IMVS können zur Zeit nur auf sehr umständliche Art verwaltet werden. Um Benutzer authentifizieren zu können – also um sicherzustellen, dass ein Benutzer
derjenige ist, der er angibt zu sein – müssen die Benutzerdaten in einen eigens dafür eingerichteten
OpenLDAP-Server eingetragen werden. Es müssen also sämtliche Benutzer, auch die im Active Directory der FHNW erfassten, manuell in das OpenLDAP Directory eingetragen werden. Eine Autorisierung
im eigentlichen Sinn wird gar nicht durchgeführt. Es wird lediglich überprüft, ob der angemeldete
Benutzer in der LDAP Gruppe für das entsprechende Repository ist. D.h. die LDAP Struktur ist so
aufgebaut, dass einzelne Benutzer in Gruppen, passend zu den jeweiligen Repositories, erfasst sind.
In der Apache Konfiguration wird dann für jedes Repository eine Location angelegt. Innerhalb dieser
Location wird mittels der Require ldap-group Direktive spezifiziert, in welcher LDAP Gruppe der
Benutzer sein muss, um sich erfolgreich authentifizieren zu können. Um die Apache Konfigurationsdateien synchron zur LDAP Struktur zu halten, läuft regelmässig ein relativ komplexes, schwer zu
wartendes Bash Script ab. Dieses erstellt anhand der LDAP Struktur die einzelnen Locations für die
Repositories. Der Nachteil hier ist, dass jedesmal der Apache Server neugestartet werden muss, sobald
das Script durchgelaufen ist, um die neue Konfiguration zu übernehmen.
1.2. Problemstellung
Dieser Aufbau ist für die Verwalter der Repositories nicht zufrieden stellend, da sämtliche Benutzer manuell in den OpenLDAP-Server eingetragen werden müssen, obwohl sämtliche schulinternen
Benutzer bereits im Active Directory der FHNW vorhanden wären.
Deshalb soll eine Gesamtlösung gefunden werden, welche die Benutzerdaten für schulinterne Benutzer
aus dem Active Directory der FHNW ausliest (damit die Benutzer sich mit dem üblichen Benutzernamen und Passwort anmelden können) und die Berechtigungen in einer Datenbank speichert. Zusätzlich
sollen externe Benutzer – welche nicht im Active Directory der FHNW vorhanden sind – erfasst und
gespeichert werden können.
1
2. Konzept
Dieses Kapitel beinhaltet die möglichen Lösungsvarianten zur Authentifizierung und Autorisierung
von SVN Repository Benutzern.
Zusammengefasst enthält dieses Kapitel die folgenden zwei Lösungsvarianten:
• Authentifizierung und Autorisierung via Shibboleth und die Verwaltung von Gastbenutzern über
den Virtual Home Organization Service von Switch.
• Authentifizierung der Benutzer auf Basis von drei LDAP Servern (EDU, ADM und OpenLDAP
Verzeichnisserver) zusammengefasst in einem virtuellen Directory Server und die Autorisierung
über eine separate SQL Datenbank.
2.1. Anforderungen
Die Lösung soll folgende Anforderungen abdecken:
• Im Active Directory erfasste Benutzer sollen sich via SVN Client authentifizieren können.
• Gastbenutzer, welche nicht im Active Directory sondern separat erfasst sind, sollen sich ebenfalls
via SVN Client authentifizieren können.
• Autorisierung der Benutzer, d.h. Vergabe von Berechtigungen auf Repository Ebene, allenfalls
auch auf Unterordern.
• Auf das Active Directory darf nur lesend zugegriffen werden.
Für detailliertere Informationen bezüglich den Anforderungen wird auf das Pflichtenheft verwiesen.
2
Kapitel 2. Konzept
2.2. Lösungsvarianten
2.2. Lösungsvarianten
Dieser Abschnitt soll die verschiedenen Lösungsvarianten konzeptionell erläutern und die Vor- und
Nachteile aufzeigen.
2.2.1. Variante 1: Shibboleth
Die Variante Shibboleth wird in diesem Kapitel aufgrund der ursprünglichen Aufgabenstellung erläutert. Es geht in diesem Abschnitt darum, aufzuzeigen, was die Umsetzung dieser Variante für das
Projekt bedeutet.
Was ist Shibboleth?
Shibboleth ist ein vom Internet2/MACE entwickeltes Verfahren zur verteilten Authentifizierung und
Autorisierung für Webanwendungen und Webservices. Das Konzept von Shibboleth sieht vor, dass der
Benutzer sich nur einmal bei seiner Heimateinrichtung authentisieren muss, um ortsunabhängig auf
Dienste oder lizenzierte Inhalte verschiedener Anbieter zugreifen zu können (engl. Single Sign-On).
Shibboleth basiert auf einer Erweiterung des Standards SAML.1
Allgemeines zu Shibboleth
Abbildung 2.1.: Ablauf der Shibboleth Authentifizierung
1
http://de.wikipedia.org/wiki/Shibboleth (Internet)
Bachelor Thesis
3
SVN Authentifizierung und Autorisierung
Kapitel 2. Konzept
2.2. Lösungsvarianten
In Abbilung 2.1 ist grob der Ablauf der Shibboleth Authentifizierung dargestellt und zwar mit vollem
Funktionsumfang. Dazu gehört die Auswahl der Home Organization über den Where Are You From
”
Service“(1), die anschliessende Weiterleitung an den Identity Provider der Organisation (2) und nach
erfolgter Eingabe der Benutzerdaten und der erfolgreichen Authentifizierung die Weiterleitung auf die
effektive Ressource (3). Man sieht hier schon das primäre Einsatzgebiet der Shibboleth Authentifizierung, nämlich Single Sign On für Web Applikationen.
Authentifizierung interner Benutzer
Da nun aber der SVN Client (z.B. das Subversive SVN Plugin für Eclipse) weder die ”Where Are You
From” noch die Login Eingabemaske darstellen kann, ist hier eine abgespeckte Variante der Shibboleth
Authentifizierung gefragt. Switch.ch hat eine solche Lösung implementiert, welche gemäss Abbildung
2.2 funktioniert. Diese Art der Shibboleth Authentifizierung nimmt die Benutzerdaten über die HTTP
Basic Authentifizierung an und leitet den Benutzer anhand dieser Daten entweder auf die gewünschte
Webseite um (in diesem Fall eine WebDAV Seite wie sie auch für SVN verwendet wird) oder verweigert
den Zugriff.
DAV Client mit
Basic Auth
2
4
Login Daten
HTTPS
Datenaustausch (SSL)
1
HTTP Redirect (SSL)
3
User's Home
Org (IdP)
Resource
(DAV SVN)
Abbildung 2.2.: Ablauf der Shibboleth DAV Basic Authentifizierung
Kernstück der Shibboleth Authentifizierungsmethode ist die Umleitung des Benutzers nach Eingabe
der Login Daten und die Abspeicherung der Zugriffsberechtigung in Session Cookies. Genau diese Umleitung und die Speicherung der Cookies stellen das Hauptproblem im Zusammenhang mit den SVN
Clients dar. Die meisten SVN Clients, darunter auch das äusserst umfangreiche Eclipse Subversive
SVN Plugin, unterstützen weder HTTP Redirects noch Session Cookies.
Bachelor Thesis
4
SVN Authentifizierung und Autorisierung
Kapitel 2. Konzept
2.2. Lösungsvarianten
Um die HTTP Redirects abzufangen und die Session Cookies abzuspeichern, sind zwei Lösungsmöglichkeiten denkbar. Entweder wird das bestehende Shibboleth Apache Modul so angepasst, dass die
HTTP Redirects abgefangen werden oder es wird eine Zwischenschicht in Form eines transparenten
Shibboleth Proxy Servers oder eines eigenen Apache Moduls entwickelt, welche die HTTP Redirects
abfängt und die Session Cookies abspeichert. Abbildung 2.3 zeigt diese Variante grafisch.
SVN Client mit
Basic Auth
Login Daten
1
4
Login Daten
Datenaustausch
1
Zwischenschicht
(Proxy oder Apache Modul)
Session Cookie
Store
2
4
HTTPS
Datenaustausch (SSL)
HTTP Redirect (SSL)
3
User's Home
Org (IdP)
Resource
(DAV SVN)
Abbildung 2.3.: Ablauf der Shibboleth DAV Basic Authentifizierung mit Zwischenschicht
Bachelor Thesis
5
SVN Authentifizierung und Autorisierung
Kapitel 2. Konzept
2.2. Lösungsvarianten
Authentifizierung externer Benutzer
Für Benutzer, die nicht im Active Directory der FHNW erfasst sind, aber dennoch auf ein SVN
Repository zugreifen können sollen, gibt es zwei Möglichkeiten für die Authentifizierung.
Eine Variante sieht vor, die externen Benutzer in der sog. Virtual Home Organization zu erfassen. Dabei
werden die Benutzer unabhängig vom Active Directory der FHNW erfasst, sind aber dennoch in der
Lage sich via Shibboleth zu authentifizieren. Nähere Details dazu unter [1]. Eine andere Möglichkeit ist
die Bereitstellung einer anderen URL für die externen Benutzer, sprich die Konfiguration einer weiteren
Apache Location mit einer LDAP Authentifizierung gegen den schon bestehenden OpenLDAP Server.
Autorisierung
Gemäss Recherchen und Tests lässt sich die Autorisierung über die Shibboleth XML Konfigurationsdateien auf dem Apache DAV SVN Server realisieren. Dabei wird angegeben, welcher Benutzer auf
welchen URL Teil Zugriff hat. Hier ist zu erwähnen, dass die bestehenden Apache Autorisierungsmodule nicht auf den Benutzernamen zugreifen können, da dieser nicht mitgeliefert wird. Das DAV SVN
Autorisierungsmodul kann somit nicht verwendet werden.
Listing 2.1 zeigt zur Autorisierung einen Codeausschnitt aus der Shibboleth XML Konfigurationsdatei.
Listing 2.1: Shibboleth XML Autorisierung
<RequestMapper type =”N a t i v e ”>
<RequestMap a p p l i c a t i o n I d =”d e f a u l t ”>
<Host name = ”1 4 7 . 8 6 . 9 . 1 3 4 ”>
<Path name=”/ s h i b b o l e t h / gruppe1 ” authType=”s h i b b o l e t h ”
r e q u i r e S e s s i o n =”t r u e ”>
<A c c e s s C o n t r o l >
<Rule r e q u i r e =”u i d ”>demouser </Rule>
</A c c e s s C o n t r o l >
</Path>
</Host>
</RequestMap>
</RequestMapper>
Bachelor Thesis
6
SVN Authentifizierung und Autorisierung
Kapitel 2. Konzept
2.2. Lösungsvarianten
2.2.2. Variante 2: Direkte Abfrage der LDAP Verzeichnisse
Ziel dieser Lösung ist die Nutzung der LDAP Funktionalität des Apache Servers. Der Apache Server
soll direkt über das LDAP Protokoll mit einem Directory Server kommunizieren, um den Benutzer
zu authentifizieren. Als solcher kommt hier ein virtueller Directory Server zum Einsatz, welcher die
Inhalte der verschiedenen LDAP Server (OpenLDAP, EDU Domain Controller und ADM Domain
Controller) zu einem gemeinsamen Directory zusammenfasst. Abbildung 2.4 zeigt den Ablauf der
Authentifizierung und Autorisierung, welche in den folgenden Kapiteln erläutert wird.
SVN
Repositories
Apache
hole Daten
aus Repo
DAV SVN
Modul
5
liefere Daten
6
Authz DB
SVN Modul
SVN Client
4
autorisiere
Benutzer
2
HTTP Basic Auth (SSL)
LDAP
Modul
Login Daten
Authorization
DB
3
authentifiziere
Benutzer
1
Active
Directory
Legende:
Virtual LDAP
Directory
(Proxy)
existierende Module
zu erstellendes bzw. anzupassendes Modul
OpenLDAP
Abbildung 2.4.: Ablauf der LDAP SVN Authentifizierung und Autorisierung
Authentifizierung interner und externer Benutzer
Mit den internen Benutzern sind diejenigen Benutzer gemeint, welche über einen FHNW Active Directory Account verfügen. Externe Benutzer sind Benutzer, welche nicht im Active Directory der Schule
erfasst sind, jedoch trotzdem auf die SVN Repositories zugreifen können sollen. Diese externen Benutzer sind in einem separaten, schon bestehenden OpenLDAP Server erfasst.
Der Benutzer gibt seine E-Mail Adresse und sein Passwort in die Eingabemaske des SVN Clients ein.
Diese Login Daten werden an den Apache Server, genauer an das LDAP Modul gesendet, und der
Benutzer wird über den virtuellen LDAP Server authentifiziert. Der virtuelle LDAP Server kombiniert
die beiden Benutzerverzeichnisse (Active Directory und OpenLDAP) zu einem virtuellen Directory. Es
wird nicht effektiv ein kombiniertes Directory erstellt. Die Abfragen werden vom virtuellen Directory
Server immer noch direkt an den entsprechenden Directory Server geschickt. Das Apache LDAP Modul kommuniziert also lediglich mit dem virtuellen Directory Server und dieser schickt die Anfrage an
die beiden Server (siehe Grafik 2.4 Schritt 3). Als virtueller Directory Server (Virtual LDAP Directory
Bachelor Thesis
7
SVN Authentifizierung und Autorisierung
Kapitel 2. Konzept
2.2. Lösungsvarianten
in der Grafik 2.4) wird der Penrose Server 1.2.4 eingesetzt (siehe [2]). Dies ist nicht die neuste Version von Penrose. Aktuell existiert die Version 2.0 als neuster Release. Tests mit dieser Version haben
jedoch gezeigt, dass diese weit entfernt von Stabilität und Zuverlässigkeit operiert. Bestenfalls kann
diese als Beta Version angesehen werden. Daher haben wir uns für die stabile Version 1.2.4 entschieden.
Listing 2.2 zeigt die DAV SVN Authentifizierungskonfiguration. Der Penrose Server läuft in dieser
Konfigurationsumgebung auf dem gleichen Server wie der Apache2 Webserver.
Listing 2.2: Apache SVN LDAP Authentifizierung
<L o c a t i o n / p e n r o s e >
DAV svn
SVNParentPath / data / t e s t R e p o s
# connection to penrose s e r v e r
AuthBasicProvider ldap
AuthType B a s i c
AuthzLDAPAuthoritative o f f
AuthName ”S V N P e n r o s e A u t h e n t i c a t i o n ”
AuthLDAPURL ”l d a p : / / l o c a l h o s t : 1 0 3 8 9 / ou=prod ,DC=edu ,DC=ds ,DC=fhnw ,
DC=ch ? m a i l ? sub ? ( o b j e c t C l a s s=u s e r ) ” NONE
AuthLDAPBindDN ”u i d=admin , ou=system ”
AuthLDAPBindPassword s e c r e t
r e q u i r e v a l i d −u s e r
</L o c a tio n >
Autorisierung
Nachdem der Benutzer erfolgreich authentifiziert wurde, erfolgt die Autorisierung. Als Grundlage für
die Autorisierung dient der vom SVN Client übermittelte Benutzername, was der angegebene E-Mail
Adresse entspricht. Schritt 4 in der Grafik 2.4 zeigt den Ablauf der Autorisierung. Es wird eine Anfrage
an die Authorization DB gestartet, wobei überprüft wird, ob der Benutzer auf den gewünschten SVN
Pfad Zugriff hat. Ist die Autorisierung erfolgreich, werden die angeforderten SVN Daten im Schritt 6
an den SVN Client gesendet.
Für die Kommunikation mit der Autorisierungs DB existiert das Modul mod authz svn db. Dieses
Modul ist jedoch noch nicht zu 100% fertiggestellt und wurde erst unter Free BSD erfolgreich getestet.
Hier muss evtl. noch etwas Aufwand betrieben werden, damit dieses auch unter Linux einwandfrei
läuft. Details zu diesem Modul sind unter [3] zu finden.
Bachelor Thesis
8
SVN Authentifizierung und Autorisierung
Kapitel 2. Konzept
2.3. Entscheid
2.3. Entscheid
Bevor der Entscheid zugunsten einer Lösung fiel, wurden die Kernkomponenten der beiden Varianten getestet. Bei der Variante Shibboleth gibt es technische Probleme. Es ist nicht möglich, ohne
HTTP Redirects und Session Cookies auszukommen. Beides wird von den meisten SVN Clients nicht
unterstützt. So müsste ein Shibboleth Proxy für die Authentifizierung programmiert werden. Die Programmierung dieses Proxies würde voraussichtlich aber alleine schon die ganze zur Verfügung stehende
Zeit für die Bachelor Thesis in Anspruch nehmen. Daher käme hier die Autorisierung zu kurz.
Der Entscheid fiel daher zugunsten der LDAP Variante. Diese Variante deckt die Authentifizierung
und die Autorisierung ab und ist im verfügbaren Zeitfenster realisierbar.
Bachelor Thesis
9
SVN Authentifizierung und Autorisierung
3. Abweichung vom Konzept
Dieses Kapitel geht auf die Änderungen gegenüber dem Konzept sowie deren Begründung ein.
3.1. Modul mod authn alias anstelle von Penrose
Penrose [2] ist ein Java basierter virtual directory server. Er erlaubt es mehrere verschiedene Quellen
von Daten (in unserem Fall Benutzer-Zugangsdaten) wie LDAP-Strukturen, Datenbanken, einfache
Textdateien und Webservices zusammenzufassen und diese als einzelne LDAP-Struktur wiederzugeben.
Eine Demonstration der kompletten Funktionalität ist unter [4] zu finden.
Für den Zweck dieser Arbeit wurde eine Zusammenfassung von zwei verschiedenen LDAP-Strukturen
(OpenLDAP und Active Directory) genutzt. Da Penrose aber einen sehr grossen Funktionsumfang
besitzt, ist die Übersichtlichkeit eher mässig und die Erstellung einer relativ simplen, virtuellen LDAPStruktur kompliziert.
Hinzu kommt, dass scheinbar das Penrose Studio nicht sehr sauber programmiert wurde, was dazu
führte, dass die Applikation des öfteren abstürzte, ohne die gemachten Änderungen zu speichern.
Aus diesen Gründen wurde das Apache-Modul mod authn alias [5] verwendet, auf welches uns Matthias Krebs aufmerksam gemacht hatte. Das Alias-Modul erlaubt die Authentifizierung gegen mehrere
Quellen (in unserem Fall LDAP-Strukturen) mit sogenannten Aliasen. Diese Aliase können dann mit
den Apache-Direktiven AuthBasicProvider oder AuthDigestProvider verwendet werden. Die Aliase
werden in der angegebenen Reihenfolge abgearbeitet.
10
4. Implementation
Dieses Kapitel beschreibt die einzelnen Komponenten der Gesamtlösung, sowie deren Zusammenspiel
als Ganzes.
4.1. Funktionsweise
Nachfolgend wird die ganze Implementation mit Hilfe der Grafik 4.1 zusammenfassend erklärt. Der
Benutzer gibt seine Login Daten beim SVN Client ein (1). Anschliessend sendet der Client eine verschlüsselte HTTP WebDAV Anfrage mit Basic Authentifizierung an den Apache Server (2). Dieser
bearbeitet die Anfrage anschliessend mit den einzelnen Modulen. Nach der HTTP Verarbeitung sendet das LDAP Modul mit Hilfe der über das Alias Modul definierten LDAP Server Verbindungen
Bind Requests an die einzelnen LDAP Server (3). Die Server werden in der angegebenen Reihenfolge
abgearbeitet. Sobald ein Server einen erfolgreichen Bind durchführen kann, werden die anderen Server
nicht mehr abgefragt. Das bedeutet, dass der erste Server, welcher den Benutzer authentifizieren kann,
gewinnt. Daraus lässt sich ableiten, dass es wohl sinnvoll ist, denjenigen Server als erstes anzugeben,
welcher die am häufigsten verwendeten Benutzernamen enthält. Sobald der Benutzer authentifiziert
ist, wird mittels der Autorisierung überprüft, ob der Benutzer Rechte auf dem gewünschten Repository
hat (4). Die Berechtigungen sind in der MySQL Datenbank definiert. Wenn bis hierhin alles geklappt
hat, werden die Daten aus dem SVN Repository an den Client geliefert (5 und 6).
SVN
Repositories
Apache
5
DAV SVN
Modul
6
hole Daten
aus Repo
liefere Daten
Authz SVN
DB Modul
SVN Client
4
2
HTTP Basic Auth (SSL)
autorisiere
Benutzer
3
LDAP
Modul
Login Daten
Alias Modul
authentifiziere
Benutzer
1
3
OpenLDAP
3
Active
Directory
EDU
3
Active
Directory
ADM
Abbildung 4.1.: Ablauf der Authentifizierung und Autorisierung
11
Authorization
DB
Kapitel 4. Implementation
4.2. Konfiguration
4.2. Konfiguration
Dieser Abschnitt zeigt auf, wie die Gesamtlösung aufgebaut ist und dient als Leitfaden, um diese zu
implementieren.
4.2.1. Verwendete Hard- und Software
Verwendete Systeme
System
Rechner 1:
Intel Pentium 4, 3.0 GHz
1 GB RAM
Rechner 2:
Intel Core 2 Duo 2.4 GHz
4 GB RAM
Virtuelle Maschine 1:
2x 2.4 GHz Prozessor zugewiesen
1 GB RAM
Virtuelle Maschine 2:
1x 2.4 GHz Prozessor zugewiesen
1 GB RAM
Zweck
Server für Apache, MySQL und OpenLDAP
Server für virtuelle Maschinen
Windows Domain Controller für Testdomäne
Entwicklungs- und Testsystem für Apache Module
Verwendete Betriebssyteme
Betriebssystem
Debian 5 32bit Linux mit Kernel 2.6.26-1-686
Debian 5 64bit Linux mit Kernel 2.6.26-1-amd64
Windows 2003 Server R2 Service Pack 2
Einsatz
Rechner 1, Virtuelle Maschine 2
Rechner 2
Virtuelle Machine 1
Verwendete Software
Softwarepaket
Apache 2.2.9 aus dem Debian Lenny Paket Repository
SVN 1.5.1 aus dem Debian Lenny Paket Repository
Apache SVN Module Version 1.5.1 aus dem Debian Lenny Paket Repository
OpenLDAP Server Version 2.4.11-1 aus dem Debian Lenny Paket Repository
MySQL Server Version 5.0.51a aus dem Debian Lenny Paket Repository
Eclipse 3.4.1 C/C++ Edition
VMware Server 2.0.1
Einsatzort
Rechner 1
Rechner 1
Rechner 1
Rechner 1
Rechner 1
Rechner 1
Rechner 2
4.2.2. SVN
Die SVN Repositories – welche die zu schützenden Ressourcen darstellen – wurden mit dem Tool
svnadmin erstellt. Dieses erstellt mit der Option svnadmin create <repo Name> das gewünschte Repository. Das ist alles, was von der SVN Seite her erledigt werden muss. Die restlichen Einstellungen
Bachelor Thesis
12
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.2. Konfiguration
werden mittels der Konfiguration des Apache Servers vorgenommen. Details zur Konfiguration von
SVN können unter [6] gefunden werden.
4.2.3. Apache
Als Grundstein dieser Lösung fungiert eine Standardinstallation von Apache mit den zuvor erwähnten
SVN Modulen.
Verwendete Module
Folgende Module wurden, abgesehen von den Apache Core Modulen, für die Gesamtlösung verwendet.
Bis auf das Modul mod authz svn db werden alle Module mit der Standardinstallation von Apache
mitgeliefert. Es werden jeweils die wichtigsten Funktionen und deren Konfiguration erklärt.
• mod ssl
Das Modul mod ssl [7] erweitert den Apache Webserver um die Möglichkeit, SSL bzw. TLS
geschützte Verbindungen aufzubauen. Das Modul wird mit der Grundinstallation von Apache
mitgeliefert. Es muss lediglich konfiguriert und aktiviert werden.
Folgende Zeilen in der Datei /etc/apache2/sites-enabled/default-ssl mussten angepasst
werden:
– SSLCACertificateFile /etc/ssl/imvs.technik.fhnw.ch/ca.crt
– SSLCertificateFile /etc/ssl/imvs.technik.fhnw.ch/server.crt
– SSLCertificateKeyFile /etc/ssl/imvs.technik.fhnw.ch/server.key
• mod auth basic
Das Modul mod auth basic [8] erlaubt die HTTP Basic Authentifizierung indem es die angegebenen Benutzerdaten gegen einen sogenannten Provider abgleicht. Durch die Kombination
mit mod ssl werden die Authentifizierungsdaten zwischen dem SVN Client und dem Apache
Webserver verschlüsselt übertragen.
• mod ldap
Das Modul mod ldap [9] erweitert die Apache Standard Libraries für LDAP, indem es einen
Connection-Pool sowie einen shared memory cache verwendet. Dadurch wird die Performance
der LDAP Authentifizierung gesteigert.
• mod authnz ldap
Das Modul mod authnz ldap [10] erweitert Apache – genauer das Modul mod auth basic – um die
Funktionalität der Anbindung von LDAP-Servern zur Authentifizierung von Benutzern. Zudem
erlaubt es die Verbindung zu den LDAP-Servern mit SSL/TLS zu verschlüsseln. Dies war mit
dem Active Directory der FHNW jedoch nicht möglich (siehe: 5.2.2), da das Zertifikat abgelaufen
war.
Bachelor Thesis
13
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.2. Konfiguration
Damit eine LDAP-Struktur überhaupt durchsucht werden kann, muss bei gewissen LDAP Servern (dazu gehört unter anderem Active Directory) zuerst ein LDAP-Bind durchgeführt werden.
Dies muss mit einem Benutzer, welcher in der jeweiligen LDAP-Struktur vorhanden ist, durchgeführt werden.
Listing 4.1: OpenLDAP-Bind
AuthLDAPBindDN ”CN=admin , dc=imvs , dc=t e c h n i k , dc=fhnw , dc=ch ”
AuthLDAPBindPassword 1234
AuthLDAPURL l d a p : / / l o c a l h o s t : 3 8 9 /DC=imvs ,DC=t e c h n i k ,DC=fhnw ,DC=ch ? cn ?
sub ? ( o b j e c t C l a s s=p e r s o n ) NONE
Listing 4.1 zeigt die Bind Konfiguration für den OpenLDAP Server. Der AuthLDAPBindDN ist
der Distinguished Name des Benutzers, mit dem der Bind durchgeführt werden soll, wobei der
DN in typischer LDAP-Syntax angegeben werden muss.
Das AuthLDAPBindPassword ist selbstredend das Passwort des Benutzers von AuthLDAPBindDN.
Die AuthLDAPURL ist die LDAP-Adresse des Suchbaumes. In diesem Beispiel wird mit ?sub definiert, dass unterhalb des Baumes imvs.technik.fhnw.ch nach dem Common Name, definiert
durch ?cn, gesucht werden soll. Das Schlüsselwort objectClass=person sagt aus, dass die zu suchenden Objekte vom Typ person sein sollen. Mit Hilfe von AuthLDAPURL können auch mehrere,
redundante Server angegeben werden. Ein Beispiel dazu ist unter A.5 zu finden.
Damit nicht bei jeder Anfrage des gleichen Benutzers die ganze LDAP-Struktur durchsucht
werden muss, speichert das mod ldap Modul von Apache die bereits gemachten Abfragen in einem
Cache. Dies verbessert die Performance deutlich, da der Cache sehr viel schneller durchsucht
werden kann.
• mod authn alias
Wie bereits in 3.1 erklärt, wurde anstelle von Penrose das Modul mod authn alias [5] benutzt,
um gegen mehrere Provider zu authentifizieren.
In einem ersten Schritt werden in der Konfiguration die Aliase definiert:
Listing 4.2: Definition eines Aliases
<A u t h n P r o v i d e r A l i a s l d a p openldap>
AuthLDAPBindDN ”CN=admin , dc=imvs , dc=t e c h n i k , dc=fhnw , dc=ch ”
AuthLDAPBindPassword 1234
AuthLDAPURL l d a p : / / l o c a l h o s t : 3 8 9 /DC=imvs ,DC=t e c h n i k ,DC=fhnw ,
DC=ch ? cn ? sub ? ( o b j e c t C l a s s=p e r s o n ) NONE
</A u t h n P r o v i d e r A l i a s >
Details zur Konfiguration der Aliase sind im Anhang unter A.5 zu finden.
Danach kann mittels AuthBasicProvider angegeben werden, welche dieser - mittels Aliasen
definierten Provider - verwendet werden sollen. Wie schon in 4.1 erwähnt, werden die Aliase in
der definierten Reihenfolge abgearbeitet.
Listing 4.3: Referenzierung der Aliase
<L o c a t i o n / a l i a s >
...
#A u t h e n t i c a t i o n s e c t i o n
Bachelor Thesis
14
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.2. Konfiguration
A u t h B a s i c P r o v i d e r openldap ad−s t u d ad−adm
AuthType B a s i c
AuthName ”SVN Anmeldung ”
r e q u i r e v a l i d −u s e r
...
</L o c a t i o n >
Mehr dazu im Anhang unter A.5
• mod dav
Das Modul mod dav [11] erweitert Apache um die Funktionalität von WebDAV (,Web-based
Distributed Authoring and Versioning‘).
• mod dav svn
Das Modul mod dav svn von Tigris.org [12] ermöglicht, dass SVN-Clients per HTTP(S) – anstelle des SVN eigenen Protokolls svnserve – auf die Repositories zugreifen können.
• mod authz svn db
Das Modul mod authz svn db von Christopher Wojno [3] ist eine Erweiterung des Moduls
mod authz svn [12], welches als Datenquelle für die Autorisierung der SVN Benutzer eine Textdatei verwendet.
Anstatt einer solchen Textdatei verwendet das Modul mod authz svn db eine Datenbank, was die
Änderung von Berechtigungen wesentlich komfortabler und einfacher macht. Details zu diesem
Modul sind unter 4.3.3 zu finden.
Bachelor Thesis
15
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.2. Konfiguration
4.2.4. Datenbank
Nachfolgend sollen zwei Entity-Relationship-Diagramme (ERD) den Aufbau der MySQL-Datenbank
veranschaulichen und die Erklärung unterstützen.
ERD (Überblick)
In Abbildung 4.2 ist der Zusammenhang der wichtigsten Datenbank-Tabellen ersichtlich. Daraus abzulesen ist, dass ein User in beliebig vielen Groups sein kann und umgekehrt. Des weiteren ist es
möglich, die Berechtigungen pro Repository-Pfad direkt auf einem Benutzer zu setzten oder auf der
Gruppe, der er angehört. Zudem können zu einem Repository mehrere Unterpfade definiert werden.
Diese Unterpfade ermöglichen es, Benutzern feingranular unterschiedliche Berechtigungen auf einem
Repository zu erteilen.
User
Repository
n
n
1
m
n
m
Group
Repository Path
n
m
Abbildung 4.2.: ERD
ERD (Detailliert)
In Abbildung 4.3 ist der Zusammenhang aller Tabellen und deren Felder ersichtlich.
authz_svn_userpermission
authz_svn_user
user_id INT(11)
N P F
id INT(11)
repository_path_id INT(11)
N P F
name VARCHAR(255)
read TINYINT(1)
N
write TINYINT(1)
N
recursive TINYINT(1)
N
authz_svn_grouppermission
id INT(11)
A N P
group_id INT(11)
U N F
repository_path_id INT(11)
U N F
authz_svn_groupmembership
A N P
U N
Index user_name_idx(name)
authz_svn_repopath
id INT(11)
A N P
user_id INT(11)
U N F
group_id INT(11)
U N F
authz_svn_repository
id INT(11)
A N P
id INT(11)
repository_id INT(11)
U N F
name VARCHAR(255)
path VARCHAR(255)
U N
A N P
U N
Index repo_name_idx(name)
Legende
authz_svn_group
read TINYINT(1)
N
id INT(11)
write TINYINT(1)
N
name VARCHAR(255)
recursive TINYINT(1)
N
Index group_name_idx(name)
A N P
U N
A: Auto Increment
N: Not Null
P: Primary Key
F: Foreign Key
U: Unique
Abbildung 4.3.: Tabellen der Datenbank
Bachelor Thesis
16
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.2. Konfiguration
Beim Erstellen des Datenbanklayouts wurde Wert darauf gelegt, für die Datenverwaltung möglichst
viele Funktionen des DBMS von MySQL zu nutzen. Dazu gehört, dass in einer Tabelle keine doppelten
Einträge existieren sollen, referentielle Integrität mit Löschweitergabe und Indizes für die schnelle
Suche von Daten.
Nachfolgend werden die einzelnen Tabellen und Felder der Datenbank erklärt.
authz svn user
Enthält die Benutzer, welchen Berechtigungen für Repositories erteilt werden sollen.
Feld
id
name
Erklärung
Benutzer ID
Benutzername wie er beim SVN Client oder im Browser mitgegeben wird
authz svn repository
Enthält die Repositories.
Feld
id
name
Erklärung
Repository ID
Name des Repositories, so wie er beim Zugriff im SVN
Client oder Browser angegeben wird. Wird z.B. über https://<server>/<repo name> darauf zugegriffen, wird <repo name> in dieses Feld eingetragen.
authz svn repopath
Enthält die Pfade der Repositories. Es können pro Repository beliebig viele Pfade erfasst werden.
Diese dienen dazu, Benutzern feingranulare Berechtigungen auf einzelnen Unterordnern oder Dateien
zu geben.
Feld
id
repository id
path
Erklärung
ID des Pfades
ID des Repositories (Fremdschlüssel)
Ein bestimmter Pfad im Repository. Z.B. </> für den Root
Pfad oder </Dokumente> für einen Unterordner
authz svn userpermission
Dient dem Zuweisen von Berechtigungen auf die Repository Pfade an einzelne Benutzer.
Feld
user id
repository path id
read
write
Bachelor Thesis
Erklärung
Benutzer ID (Fremdschlüssel)
ID des Repository (Fremdschlüssel)
1: Benutzer hat Leseberechtigung
0: Benutzer hat keine Berechtigungen auf dem Repository
Pfad
1: Benutzer hat Schreibberechtigung
0: Benutzer hat keine Schreibberechtigung
17
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
recursive
4.2. Konfiguration
1: Benutzer hat unterhalb des zugeordneten Repository Pfades rekursive Berechtigung
0: Benutzer hat nur auf der Ebene des zugeordneten Repository Pfades Berechtigung, nicht aber darunter
authz svn group
Dient dazu, einer Gruppe einen aussagekräftigen Namen zu geben. Diese Tabelle ist optional und
wird für das Prüfen der Berechtigungen vom Modul mod authz svn db nicht benötigt. Wird diese
Tabelle weggelassen, entfällt jedoch auch die Möglichkeit, Gruppen und deren Berechtigungen durch
automatische Löschweitergabe in der gesamten Datenbank automatisch zu entfernen.
Feld
id
name
Erklärung
Gruppen ID
Aussagekräftiger Name der Gruppe
authz svn groupmembership
Ermöglicht das Zuordnen von Benutzern zu Gruppen.
Feld
id
user id
group id
Erklärung
Datensatz ID
ID des Benutzers (Fremdschlüssel)
ID der Gruppe (Fremdschlüssel)
authz svn grouppermission
Dient dem Zuweisen von Berechtigungen auf die Repository Pfade an einzelne Gruppen.
Feld
id
group id
repository path id
read
write
recursive
Erklärung
Datensatz ID
Gruppen ID (Fremdschlüssel)
ID des Repository (Fremdschlüssel)
1: Gruppe hat Leseberechtigung
0: Gruppe hat keine Berechtigungen auf dem Repository Pfad
1: Gruppe hat Schreibberechtigung
0: Gruppe keine Schreibberechtigung
1: Gruppe hat unterhalb des zugeordneten Repository Pfades
rekursive Berechtigung
0: Gruppe hat nur auf der Ebene des zugeordneten Repository Pfades Berechtigung, nicht aber darunter
Einschränkungen
Das Modul mod authz svn db unterstützt keine SSL Verbindung zur Datenbank. Dies ist nicht weiter
tragisch, da keine sensitiven Daten zum und vom MySQL Server übetragen werden, man muss sich
dessen einfach bewusst sein.
Bachelor Thesis
18
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.3. Ablauf und Zusammenspiel im Detail
4.3. Ablauf und Zusammenspiel im Detail
Dieser Abschnitt soll den Ablauf einer Authentifizierung/Autorisierung im Detail beleuchten und somit
auch den Zusammenhang der einzelnen Komponenten erklären.
In diesem Beispiel will der Benutzer gery“ Zugriff auf ein Repository erhalten. Nachfolgend ist der
”
Ablauf beschrieben.
Es ist hier zu vermerken, dass sämtlicher Datenverkehr nur zu Zwecken der Anschauung nicht verschlüsselt abläuft – siehe Wireshark-Auszüge. In der effektiven Implementation ist dieser Verkehr per
SSL verschlüsselt und somit nicht abhörbar. Ausserdem wird anstelle des SVN Clients der Einfachheit
halber ein Browser verwendet, weil der DAV Datenaustausch einiges umfangreicher ist als der von
einfachem HTTP.
4.3.1. Client-Anfrage
Der SVN-Client – in Abbildung 4.4 vereinfacht dargestellt durch den Browser – schickt einen Request
an den Apache Server, um die Daten des Repository abzuholen. Damit der Request via HTTP – anstelle des SVN eigenen Protokolls – versendet werden kann, wird das Modul mod dav svn verwendet,
welche SVN-Repositories per WebDAV zur Verfügung stellt. Da die Repositories aber durch Authentifizierung/Autorisierung geschützt sind, wird die Anfrage bzw. werden die Benutzerdaten, welche dem
Client mitgegeben wurden, an die LDAP Provider (Authentifizierungs-Datenquellen) weitergeleitet.
Apache
Browser
HTTP GET /projectSVN/
DAV SVN
Modul
Abbildung 4.4.: Client Request
In Listing 4.4 ist eine per Wireshark abgefangene Anfrage vom Client dargestellt. Bei allen nachfolgenden Captures wurde Unnötiges (gekenntzeichnet durch ..“) weggelassen.
”
Listing 4.4: HTTP Capturing Details
GET / projectSVN / HTTP/ 1 . 1 \ r \n
Request Method : GET
Request URI : / projectSVN /
Request V e r s i o n : HTTP/ 1 . 1
Host : ad\ r \n
User−Agent : M o z i l l a / 5 . 0 ( Macintosh ; U; I n t e l Mac OS X 1 0 . 5 ; en−US ; rv
: 1 . 9 . 1 . 1 ) Gecko /20090715 F i r e f o x / 3 . 5 . 1 \ r \n
...
Bachelor Thesis
19
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.3. Ablauf und Zusammenspiel im Detail
A u t h o r i z a t i o n : B a s i c Z2VyeTpnZXJ5MDk=\r \n
C r e d e n t i a l s : gery : gery09
Cache−C o n t r o l : max−age=0\ r \n
4.3.2. Authentifizierung
Die Benutzerdaten, welche vom Client erhalten wurden, werden nun auf ihre Gültigkeit überprüft. Dazu werden sie an die LDAP Provider weitergeleitet. In diesem Fall sind dies die drei LDAP-Strukturen:
Die schulinternen Active Directory Domänen EDU und ADM sowie der OpenLDAP-Server für externe
Benutzer.
Active Directory - EDU Da im Active Directory der FHNW der Common Name (bestehend aus Vorund Nachname eines Benutzers) nicht zwingend eindeutig sein muss, ist die Suche nach dem Attribut
mail sinnvoller, da die Mail-Addresse garantiert einzigartig ist unter allen Angehörigen der FHNW.
Da der Benutzer gery“ nicht in der EDU-Domäne des Active Directory vorhanden ist, werden 0
”
Resultate zurück geliefert. Siehe Abbildung 4.5.
Listing 4.5 zeigt die einzelnen, ausgetauschten LDAP Abfragen detailliert.
Apache
bindRequest "[email protected]"
bindResponse [success]
Alias Modul
LDAP Alias
edu
searchRequest "mail=gery"
Active Directory
EDU
searchResDone [0 results]
Abbildung 4.5.: EDU-Abfrage
Listing 4.5: LDAP Capture Details
LDAPMessage bindRequest ( 1 ) ” g e r a r d . b i e l i @ e d u . ds . fhnw . ch ” s i m p l e
messageID : 1
p ro t o c o l O p : bindRequest ( 0 )
bindRequest
version : 3
name : g e r a r d . b i e l i @ e d u . ds . fhnw . ch
authentication : simple (0)
s i m p l e : 2 B65757230737461722B
[ Response In : 6 8 ]
LDAPMessage bindResponse ( 1 ) s u c c e s s
messageID : 1
p ro t o c o l O p : bindResponse ( 1 )
bindResponse
resultCode : success (0)
Bachelor Thesis
20
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.3. Ablauf und Zusammenspiel im Detail
matchedDN :
errorMessage :
[ Response To : 6 7 ]
[ Time : 0 . 0 0 9 1 2 6 0 0 0 s e c o n d s ]
LDAPMessage s e a r c h R e q u e s t ( 2 ) ”ou=edu , ou=prod ,DC=edu ,DC=ds ,DC=fhnw ,DC=ch ”
wholeSubtree
messageID : 2
p ro t o c o l O p : s e a r c h R e q u e s t ( 3 )
searchRequest
b a s e O b j e c t : ou=edu , ou=prod ,DC=edu ,DC=ds ,DC=fhnw ,DC=ch
scope : wholeSubtree (2)
d e r e f A l i a s e s : derefAlways (3)
sizeLimit : 0
timeLimit : 0
typesOnly : F a l s e
F i l t e r : (&( o b j e c t C l a s s=p e r s o n ) ( m a i l=g e r y ) )
f i l t e r : and ( 0 )
and : (&( o b j e c t C l a s s=p e r s o n ) ( m a i l=g e r y ) )
and : 2 i t e m s
F i l t e r : ( o b j e c t C l a s s=p e r s o n )
Item : e q u a l i t y M a t c h ( 3 )
equalityMatch
attributeDesc : objectClass
assertionValue : person
F i l t e r : ( m a i l=g e r y )
Item : e q u a l i t y M a t c h ( 3 )
equalityMatch
a t t ri b u t e De s c : mail
assertionValue : gery
a t t r i b u t e s : 1 item
Item : m a i l
[ Response In : 7 2 ]
LDAPMessage searchResDone ( 2 ) s u c c e s s [ 0 r e s u l t s ]
messageID : 2
p ro t o c o l O p : searchResDone ( 5 )
searchResDone
resultCode : success (0)
matchedDN :
errorMessage :
[ Response To : 7 0 ]
[ Time : 0 . 0 2 2 2 6 2 0 0 0 s e c o n d s ]
Bachelor Thesis
21
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.3. Ablauf und Zusammenspiel im Detail
Active Directory - ADM Wie für die Domäne EDU gilt das oben Genannte auch für die Domäne
ADM. Da der Benutzer gery“ auch nicht in der ADM-Domäne des Active Directory vorhanden ist,
”
werden auch hier 0 Resultate zurück geliefert. Siehe Abbildung 4.6.
Listing 4.6 zeigt die einzelnen, ausgetauschten LDAP Abfragen detailliert. Da es sich hier prinzipiell
um das gleiche Vorgehen wie bei Listing 4.5 handelt, wird Unnötiges weggelassen.
Apache
bindRequest "[email protected]"
bindResponse [success]
Alias Modul
LDAP Alias
adm
searchRequest "mail=gery"
Active Directory
ADM
searchResDone [0 results]
Abbildung 4.6.: ADM-Abfrage
Listing 4.6: LDAP Capture Details
LDAPMessage bindRequest ( 1 ) ” g e r a r d . b i e l i @ e d u . ds . fhnw . ch ” s i m p l e
...
LDAPMessage s e a r c h R e q u e s t ( 2 ) ”OU=adm ,OU=Prod ,DC=adm ,DC=ds ,DC=fhnw ,DC=ch ”
wholeSubtree
...
LDAPMessage searchResDone ( 2 ) s u c c e s s [ 0 r e s u l t s ]
messageID : 2
p ro t o c o l O p : searchResDone ( 5 )
searchResDone
resultCode : success (0)
matchedDN :
errorMessage :
[ Response To : 8 5 ]
[ Time : 0 . 0 0 1 3 1 7 0 0 0 s e c o n d s ]
Bachelor Thesis
22
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.3. Ablauf und Zusammenspiel im Detail
OpenLDAP Wie zu Beginn des Abschnitts schon gezeigt, wird auf dem OpenLDAP-Server nach dem
Attribut cn gesucht. Da der Benutzer gery“ auf diesem Server zu finden ist, wird als Resultat eben
”
dieser Benutzer geliefert. Danach folgt ein zweiter Bind, um das vom Client gelieferte Passwort zu
verifizieren. Da dies übereinstimmt, wird eine Erfolgsmeldung zurückgeliefert und der Benutzer gery“
”
ist somit authentifiziert. Siehe Abbildung 4.7.
Listing 4.7 zeigt die einzelnen, ausgetauschten LDAP Abfragen detailliert.
bindRequest "cn=admin"
Apache
bindResponse [success]
searchRequest "cn=gery"
Alias Modul
searchResEntry [1 entry]
LDAP Alias
openLDAP
searchResDone [1 result]
OpenLDAP
Directory
bindRequest "cn=gery"
bindResponse [success]
Abbildung 4.7.: OpenLDAP-Abfrage
Listing 4.7: LDAP Capture Details
LDAPMessage bindRequest ( 1 ) ”CN=admin , dc=imvs , dc=t e c h n i k , dc=fhnw , dc=ch ”
simple
messageID : 1
p ro t o c o l O p : bindRequest ( 0 )
bindRequest
version : 3
name : CN=admin , dc=imvs , dc=t e c h n i k , dc=fhnw , dc=ch
authentication : simple (0)
s i m p l e : 31323334
[ Response In : 9 4 ]
LDAPMessage bindResponse ( 1 ) s u c c e s s
messageID : 1
p ro t o c o l O p : bindResponse ( 1 )
bindResponse
resultCode : success (0)
matchedDN :
errorMessage :
[ Response To : 9 2 ]
[ Time : 0 . 0 0 0 4 8 9 0 0 0 s e c o n d s ]
LDAPMessage s e a r c h R e q u e s t ( 2 ) ”DC=imvs ,DC=t e c h n i k ,DC=fhnw ,DC=ch ”
wholeSubtree
messageID : 2
p ro t o c o l O p : s e a r c h R e q u e s t ( 3 )
searchRequest
b a s e O b j e c t : DC=imvs ,DC=t e c h n i k ,DC=fhnw ,DC=ch
Bachelor Thesis
23
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.3. Ablauf und Zusammenspiel im Detail
scope : wholeSubtree (2)
d e r e f A l i a s e s : derefAlways (3)
sizeLimit : 0
timeLimit : 0
typesOnly : F a l s e
F i l t e r : (&( o b j e c t C l a s s=p e r s o n ) ( cn=g e r y ) )
f i l t e r : and ( 0 )
and : (&( o b j e c t C l a s s=p e r s o n ) ( cn=g e r y ) )
and : 2 i t e m s
F i l t e r : ( o b j e c t C l a s s=p e r s o n )
Item : e q u a l i t y M a t c h ( 3 )
equalityMatch
attributeDesc : objectClass
assertionValue : person
F i l t e r : ( cn=g e r y )
Item : e q u a l i t y M a t c h ( 3 )
equalityMatch
a t t r i b u t e D e s c : cn
assertionValue : gery
a t t r i b u t e s : 1 item
Item : cn
[ Response In : 9 7 ]
LDAPMessage s e a r c h R e s E n t r y ( 2 ) ”cn=gery , dc=imvs , dc=t e c h n i k , dc=fhnw , dc=ch ”
[1 result ]
messageID : 2
p ro t o c o l O p : s e a r c h R e s E n t r y ( 4 )
searchResEntry
objectName : cn=gery , dc=imvs , dc=t e c h n i k , dc=fhnw , dc=ch
a t t r i b u t e s : 1 item
Item cn
type : cn
v a l s : 1 item
gery
[ Response To : 9 6 ]
[ Time : 0 . 0 0 0 5 3 9 0 0 0 s e c o n d s ]
LDAPMessage searchResDone ( 2 ) s u c c e s s [ 1 r e s u l t ]
messageID : 2
p ro t o c o l O p : searchResDone ( 5 )
searchResDone
resultCode : success (0)
matchedDN :
errorMessage :
[ Response To : 9 6 ]
[ Time : 0 . 0 0 0 6 0 1 0 0 0 s e c o n d s ]
LDAPMessage bindRequest ( 3 ) ”cn=gery , dc=imvs , dc=t e c h n i k , dc=fhnw , dc=ch ”
simple
Bachelor Thesis
24
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.3. Ablauf und Zusammenspiel im Detail
messageID : 3
p ro t o c o l O p : bindRequest ( 0 )
bindRequest
version : 3
name : cn=gery , dc=imvs , dc=t e c h n i k , dc=fhnw , dc=ch
authentication : simple (0)
s i m p l e : 676572793039
[ Response In : 1 0 1 ]
LDAPMessage bindResponse ( 3 ) s u c c e s s
messageID : 3
p ro t o c o l O p : bindResponse ( 1 )
bindResponse
resultCode : success (0)
matchedDN :
errorMessage :
[ Response To : 1 0 0 ]
[ Time : 0 . 0 0 0 2 3 2 0 0 0 s e c o n d s ]
4.3.3. Autorisierung
Nachdem der Benutzer gery“ nun authentifiziert ist, muss im nächsten Schritt geprüft werden, ob er
”
auf dem gewünschten Repository die benötigten Zugriffsberechtigungen hat (lesend/schreibend). Das
Modul mod authz svn db schaut dazu in der für die Autorisierung erstellten MySQL-Datenbank nach,
ob die Berechtigungen stimmen. Dazu wird ein SELECT-Statement abgesetzt und das Ergebnis auf die
gewünschten Attribute und Werte überprüft. Für Details zum SELECT Statement siehe A.3
4.3.4. Server-Antwort
Nachdem der Benutzer auch autorisiert ist – wenn er also mindestens Leseberechtigungen auf dem
gewünschten Repository hat – so werden die Daten per HTTP-Response vom Apache an den Client
zurückgeschickt, wie in Abbildung 4.8 ersichtlich ist. Falls der Benutzer auch Schreibrechte auf dem
Repository besitzt, kann er die Daten zusätzlich bearbeiten.
Listing 4.8 zeigt den Wireshark Auszug zur Serverantwort.
Apache
DAV SVN
Modul
HTTP 200 OK (text/html)
Browser
Abbildung 4.8.: Server Response
Bachelor Thesis
25
SVN Authentifizierung und Autorisierung
Kapitel 4. Implementation
4.3. Ablauf und Zusammenspiel im Detail
Listing 4.8: HTTP Capture Details
HTTP/ 1 . 1 200 OK\ r \n
Request V e r s i o n : HTTP/ 1 . 1
Response Code : 200
...
Line−based t e x t data : t e x t / html
<html><head><t i t l e >projectSVN − R e v i s i o n 1 0 9 : /</ t i t l e ></head>\n
<body>\n
<h2>projectSVN − R e v i s i o n 1 0 9 : /</h2>\n
<ul >\n
< l i ><a h r e f =”. p r o j e c t ”>. p r o j e c t </a></ l i >\n
< l i ><a h r e f =”Dokumente/”>Dokumente/</a></ l i >\n
< l i ><a h r e f =”mod authz svn db /”> mod authz svn db/</a></ l i >\n
< l i ><a h r e f =”p e n r o s e −s e r v e r /”> p e n r o s e −s e r v e r /</a></ l i >\n
</ul >\n
<hr noshade><em>Powered by <a h r e f =”h t t p : / / s u b v e r s i o n . t i g r i s . o r g
/”> S u b v e r s i o n </a> v e r s i o n 1 . 5 . 1 ( r 3 2 2 8 9 ) .</em>\n
</body></html>
Dies bezeichnet den kompletten Ablauf einer typischen Repository-Abfrage.
Bachelor Thesis
26
SVN Authentifizierung und Autorisierung
5. Probleme
Dieses Kapitel soll auf grössere, zeitintensive Probleme eingehen, welche während der Arbeit aufgetreten sind.
5.1. Penrose
5.1.1. Probleme mit Umlauten
Beschreibung
Nach dem Einrichten des Penrose Servers und der Kombination der zwei LDAP Verzeichnisse (Active
Directory und OpenLDAP), funktionierte die Authentifizierung zunächst einwandfrei. Als jedoch versucht wurde, die Authentifizierung mit Benutzern durchzführen, welche Umlaute im Namen haben,
wurde die Anmeldung verweigert. Wie sich herausstellte, lag das Problem einerseits am Aufbau des
Active Directory Verzeichnisses und andererseits an einem Fehler im Penrose Server. Im Active Directory sind die CNs (Common Name, bestehend aus Vor- und Nachname) und infolge dessen auch
die DNs (Distinguished Name, der eindeutige Bezeichner für den Eintrag) mit enthaltenen Umlauten
abgespeichert. Nachfolgend ein Beispiel eines DNs.
Listing 5.1: DN eines Eintrages mit Umlaut
CN=B i e l i , Gérard ,OU=b ,OU=1862 2006 ,OU=S t u d e n t e n I W i n d i s c h ,OU=u s e r s ,OU=62
I ,OU=WI,OU=18 ,OU=edu ,OU=prod ,DC=edu ,DC=ds ,DC=fhnw ,DC=ch
Analyse
Um das Problem sauber analysieren zu können, vor allem um saubere Captures aufnehmen zu können,
wurden die Komponenten Apache Server und Penrose Server auf zwei verschiedene Rechner verteilt.
Wie in der Grafik 5.1 ersichtlich, wurde der Datenverkehr zwischen dem Apache Server und dem
Penrose Server abgehört, sowie zwischen dem Penrose und dem Windows 2003 Server.
Auf den Grafiken 5.2 und 5.3 sind die mit Wireshark aufgenommen Captures zu sehen. Wie dort
ersichtlich ist, liefert der Windows 2003 Server (IP 10.51.2.40) das Suchresultat (searchResEntry)
korrekt. Danach liefert der Penrose Server dieses Suchresultat mit – gemäss LDAP Spezifikation –
korrekt umgewandeltem Sonderzeichen zurück an den Apache Server. Der Apache Server versucht nun
ein Bind mit dem erhaltenen DN und dem vom Benutzer eingegebenen Passwort durchzuführen. Dazu
schickt er gemäss 5.2 den vom Penrose Server erhaltenen DN in gleicher Form zurück. Der Penrose
Server seinerseits leitet diesen Bindrequest an den Windows 2003 Server weiter. Hier liegt nun das
Problem. Der Penrose Server wandelt das Sonderzeichen an dieser Stelle nochmals um und versucht
ein Bind mit diesem ungültigen DN. Daher schlägt der Bind fehl und der Benutzer kann sich nicht
anmelden.
27
Kapitel 5. Probleme
5.1. Penrose
Penrose environment
Debian 5 (32bit)
(IP: 192.168.1.1)
Apache2
LDAP Module
Debian 5 (64bit)
(IPs: 192.168.1.2 &
10.196.134.139)
Capture 1
Penrose
Server 1.2.4
Windows 2003
(IP: 10.51.2.40)
Capture 2
Active
Directory
Abbildung 5.1.: Penrose Testumgebung
Bachelor Thesis
28
SVN Authentifizierung und Autorisierung
Kapitel 5. Probleme
Bachelor Thesis
5.1. Penrose
Abbildung 5.2.: Capture 1
29
SVN Authentifizierung und Autorisierung
Kapitel 5. Probleme
Bachelor Thesis
5.1. Penrose
Abbildung 5.3.: Capture 2
30
SVN Authentifizierung und Autorisierung
Kapitel 5. Probleme
5.2. Apache
Lösung
Nach intensivem Debugging wurde die Lösung für das Problem gefunden. Die Problemursache lag in
einer vom Penrose Server verwendeten Library und zwar in der Apache Directory Library (sharedldap-0.9.5.4.jar). Schliesslich musste, gemäss Listing 5.2, lediglich eine Zeile Code geändert werden.
Listing 5.2: Geänderter Code in org.apache.directory.shared.ldap.name.LdapDN.java
public S t r i n g toNormName ( ) {
...
// Line 2 8 0 :
// b y t e s = S t r i n g T o o l s . g e t B y t e s U t f 8 ( newNormName ) ;
// changed t o
b y t e s = S t r i n g T o o l s . g e t B y t e s U t f 8 (upName ) ;
...
}
In der String Variable newNormName wird von der Library ein normalisierter DN String abgelegt,
welcher dann für den Bind beim Active Directory Server verwendet wird. Diese Normalisierung ist
überflüssig und wurde daher entfernt. Danach funktionierte alles reibungslos.
5.2. Apache
5.2.1. Kompilieren des Moduls mod authz svn db
Aufgrund der äusserts mangelhaften Dokumentation bereitete das Kompilieren des Moduls etwas
Schwierigkeiten. Es war zu Beginn nicht klar, was für Libraries verfügbar sein müssen und wie dieses Modul zu kompilieren ist. Diese Informationen mussten alle aus dem Source Code herausgelesen
werden. Ausserdem war es nicht möglich, das Modul mit dem mitgelieferten Makefile zu kompilieren,
da dieses den GCC anstatt des für die Apache Modul Kompilierung üblichen apxs Tools verwendet.
Nach dem Kompiliervorgang, welcher dann mit dem apxs Tool problemlos verlief, wurde die Datenbank gemäss der Dokumentation zum mod authz svn db Modul aufgesetzt. Der anschliessende Test
des Modul schlug jedoch fehl. Ein Debugging förderte zu Tage, dass im Source Code an zwei Orten
falsche Feldnamen verwendet wurden. Nach dem Anpassen und erneutem Kompilieren des Moduls
funktionierte die Autorisierung einwandfrei.
5.2.2. SSL Verbindung zum FHNW AD
Der Versuch, eine mit SSL bzw. TLS verschlüsselte Verbindung zu den Active Directory Servern der
FHNW aufzubauen, misslang aufgrund des am 04.07.2009 abgelaufenen SSL Zertifikats des EDU Domain Controllers (siehe Listing 5.3). Daher schlug die Validierung und somit die Verbindung fehl. Dies
äusserte sich durch einen Verbindungsabbruch seitens des Apache Servers, nach dem durchgeführten
SSL Handshake. Ein Test mit dem eigenen Active Directory Server gelang problemlos.
Bachelor Thesis
31
SVN Authentifizierung und Autorisierung
Kapitel 5. Probleme
5.2. Apache
Das in Listing 5.3 gezeigte Zertifikat wurde mit Wireshark aus einem abgefangenen SSL Handshake
zwischen dem Apache Server und dem EDU Domain Controller extrahiert.
Listing 5.3: SSL Zertifikat des EDU Domain Controllers der FHNW
Certificate :
Data :
V e r s i o n : 3 ( 0 x2 )
S e r i a l Number :
2 2 : 0 1 : a7 : 5 6 : 0 0 : 0 0 : 0 0 : 0 0 : 0 0 : 1 6
S i g n a t u r e Algorithm : sha1WithRSAEncryption
I s s u e r : DC=ch , DC=fhnw , DC=ds , CN=fhnw . ch
Validity
Not B e f o r e : J u l 5 0 8 : 4 3 : 2 7 2007 GMT
Not A f t e r : J u l 4 0 8 : 4 3 : 2 7 2009 GMT
S u b j e c t : CN=dsemu11 . edu . ds . fhnw . ch
S u b j e c t P u b l i c Key I n f o :
P u b l i c Key Algorithm : r s a E n c r y p t i o n
RSA P u b l i c Key : ( 1 0 2 4 b i t )
Modulus ( 1 0 2 4 b i t ) :
0 0 : ae : f 9 : d8 : 4 4 : 7 0 : 7 8 : 6 1 : 1 c : 3 6 : f 3 : 4 5 : b3 : c6 : d0 :
d8 : d3 : f c : 9 9 : 0 3 : 3 3 : a0 : 9 5 : 0 f : 9 b : c8 : 3 0 : 2 0 : b9 : f 5 :
7 9 : b9 : 2 4 : 3 0 : 9 0 : 1 6 : f a : d6 : 7 5 : aa : 8 8 : 4 d : de : 8 6 : 9 e :
b6 : 4 1 : 0 1 : 7 b : 8 c : 4 b : 7 b : 6 1 : f 4 : c0 : d0 : 1 b : e2 : 7 6 : 2 4 :
6 0 : cb : 3 2 : 8 8 : 7 c : 9 e : 8 8 : be : 4 a : d5 : dd : 3 5 : a1 : 8 5 : 4 5 :
1 c : 8 1 : 1 9 : 6 7 : 0 1 : 9 b : c4 : 9 9 : 7 a : 4 4 : dc : f 0 : 7 f : 5 c : 6 f :
9 4 : 2 e : e8 : 1 f : d3 : 9 0 : 3 a : 0 e : 2 b : 1 3 : e9 : a9 : 1 e : 8 f : 1 d :
eb : 7 d : 5 2 : d2 : 1 d : 3 b : 0 7 : 8 1 : c9 : 6 6 : 7 2 : 5 d : 0 2 : 5 a : 0 8 :
d8 : 0 3 : 6 e : 3 e : c3 : 4 a : c6 : 9 4 : 6 5
Exponent : 65537 ( 0 x10001 )
X509v3 e x t e n s i o n s :
X509v3 S u b j e c t Key I d e n t i f i e r :
5F : 3 E : 3 8 : 1D: 1B : 0 4 : 6D: C9 : 6B :AA: 7 8 : 0 2 :CD: 5 6 : 9 8 : 2 2 : 0 C :EC : 1 1 :
EA
X509v3 Extended Key Usage :
TLS Web S e r v e r A u t h e n t i c a t i o n
X509v3 Key Usage :
D i g i t a l S i g n a t u r e , Key Encipherment
X509v3 A u t h o r i t y Key I d e n t i f i e r :
k e y i d : B3 : 0 5 :DB: 5 3 : E6 : E3 : 1A: 0 0 : 1 8 : D3 : 6 6 : 4 9 : A6 : 3C : 4 5 :ED: 2 1 :
D8 :BC: E3
X509v3 CRL D i s t r i b u t i o n P o i n t s :
URI : l d a p : / / /CN=fhnw . ch ,CN=DSRMU11,CN=CDP,CN=P u b l i c %20Key
%20 S e r v i c e s ,CN=S e r v i c e s ,CN=C o n f i g u r a t i o n ,DC=ds ,DC=fhnw
,DC=ch ? c e r t i f i c a t e R e v o c a t i o n L i s t ? b a s e ? o b j e c t C l a s s=
cRLDistributionPoint
URI : h t t p : / / dsrmu11 . ds . fhnw . ch / C e r t E n r o l l / fhnw . ch . c r l
Authority Information Access :
CA I s s u e r s − URI : l d a p : / / /CN=fhnw . ch ,CN=AIA ,CN=P u b l i c %20
Bachelor Thesis
32
SVN Authentifizierung und Autorisierung
Kapitel 5. Probleme
5.2. Apache
Key%20 S e r v i c e s ,CN=S e r v i c e s ,CN=C o n f i g u r a t i o n ,DC=ds ,DC=
fhnw ,DC=ch ? c A C e r t i f i c a t e ? b a s e ? o b j e c t C l a s s=
certificationAuthority
CA I s s u e r s − URI : h t t p : / / dsrmu11 . ds . fhnw . ch / C e r t E n r o l l /
DSRMU11. ds . fhnw . ch fhnw . ch . c r t
1.3.6.1.4.1.311.20.2:
. . .W. e . b . S . e . r . v . e . r
S i g n a t u r e Algorithm : sha1WithRSAEncryption
2 9 : e e : ed : e0 : 6 0 : 4 c : 7 6 : 2 1 : 8 b : 0 5 : e f : 2 4 : 8 a : a1 : 0 3 : a7 : e9 : 0 e :
5 3 : d4 : d9 : 9 2 : cb : d5 : 8 c : 6 b : 7 f : c5 : 8 1 : 2 3 : 6 a : 1 8 : 7 d : 4 a : 5 3 : da :
e5 : a f : 9 1 : 2 c : 9 d : e c : c2 : 5 b : 5 a : 7 b : 3 1 : c7 : 0 6 : 7 0 : 0 e : 0 7 : f 7 : 0 d :
6 3 : 9 6 : 0 6 : d f : a f : 6 0 : d5 : 4 7 : f d : 6 e : c e : 0 9 : a1 : 3 2 : 5 f : 9 4 : 7 4 : 4 1 :
2 2 : 2 d : da : 9 5 : f e : b9 : 4 8 : e1 : 0 0 : f 1 : f 2 : b0 : f 8 : 4 7 : 6 6 : e c : 5 d : 7 1 :
c f : 0 2 : e3 : 3 0 : 4 7 : da : 7 0 : a3 : 8 5 : 4 a : db : 9 e : 6 4 : 7 9 : 6 9 : 2 8 : 4 4 : 8 b :
8d : 2 c : 3 e : 9 3 : ae : 2 a : f 2 : 6 8 : 5 5 : b5 : d4 : e e : 9 5 : f d : 6 1 : 0 9 : 8 1 : 8 9 :
f b : de : 2 1 : 6 d : 8 0 : 3 7 : 5 3 : 8 d : ab : 6 c : 8 3 : 1 d : d1 : 9 f : 7 9 : f 8 : 8 0 : 5 4 :
6 c : b7 : 9 6 : ae : 8 3 : 2 b : e c : 8 7 : 7 2 : 8 3 : 1 f : 5 7 : 6 6 : 6 5 : bb : 5 7 : 0 5 : 2 8 :
9a : b7 : 9 1 : 8 2 : be : 0 7 : 5 9 : e1 : 6 3 : f 7 : b4 : 8 a : 5 a : 7 0 : 7 c : 3 1 : 6 c : 0 7 :
0 e : 3 e : ac : 1 f : 8 2 : 6 2 : c1 : eb : d0 : 7 7 : 2 c : 4 d : e c : 1 0 : 9 8 : f 8 : 8 a : d4 :
2 9 : 4 a : 3 7 : b7 : d1 : 1 b : 7 d : d1 : c e : 1 2 : 4 0 : a4 : 6 6 : c4 : f 9 : 1 7 : 2 1 : 4 4 :
5 4 : 7 1 : f 4 : f 6 : 5 d : 9 a : d4 : a8 : c5 : f 4 : 4 1 : e7 : 3 d : 5 9 : f 9 : 8 c : c8 : 6 d :
f 3 : 8 c : 2 6 : ac : bc : dd : 9 8 : 8 2 : c0 : ca : 5 2 : 8 4 : 4 8 : da : 3 f : 9 b : f 6 : 5 0 :
3 e : a0 : 2 7 : c3
}
Bachelor Thesis
33
SVN Authentifizierung und Autorisierung
6. Tests
Dieses Kapitel zeigt die verwendete Testumgebung und die durchgeführten Tests.
6.1. Testumgebung
Für das Testen der Lösung wurde die in der Grafik 6.1 abgebildete Testumgebung verwendet. In der
Grafik sind die Domain Controller, der OpenLDAP Server und der MySQL Server als eigenständige
Server aufgeführt. Mangels physikalischer Computer wurden der OpenLDAP und der MySQL Server
auf dem gleichen Server wie der Apache installiert. Aufgrund des abgelaufenen SSL Zertifikats der Domain Controller konnte nicht direkt mit LDAPS gearbeitet werden. Da die SSL Tests mit dem eigenen
Domain Controller problemlos funktionierten, kann davon ausgegangen werden, dass die Verschlüsselung mit gültigen Zertifikaten auch mit den FHNW Servern, wie in der Grafik gezeigt, funktionieren
würde.
Die Grafik 6.1 stellt die Lösung aus der physikalischen Sicht dar, wohingegen die Grafik 4.1 die Lösung
aus der logischen Sicht darstellt.
EDU Server 1
EDU Server 2
LDAP(S)
LDAP(S)
3.1
ADM Server 1
ADM Server 2
LDAP(S)
3.2
SVN Client
2
HTTPS
LDAP(S)
Apache Server
3.3
LDAP(S)
4
Login Daten
OpenLDAP
Server
1
MySQL Server
Abbildung 6.1.: Verwendete Testumgebung
34
Kapitel 6. Tests
6.2. Allgemeines
6.2. Allgemeines
Test
Der ganze Datenverkehr Client-Apache und Apache-LDAP Verzeichnis kann mit
SSL/TLS verschlüsselt werden
Resultat
funktioniert
6.3. Authentifizierung
Test
Benutzer aus der EDU Domäne können sich anmelden
Benutzer aus der ADM Domäne können sich anmelden
Benutzer aus der OpenLDAP Domäne können sich anmelden
Benutzer aus der EDU/ADM Domäne mit Umlauten im Namen können sich anmelden
Verbindung zu den LDAP Servern kann optional verschlüsselt werden
Resultat
funktioniert
funktioniert
funktioniert
funktioniert
funktioniert
6.4. Autorisierung
Test
Benutzer können lesend auf Repositories zugreifen
Benutzer können schreibend auf Repositories zugreifen
Benutzern kann der Zugriff auf Unterordner im Repository verweigert werden
Bachelor Thesis
35
Resultat
funktioniert
funktioniert
funktioniert
SVN Authentifizierung und Autorisierung
7. Ausblick
7.1. SVN Verwaltungsapplikation
Dieses Kapitel beschreibt, was eine allfällige spätere Applikation zur Verwaltung der Repositories und
der Berechtigungsdatenbank können soll. Da das saubere Erstellen einer solchen GUI Applikation
voraussichtlich ein eigenes Semesterprojekt füllen würde, wurde im Rahmen dieser Arbeit auf die
Umsetzung verzichtet. Es wird in diesem Kapitel lediglich geschildert, was denkbar wäre.
7.1.1. Use Case Diagramm
In Grafik 7.1 werden die Use Cases der Applikation dargestellt. Im Wesentlich soll man mit einer
allfälligen späteren Applikation die Repositories, Benutzer und Gruppen verwalten können. Optimal
wäre im Wesentlichen folgendes:
• Erstellen von Repositories auf dem Server.
• Importieren von Benutzern aus dem Active Directory und dem OpenLDAP Server in die Datenbank.
• Benutzern und Gruppen Berechtigungen auf den Repositories erteilen.
• Gelöschte LDAP Benutzer aus der Datenbank entfernen.
36
Kapitel 7. Ausblick
7.1. SVN Verwaltungsapplikation
Repository- und Berechtigungsverwaltung
Zugansdate
n eingeben
<include>
Grundkonfiguration
vornehmen
Repo Server
eingeben
<include>
<include>
LDAP
Server
eingeben
<include>
Repo
erstellen
<include>
MySQL
Server
eingeben
<extend>
Repository
verwalten
Repo
löschen
<extend>
Gr erstellen
Repository
Administrator
<extend>
<include>
Gr verwalten
Gr löschen
<extend>
Benutzer und
Gruppen
verwalten
LDAP
Benutzer
einer Gr
zuweisen
<extend>
Benutzer
verwalten
Gr an Repo
zuweisen
<extend>
<extend>
<extend>
Benutzer - Gr
Zuweisung
ändern
<extend>
Benutzer an
Repo
zuweisen
<extend>
Benutzer
löschen
Gelöschte
LDAP Benutzer
entfernen
Abbildung 7.1.: Use Case Diagramm der Applikation
Bachelor Thesis
37
SVN Authentifizierung und Autorisierung
Kapitel 7. Ausblick
7.1. SVN Verwaltungsapplikation
7.1.2. GUI Entwurf
Die in diesem Kapitel dargestellten Entwürfe der Fenster wurden in Visual Studio 2008 und C#
erstellt. Sie dienen dazu, die wichtigsten, im Diagramm 7.1 zu sehenden, Use Cases zu visualisieren.
Die Grafik 7.2 zeigt das Hauptfenster der Applikation. Es ermöglicht das Setzen von Zugriffsberechtigungen für ein bestimmtes Repository.
Abbildung 7.2.: Repositoryverwaltung
Bachelor Thesis
38
SVN Authentifizierung und Autorisierung
Das Bild 7.3 stellt das Auswählen der Benutzer für ein bestimmtes Repository dar. Hier können nach
der Wahl des LDAP Servers und nach Eingabe der Suchkriterien die gewünschten Benutzer angewählt
und einem Repository zugewiesen werden.
Abbildung 7.3.: Benutzerverwaltung
A. Anhang: Scripts und Konfigurationen
A.1. SQL: Erstellung der Datenbank
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/∗
This SQL f i l e c o n t a i n s t h e SQL commands t o c r e a t e t h e d a t a b a s e f o r t h e apache
module a u t h z s v n d b
∗/
DROP DATABASE ‘ svnperm ‘ ;
CREATE DATABASE ‘ svnperm ‘ DEFAULT CHARACTER SET u t f 8 COLLATE u t f 8 u n i c o d e c i ;
USE ‘ svnperm ‘ ;
CREATE TABLE ‘ a u t h z s v n r e p o s i t o r y ‘
(
‘ id ‘ INT( 1 1 ) NOT NULL AUTO INCREMENT,
‘ name ‘ VARCHAR( 2 5 5 ) NOT NULL UNIQUE,
PRIMARY KEY ( ‘ id ‘ ) ,
INDEX r e p o n a m e i d x ( ‘ name ‘ )
) ENGINE=InnoDB ;
CREATE TABLE ‘ a u t h z s v n u s e r ‘
(
‘ id ‘ INT( 1 1 ) NOT NULL AUTO INCREMENT,
‘ name ‘ VARCHAR( 2 5 5 ) NOT NULL UNIQUE,
PRIMARY KEY ( ‘ id ‘ ) ,
INDEX u s e r n a m e i d x ( ‘ name ‘ )
) ENGINE=InnoDB ;
CREATE TABLE ‘ a u t h z s v n r e p o p a t h ‘
(
‘ id ‘ INT( 1 1 ) NOT NULL AUTO INCREMENT,
‘ r e p o s i t o r y i d ‘ INT( 1 1 ) NOT NULL,
‘ path ‘ VARCHAR( 2 5 5 ) NOT NULL,
PRIMARY KEY ( ‘ id ‘ ) ,
UNIQUE ( ‘ r e p o s i t o r y i d ‘ , ‘ path ‘ ) ,
FOREIGN KEY r e p o s i t o r y i d i d x f k ( ‘ r e p o s i t o r y i d ‘ ) REFERENCES ‘
a u t h z s v n r e p o s i t o r y ‘ ( ‘ id ‘ ) ON DELETE CASCADE
36 ) ENGINE=InnoDB ;
37
38
39 CREATE TABLE ‘ a u t h z s v n u s e r p e r m i s s i o n ‘
40 (
41 ‘ u s e r i d ‘ INT( 1 1 ) NOT NULL,
42 ‘ r e p o s i t o r y p a t h i d ‘ INT( 1 1 ) NOT NULL,
43 ‘ read ‘ TINYINT ( 1 ) NOT NULL,
44 ‘ write ‘ TINYINT ( 1 ) NOT NULL,
45 ‘ recursive ‘ TINYINT ( 1 ) NOT NULL,
46 PRIMARY KEY ( ‘ u s e r i d ‘ , ‘ r e p o s i t o r y p a t h i d ‘ ) ,
47 FOREIGN KEY u s e r i d i d x f k ( ‘ u s e r i d ‘ ) REFERENCES ‘ a u t h z s v n u s e r ‘ ( ‘ id ‘ ) ON DELETE
CASCADE,
48 FOREIGN KEY r e p o p a t h i d i d x f k ( ‘ r e p o s i t o r y p a t h i d ‘ ) REFERENCES ‘
49
50
a u t h z s v n r e p o p a t h ‘ ( ‘ id ‘ ) ON DELETE CASCADE
) ENGINE=InnoDB ;
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
CREATE TABLE ‘ a u t h z s v n g r o u p ‘
(
‘ id ‘ INT( 1 1 ) NOT NULL AUTO INCREMENT,
‘ name ‘ VARCHAR( 2 5 5 ) NOT NULL UNIQUE,
PRIMARY KEY ( ‘ id ‘ ) ,
INDEX group name idx ( ‘ name ‘ )
) ENGINE=InnoDB ;
CREATE TABLE ‘ authz svn groupmembership ‘
(
‘ id ‘ INT( 1 1 ) NOT NULL AUTO INCREMENT,
‘ u s e r i d ‘ INT( 1 1 ) NOT NULL,
‘ g r o u p i d ‘ INT( 1 1 ) NOT NULL,
PRIMARY KEY ( ‘ id ‘ ) ,
UNIQUE ( ‘ u s e r i d ‘ , ‘ g r o u p i d ‘ ) ,
FOREIGN KEY u s e r i d i d x f k ( ‘ u s e r i d ‘ ) REFERENCES ‘ a u t h z s v n u s e r ‘ ( ‘ id ‘ ) ON DELETE
CASCADE,
69 FOREIGN KEY g r o u p i d i d x f k ( ‘ g r o u p i d ‘ ) REFERENCES ‘ a u t h z s v n g r o u p ‘ ( ‘ id ‘ ) ON
DELETE CASCADE
70 ) ENGINE=InnoDB ;
71
72
73
74
75
76
77
78
79
80
81
82
83
84
CREATE TABLE ‘ a u t h z s v n g r o u p p e r m i s s i o n ‘
(
‘ id ‘ INT( 1 1 ) NOT NULL AUTO INCREMENT,
‘ g r o u p i d ‘ INT( 1 1 ) NOT NULL,
‘ r e p o s i t o r y p a t h i d ‘ INT( 1 1 ) NOT NULL,
‘ read ‘ TINYINT ( 1 ) NOT NULL,
‘ write ‘ TINYINT ( 1 ) NOT NULL,
‘ recursive ‘ TINYINT ( 1 ) NOT NULL,
PRIMARY KEY ( ‘ id ‘ ) ,
UNIQUE ( ‘ g r o u p i d ‘ , ‘ r e p o s i t o r y p a t h i d ‘ ) ,
FOREIGN KEY r e p o p a t h i d i d x f k ( ‘ r e p o s i t o r y p a t h i d ‘ ) REFERENCES ‘
a u t h z s v n r e p o p a t h ‘ ( ‘ id ‘ ) ON DELETE CASCADE,
85 FOREIGN KEY g r o u p i d i d x f k ( ‘ g r o u p i d ‘ ) REFERENCES ‘ a u t h z s v n g r o u p ‘ ( ‘ id ‘ ) ON
DELETE CASCADE
86 ) ENGINE=InnoDB ;
A.2. SQL: Beispieldaten
1
2
3
4
5
6
7
8
9
10
11
12
−−
−− Database : ‘ svnperm ‘
−−
−−
−− Dumping d a t a f o r t a b l e ‘ a u t h z s v n g r o u p ‘
−−
INSERT INTO ‘ a u t h z s v n g r o u p ‘ ( ‘ id ‘ , ‘ name ‘ ) VALUES
(1 , ’ allrepos ’ ) ,
(5 , ’ d n f c a l l ’ ) ,
(6 , ’ dnfc gruppe1 ’ ) ,
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
(7 ,
(8 ,
(2 ,
(4 ,
(9 ,
(10 ,
(11 ,
(3 ,
(12 ,
(13 ,
(14 ,
’ dnfc gruppe2 ’ ) ,
’ dnfc gruppe3 ’ ) ,
’ projectSVN ’ ) ,
’ swko all ’ ) ,
’ swko gruppe1 ’ ) ,
’ swko gruppe2 ’ ) ,
’ swko gruppe3 ’ ) ,
’ vesys all ’) ,
’ vesys gruppe1 ’ ) ,
’ vesys gruppe2 ’ ) ,
’ vesys gruppe3 ’ ) ;
−−
−− Dumping d a t a f o r t a b l e ‘ a u t h z s v n g r o u p m e m b e r s h i p ‘
−−
INSERT INTO ‘ authz svn groupmembership ‘ ( ‘ id ‘ , ‘ u s e r i d ‘ , ‘ g r o u p i d ‘ ) VALUES
(15 , 1 , 2) ,
(5 , 2 , 2) ,
(12 , 3 , 9) ,
(13 , 3 , 10) ,
(14 , 3 , 14) ,
(6 , 4 , 7) ,
(7 , 4 , 12) ,
(8 , 5 , 4) ,
(18 , 6 , 5) ,
(11 , 7 , 3) ,
(17 , 8 , 9) ,
(16 , 8 , 10) ,
(9 , 9 , 8) ,
(10 , 9 , 11) ,
(20 , 10 , 8) ,
(19 , 10 , 11) ,
(24 , 11 , 6) ,
(23 , 11 , 13) ,
(1 , 12 , 1) ,
(2 , 13 , 6) ,
(4 , 13 , 13) ,
(3 , 13 , 14) ,
(22 , 14 , 7) ,
(21 , 14 , 12) ;
−−
−− Dumping d a t a f o r t a b l e ‘ a u t h z s v n g r o u p p e r m i s s i o n ‘
−−
INSERT INTO
‘ read ‘ ,
(1 , 1 , 1 , 1 ,
(2 , 1 , 2 , 1 ,
(3 , 1 , 3 , 1 ,
(4 , 1 , 4 , 1 ,
(5 , 1 , 5 , 1 ,
(6 , 1 , 6 , 1 ,
(7 , 1 , 7 , 1 ,
(8 , 1 , 8 , 1 ,
‘ a u t h z s v n g r o u p p e r m i s s i o n ‘ ( ‘ id ‘ , ‘ g r o u p i d ‘ , ‘ r e p o s i t o r y p a t h i d ‘ ,
‘ write ‘ , ‘ recursive ‘ ) VALUES
1 , 1) ,
1 , 1) ,
1 , 1) ,
1 , 1) ,
1 , 1) ,
1 , 1) ,
1 , 1) ,
1 , 1) ,
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
(9 , 1 , 9 , 1 , 1 , 1) ,
(10 , 1 , 10 , 1 , 1 , 1) ,
(11 , 5 , 2 , 1 , 0 , 1) ,
(12 , 5 , 5 , 1 , 0 , 1) ,
(13 , 5 , 6 , 1 , 0 , 1) ,
(14 , 2 , 1 , 1 , 1 , 1) ,
(15 , 4 , 4 , 1 , 0 , 1) ,
(16 , 4 , 9 , 1 , 0 , 1) ,
(17 , 4 , 10 , 1 , 0 , 1) ,
(18 , 3 , 3 , 1 , 0 , 1) ,
(19 , 3 , 7 , 1 , 0 , 1) ,
(20 , 3 , 8 , 1 , 0 , 1) ,
(21 , 6 , 2 , 1 , 1 , 1) ,
(22 , 7 , 5 , 1 , 1 , 1) ,
(23 , 8 , 6 , 1 , 1 , 1) ,
(24 , 10 , 9 , 1 , 1 , 1) ,
(25 , 11 , 10 , 1 , 1 , 1) ,
(26 , 12 , 3 , 1 , 1 , 1) ,
(27 , 13 , 7 , 1 , 1 , 1) ,
(28 , 14 , 8 , 1 , 1 , 1) ,
(29 , 9 , 4 , 1 , 1 , 1) ;
−−
−− Dumping d a t a f o r t a b l e ‘ a u t h z s v n r e p o p a t h ‘
−−
INSERT INTO ‘ a u t h z s v n r e p o p a t h ‘ ( ‘ id ‘ , ‘ r e p o s i t o r y i d ‘ , ‘ path ‘ ) VALUES
(1 , 1 , ’/ ’ ) ,
(2 , 2 , ’/ ’ ) ,
(3 , 3 , ’/ ’ ) ,
(4 , 4 , ’/ ’ ) ,
(5 , 5 , ’/ ’ ) ,
(6 , 6 , ’/ ’ ) ,
(7 , 7 , ’/ ’ ) ,
(8 , 8 , ’/ ’ ) ,
(9 , 9 , ’/ ’ ) ,
(10 , 10 , ’ / ’ ) ;
−−
−− Dumping d a t a f o r t a b l e ‘ a u t h z s v n r e p o s i t o r y ‘
−−
INSERT INTO ‘ a u t h z s v n r e p o s i t o r y ‘ ( ‘ id ‘ , ‘ name ‘ ) VALUES
(2 , ’ dnfc gruppe1 ’ ) ,
(5 , ’ dnfc gruppe2 ’ ) ,
(6 , ’ dnfc gruppe3 ’ ) ,
( 1 , ’ projectSVN ’ ) ,
( 4 , ’ swko gruppe1 ’ ) ,
( 9 , ’ swko gruppe2 ’ ) ,
( 1 0 , ’ swko gruppe3 ’ ) ,
(3 , ’ vesys gruppe1 ’ ) ,
(7 , ’ vesys gruppe2 ’ ) ,
(8 , ’ vesys gruppe3 ’ ) ;
−−
−− Dumping d a t a f o r t a b l e ‘ a u t h z s v n u s e r ‘
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
−−
INSERT INTO ‘ a u t h z s v n u s e r ‘ ( ‘ id ‘ , ‘ name ‘ ) VALUES
( 1 2 , ’ admin ’ ) ,
( 1 3 , ’ a n d r e a s . a n t e n e r @ s t u d e n t s . fhnw . ch ’ ) ,
(2 , ’ christian ’ ) ,
( 4 , ’ c h r i s t i a n . h a l l e r @ s t u d e n t s . fhnw . ch ’ ) ,
( 5 , ’ c h r i s t o p h . denzler@fhnw . ch ’ ) ,
( 9 , ’ c l a u d i o . s c h n e i d e r @ s t u d e n t s . fhnw . ch ’ ) ,
( 7 , ’ dominik . gruntz@fhnw . ch ’ ) ,
( 3 , ’ g e r a r d . b i e l i @ s t u d e n t s . fhnw . ch ’ ) ,
(1 , ’ gery ’ ) ,
( 8 , ’ l a u r i n . m u e l l e r @ s t u d e n t s . fhnw . ch ’ ) ,
( 6 , ’ martin . kropp@fhnw . ch ’ ) ,
( 1 0 , ’ maxim . moschko@students . fhnw . ch ’ ) ,
( 1 4 , ’ m i c h a e l . f r a n k @ s t u d e n t s . fhnw . ch ’ ) ,
( 1 1 , ’ thomas . hartmann@students . fhnw . ch ’ ) ;
−−
−− Dumping d a t a f o r t a b l e ‘ a u t h z s v n u s e r p e r m i s s i o n ‘
−−
A.3. SQL: Datenbankabfrage
SELECT
a u t h z s v n r e p o p a t h . path AS r e p o s i t o r y p a t h , a u t h z s v n u s e r p e r m i s s i o n . read ,
a u t h z s v n u s e r p e r m i s s i o n . write ,
a u t h z s v n u s e r p e r m i s s i o n . recursive
FROM
a u t h z s v n r e p o s i t o r y INNER JOIN
a u t h z s v n r e p o p a t h ON
a u t h z s v n r e p o p a t h . r e p o s i t o r y i d = a u t h z s v n r e p o s i t o r y . i d AND
a u t h z s v n r e p o s i t o r y . name = ’ projectSVN ’ INNER JOIN
a u t h z s v n u s e r p e r m i s s i o n ON
a u t h z s v n u s e r p e r m i s s i o n . r e p o s i t o r y p a t h i d = a u t h z s v n r e p o p a t h . i d INNER JOIN
a u t h z s v n u s e r ON
a u t h z s v n u s e r . i d = a u t h z s v n u s e r p e r m i s s i o n . u s e r i d AND
a u t h z s v n u s e r . name = ’ g e r y ’
UNION SELECT
a u t h z s v n r e p o p a t h . path AS r e p o s i t o r y p a t h ,
a u t h z s v n g r o u p p e r m i s s i o n . read ,
a u t h z s v n g r o u p p e r m i s s i o n . write ,
a u t h z s v n g r o u p p e r m i s s i o n . recursive
FROM
a u t h z s v n r e p o s i t o r y INNER JOIN
a u t h z s v n r e p o p a t h ON
a u t h z s v n r e p o p a t h . r e p o s i t o r y i d = a u t h z s v n r e p o s i t o r y . i d AND
a u t h z s v n r e p o s i t o r y . name = ’ projectSVN ’ INNER JOIN
a u t h z s v n g r o u p p e r m i s s i o n ON
a u t h z s v n g r o u p p e r m i s s i o n . r e p o s i t o r y p a t h i d = a u t h z s v n r e p o p a t h . i d INNER JOIN
authz svn groupmembership ON
authz svn groupmembership . g r o u p i d = a u t h z s v n g r o u p p e r m i s s i o n . g r o u p i d INNER
JOIN
29 a u t h z s v n u s e r ON
30 a u t h z s v n u s e r . i d = authz svn groupmembership . u s e r i d AND
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
31
a u t h z s v n u s e r . name = ’ g e r y ’ ORDER BY r e p o s i t o r y p a t h DESC
A.4. Bash: Buildscript Apache Modul
1 #! / b i n / b a s h
2
3 / e t c / i n i t . d/ apache2 s t o p
4 cd mysql
5
6 #a p x s i s t h e apache b u i l d h e l p e r which i s used t o b u i l d modules . GCC d o e s not
work ! ! ! ! !
7
8 #c o m p i l e t h e module
9 apxs2 −c −I / u s r / i n c l u d e / s u b v e r s i o n −1 −I
..
−L / u s r / l i b / − l m y s q l c l i e n t
mod authz svn db mysql . c
10
11 #i n s t a l l t h e module
12 apxs2 − i e −n a u t h z s v n d b m y s q l m o d u l e mod authz svn db mysql . l a
13
14 / e t c / i n i t . d/ apache2 s t a r t
15 cd . .
A.5. Konfigurationsdatei: Apache
1
2
3
4
5
6
7
8
9
10
11
12
#−−−−−−−−−−−−−−−−−−−−−−−−−−
#Begin f i n a l i m p l e m e n t a t i o n
#−−−−−−−−−−−−−−−−−−−−−−−−−−
<A u t h n P r o v i d e r A l i a s l d a p openldap>
#∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
#A u t h e n t i c a t i o n d a t a f o r t h e OpenLDAP s e r v e r
#∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
AuthLDAPBindDN ”CN=admin , dc=imvs , dc=t e c h n i k , dc=fhnw , dc=ch ”
AuthLDAPBindPassword pw
AuthLDAPURL l d a p : / / l o c a l h o s t : 3 8 9 /DC=imvs ,DC=t e c h n i k ,DC=fhnw ,DC=ch ? cn ? sub
? ( o b j e c t C l a s s=p e r s o n ) NONE
13 </A u t h n P r o v i d e r A l i a s >
14
15 <A u t h n P r o v i d e r A l i a s l d a p ad−stud>
16
#∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
17
#A u t h e n t i c a t i o n d a t a f o r t h e edu domain
18
#∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
19
20
#For AD, a b i n d DN and password i s n e c e s s a r y b e c a u s e anonymous b i n d i n g
21
22
23
24
25
26
27
isn ’ t allowed f o r searching
AuthLDAPBindDN user@edu . ds . fhnw . ch
AuthLDAPBindPassword pw
#c h e c k t h e two redunda nt domain c o n t r o l l e r s
#3268 i s t h e g l o b a l c a t a l o g s e r v e r p o r t . This one i s needed t o r e l i a b l e
s e a r c h t h e domain . I f p o r t 389 i s used , t h e d i r e c t o r y can ’ t be
#s e a r c h e d r e l i a b l e
AuthLDAPURL ”l d a p : / / dsemu11 . edu . ds . fhnw . ch : 3 2 6 8 dsemu12 . edu . ds . fhnw . ch
: 3 8 9 / ou=edu , ou=prod ,DC=edu ,DC=ds ,DC=fhnw ,DC=ch ? m a i l ? sub ? ( o b j e c t C l a s s=
p e r s o n ) ” NONE
28 </A u t h n P r o v i d e r A l i a s >
29
30 <A u t h n P r o v i d e r A l i a s l d a p ad−adm>
31
#∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
32
#A u t h e n t i c a t i o n d a t a f o r t h e adm domain
33
#∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
34
35
#For AD, a b i n d DN and password i s n e c e s s a r y b e c a u s e anonymous b i n d i n g
36
37
38
39
40
isn ’ t allowed f o r searching
AuthLDAPBindDN user@edu . ds . fhnw . ch
AuthLDAPBindPassword pw
#remark : p o r t 3268 i s n ’ t r e a c h a b l e on t h e adm domain s e r v e r
AuthLDAPURL ”l d a p : / / dsamu11 . i c t . fhnw . ch : 3 8 9 dsamu12 . i c t . fhnw . ch : 3 8 9 /OU=
adm ,OU=Prod ,DC=adm ,DC=ds ,DC=fhnw ,DC=ch ? m a i l ? sub ? ( o b j e c t C l a s s=p e r s o n ) ”
NONE
41 </A u t h n P r o v i d e r A l i a s >
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<L o c a t i o n / r e p o s >
#∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
#This l o c a t i o n r e p r e s e n t s t h e f i n a l i m p l e m e n t a t i o n .
#I t p e r m i t s a u t h e n t i c a t i o n a g a i n s t t h e openLDAP S e r v e r
#and t h e two AD domains edu and adm
#∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
#SVN s e c t i o n :
DAV svn
SVNParentPath / data / t e s t R e p o s
#A u t h e n t i c a t i o n s e c t i o n
A u t h B a s i c P r o v i d e r openldap ad−s t u d ad−adm
AuthType B a s i c
AuthName ”SVN Anmeldung ”
r e q u i r e v a l i d −u s e r
#A u t o r i z a t i o n
AuthzSVNDBHost ” l o c a l h o s t ”
AuthzSVNDBName ”svnperm ”
AuthzSVNDBUsername ”svn mod ”
AuthzSVNDBPassword ”pw”
</L o c a t i o n >
#−−−−−−−−−−−−−−−−−−−−−−−−
#End f i n a l i m p l e m e n t a t i o n
#−−−−−−−−−−−−−−−−−−−−−−−−
B. Anhang: Pflichtenheft
Literaturverzeichnis
[1] Virtual Home Organization: http://www.switch.ch/aai/join/vho.html, 30.03.2009
[2] Penrose Server 1.2.4: http://docs.safehaus.org/.../PENROSE12/Penrose+1.2+Release, 14.05.2009
[3] mod authz svn db: http://christopher.wojno.com/.../what-is-mod authz svn db, 31.07.2009
[4] Penrose Demo: http://docs.safehaus.org/display/PENROSE10/Demo, 14.05.2009
[5] mod authn alias: http://httpd.apache.org/docs/2.2/mod/mod authn alias.html, 02.08.2009
[6] SVN Book: http://svnbook.red-bean.com/nightly/de/svn-book.html, 31.07.2009
[7] mod ssl: http://httpd.apache.org/docs/2.2/mod/mod ssl.html, 03.08.2009
[8] mod auth basic: http://httpd.apache.org/docs/2.2/mod/mod auth basic.html, 03.08.2009
[9] mod ldap: http://httpd.apache.org/docs/2.2/mod/mod ldap.html, 03.08.2009
[10] mod authnz ldap: http://httpd.apache.org/docs/2.2/mod/mod authnz ldap.html, 03.08.2009
[11] mod dav: http://httpd.apache.org/docs/2.2/mod/mod dav.html, 03.08.2009
[12] Subversion: http://subversion.tigris.org/getting.html, 03.08.2009
[13] Nick Kew: The Apache Modules Book; Prentice Hall, Jan 2007
51

Documentos relacionados