Diese Dokumentation wurde zur Beschreibung der Serie 1.6.x von Subversion erstellt. Falls Sie eine unterschiedliche Version von Subversion einsetzen, sei Ihnen dringend angeraten, bei http://www.svnbook.com/ vorbeizuschauen und stattdessen die zu Ihrer Version von Subversion passende Version dieser Dokumentation heranzzuiehen.
Manchmal müssen Sie verstehen, wie Ihr Subversion-Client mit
seinem Server kommuniziert. Die Netzwerkschicht von Subversion
ist abstrahiert, was bedeutet, dass die Clients von Subversion
das gleiche allgemeine Verhalten an den Tag legen, egal mit
welcher Art von Server sie zusammenarbeiten. Ob sie im
HTTP-Protokoll (http://
) mit dem Apache
HTTP-Server oder im maßgeschneiderten Subversion Protokoll
(svn://
) mit svnserve
sprechen, das grundlegende Netzwerkmodell ist das selbe. In
diesem Abschnitt werden wir die Grundlagen dieses
Netzwerkmodells erläutern, auch wie Subversion die
Anmeldung und die Berechtigung handhabt.
Den größten Teil seiner Zeit verbringt der Subversion-Client mit der Verwaltung von Arbeitskopien. Wenn er jedoch Informationen von einem entfernten Projektarchiv benötigt, stellt er eine Anfrage über das Netz, und der Server erwiedert mit einer passenden Antwort. Die Details des Netzwerkprotokolls sind dem Benutzer verborgen – der Client versucht, auf einen URL zuzugreifen, und abhänging vom URL-Schema wird ein bestimmtes Protokoll verwendet, um mit dem Server Verbindung aufzunehmen (siehe „Projektarchive adressieren“).
Tipp | |
---|---|
Rufen Sie |
Wenn der Server-Prozess eine Anfrage eines Clients erhält, verlangt er häufig, dass der Client sich identifiziert. Er sendet eine Authentisierungsaufforderung an den Client und der Client antwortet, indem er Zugangsdaten zurückschickt. Sobald die Anmeldung abgeschlossen ist, antwortet der Server mit den ursprünglich vom Client angefragten Informationen. Beachten Sie, dass dieses System sich von solchen wie CVS unterscheidet, bei denen der Client von sich aus dem Server Zugangsdaten anbietet („sich anmeldet“), bevor überhaupt eine Anfrage erfolgt. In Subversion werden die Zugangsdaten vom Server „eingezogen“, indem der Client zum passenden Zeitpunkt aufgefordert wird, und nicht indem der Client sie „abliefert“. Das macht gewisse Operationen eleganter. Wenn ein Server beispielsweise so konfiguriert ist, dass jedem auf der Welt erlaubt ist, ein Projektarchiv zu lesen, wird der Server niemals eine Authentisierungsaufforderung ausgeben, wenn ein Client svn checkout versucht.
Falls die einzelnen Netzwerkanfragen des Clients zur
Erstellung einer neuen Revision im Projektarchiv führen (z.B.
svn commit), verwendet Subversion den mit
diesen Anfragen verknüpften authentifizierten Benutzernamen
als Autor der Revision. Das bedeutet, dass der Name des
authentifizierten Benutzers als Wert der Eigenschaft
svn:author
der neuen Revision zugewiesen
wird (siehe „Subversion-Eigenschaften“). Falls der
Client nicht authentifiziert wurde (d.h., falls der Server
niemals eine Authentisierungsaufforderung ausgegeben hat),
bleibt die Revisionseigenschaft svn:author
leer.
Viele Subversion-Server sind so konfiguriert, dass sie eine Authentifikation benötigen. Manchmal sind anonyme Leseoperationen erlaubt, wohingegen Schreiboperationen authentifiziert sein müssen. In anderen Fällen benötigen Lese- und Schreiboperationen gleichermaßen eine Authentifikation. Die unterschiedlichen Server-Optionen von Subversion verstehen unterschiedliche Authentifikationsprotokolle, aus Anwendersicht jedoch bedeutet Authentifikation normalerweise Anwendernamen und Passwörter. Subversion-Clients bieten verschiedene Möglichkeiten, die Zugangsdaten eines Anwenders abzurufen und zu speichern, vom interaktiven Abfragen des Anwendernamens und Passworts bis zu verschlüsselten oder unverschlüsselten Zwischenspeichern auf der Platte.
Der sicherheitsbewussten Leser wird an dieser Stelle sofort einen Grund für Besorgnis erkennen. „Passwörter auf der Platte speichern? Das ist schrecklich! So etwas sollte man nie machen!“ Keine Angst! Das hört sich schlimmer an, als es ist. Die folgenden Abschnitte erörtern die verschiedenen Arten der Zugangsdatenzwischenspeicherung, die Subversion verwendet, wann es sie verwendet und wie man diese Funktionalität ganz oder teilweise abstellen kann.
Subversion bietet Abhilfe gegen die lästige Notwendigkeit, dass Anwender jedes Mal Ihren Benutzernamen und das Passwort eintippen müssen. Standardmäßig werden die Zugangsdaten mit einer Kombination des Rechnerenamens des Servers, dem Port und der Zugangsregion auf Platte gespeichert, sobald der Kommandozeilen-Client erfolgreich auf eine Authentisierungsaufforderung des Servers antwortet. Auf diesen Zwischenspeicher wird dann künftig zugegriffen, was eine erneute Eingabe der Zugangsdaten durch den Anwender vermeidet. Falls scheinbar passende Zugangsdaten nicht im Zwischenspeicher verfügbar sind oder die zwischengespeicherten Daten nicht authentifiziert werden können, wird der Client den Anwender wieder standardmäßig zur Eingabe der notwendigen Informationen auffordern.
Die Entwickler von Subversion erkennen, das auf Platte zwischengespeicherte Zugangsdaten ein Sicherheitsrisiko darstellen können. Um dieses zu verringern, arbeitet Subversion mit den durch das Betriebssystem und die Umgebung bereitgestellten Mechanismen, um das Risiko der Kompromittierung dieser Daten zu minimieren.
Unter Windows speichert der Subversion-Client
Passwörter im Verzeichnis
%APPDATA%/Subversion/auth/
.
Unter Windows 2000 und dessen Nachfolger verwendet der
Subversion-Client die Standard-Kryptographiedienste von
Windows, um das Passwort auf Platte zu verschlüsseln.
Da der Schlüssel durch Windows verwaltet wird und mit
den benutzereigenen Zugangsdaten verknüpft ist, kann nur
der Benutzer selbst das zwischengespeicherte Passwort
entschlüsseln. (Beachten Sie, dass beim Zurücksetzen des
Windows-Benutzerkonto-Passworts durch einen
Administrator alle zwischengespeicherten Passwörter
nicht mehr zu entschlüsseln sind. Der Subversion-Client
verhält sich dann so, als wären sie nicht vorhanden und
fragt die Passwörter gegebenenfalls ab.)
Unter Mac OS X speichert der Subversion-Client auf ähnliche Weise alle Passwörter des Projektarchivs im Login-Keyring (durch den Keychain-Dienst verwaltet), der durch das Passwort des Benutzerkontos geschützt ist. Benutzerseitige Einstellungen können zusätzliche Richtlinien in Kraft setzen, etwa, dass das Benutzerkontopasswort jedesmal eingegeben werden muss, wenn das Passwort von Subversion verwendet wird.
Für andere Unix-ähnliche Betriebssysteme existiert
kein einzelner standardisierter
„Schlüsselring“-Dienst. Der
Subversion-Client weiß aber, wie er Passwörter sicher mit
den Diensten „GNOME Keyring“ und „KDE
Wallet“ speichern kann. Bevor unverschlüsselte
Passwörter im Zwischenspeicherbereich
~/.subversion/auth/
gespeichert
werden, fragt der Subversion-Client den Anwender, ob er
das machen darf. Beachten Sie, dass der
auth/
-Bereich zur
Zwischenspeicherung immer noch über Zugangsrechte
geschützt ist, so dass nur der Anwender (Eigentümer) die
dortigen Daten lesen kann und nicht die gesamte Welt.
Die betriebssystemeigenen Dateizugriffsrechte schützen
die Passwörter vor anderen nicht-administrativen
Anwendern auf dem selben System, vorausgesetzt, sie
haben keinen direkten physischen Zugriff zum
Speichermedium des Heimverzeichnisses oder dessen
Sicherungen.
Natürlich sind keine dieser Mechanismen perfekt für den echt Paranoiden. Für die Leute, die Bequemlichkeit für die größte Sicherheit opfern möchten, bietet Subversion verschiedene Möglichkeiten, das System der Zwischenspeicherung ganz abzuschalten.
Wenn Sie eine Subversion-Operation durchführen, die von Ihnen eine Authentisierung verlangt, versucht Subversion standardmäßig, Ihre Zugangsdaten verschlüsselt auf Platte zwischenzuspeichern. Auf manchen Systemen kann es sein, dass Subversion Ihre Zugangsdaten nicht verschlüsseln kann. In diesen Situationen, fragt Subversion nach, ob Sie möchten, dass die Zugangsdaten im Klartext auf Platte gespeichert werden:
$ svn checkout https://host.example.com:443/svn/private-repo ----------------------------------------------------------------------- ACHTUNG! Ihr Password für den Anmeldungstext (realm) <https://host.example.com:443> Subversion Repository kann auf der Platte nur unverschlüsselt gespeichert werden! Es wird empfohlen, falls möglich Ihr System so zu konfigurieren, dass Subversion Passwörter verschlüsselt speichern kann. Siehe die Dokumentation für Details. Sie können ein weiteres Anzeigen dieser Warnung verhindern, indem Sie den Wert der Option »store-plaintext-passwords« in »/tmp/servers« entweder auf »ja« oder »nein« setzen. ----------------------------------------------------------------------- Passphrase unverschlüsselt speichern (ja/nein)?
Wenn Sie die Bequemlichkeit nutzen wollen, nicht ständig
für künftige Operationen Ihr Passwort erneut eingeben zu
müssen, können Sie mit ja
auf diese
Aufforderung antworten. Falls Sie Bedenken haben, Ihr
Passwort im Klartext zwischenzuspeichern und nicht jedesmal
erneut danach gefragt werden wollen, können Sie die
Zwischenspeicherung von Passwörtern im Klartext entweder
permanent oder abhängig vom Server abstellen.
Warnung | |
---|---|
Wenn Sie sich Gedanken dazu machen, wie Sie das Zwischenspeichern von Passwörtern unter Subversion verwenden wollen, sollten Sie die Richtlinien berücksichtigen, die für Ihren Rechner gelten – viele Firmen haben strenge Regeln für die Speicherung der Zugangsdaten von Mitarbeitern. |
Um das Zwischenspeichern von Passwörtern im Klartext
permanent zu unterbinden, fügen Sie die Zeile
store-plaintext-passwords = no
im
Abschnitt [global]
der
Konfigurationsdatei servers
auf dem
lokalen Rechner ein. Um die Zwischenspeicherung von
Passwörtern für einen bestimmten Server zu unterbinden,
verwenden Sie dieselbe Einstellung im entsprechenden
Gruppenabschnitt der Konfigurationsdatei
servers
. (Für Details, siehe
„Konfigurationsoptionen“ in
Kapitel 7, Subversion an Ihre Bedürfnisse anpassen.)
Um die Zwischenspeicherung von Passwörtern vollständig
für irgendeine einzelne Subversion-Kommandozeilenoperation
abzuschalten, übergeben Sie dem Befehl die Option
--no-auth-cache
. Um die Zwischenspeicherung
permanent vollständig zu unterbinden, fügen Sie der
Konfigurationsdatei für Subversion auf dem lokalen Rechner
die Zeile store-passwords = no
hinzu.
Manchmal möchten Benutzer bestimmte Zugangsdaten aus dem
Zwischenspeicher entfernen. Hierzu müssen Sie in den
auth/
-Bereich gehen und die entsprechende
Zwischenspeicherdatei manuell löschen. Die Zugangsdaten werden
in individuellen Dateien zwischengespeichert; falls Sie in
jede Datei hineinsehen, werden Sie Schlüssel und Werte
entdecken. Der Schlüssel svn:realmstring
beschreibt den bestimmten Anmeldebereich, zu dem die Datei
gehört:
$ ls ~/.subversion/auth/svn.simple/ 5671adf2865e267db74f09ba6f872c28 3893ed123b39500bca8a0b382839198e 5c3c22968347b390f349ff340196ed39 $ cat ~/.subversion/auth/svn.simple/5671adf2865e267db74f09ba6f872c28 K 8 username V 3 joe K 8 password V 4 blah K 15 svn:realmstring V 45 <https://svn.domain.com:443> Joe's repository END
Sobald Sie die passende Datei gefunden haben, können Sie sie einfach löschen.
Alle Kommandozeilenaktionen von Subversion erlauben die
Optionen --username
und
--password
, die es Ihnen ermöglichen, Ihren
Anwendernamen bzw. Ihr Passwort anzugeben, damit Subversion
Sie nicht nach diesen Informationen fragen muss. Das ist
besonders dann praktisch, wenn Sie Subversion aus einem
Script heraus aufrufen wollen, und Sie sich nicht darauf
verlassen können, dass Subversion in der Lage ist, gültige
zwischengespeicherte Zugangsdaten für Sie zu finden. Diese
Optionen sind auch dann hilfreich, falls Subversion bereits
Anmeldedaten von Ihnen zwischengespeichert hat, aber diese
nicht von Ihnen verwendet werden sollen. Vielleicht teilen
sich mehrere Systemanwender ein Zugangskonto, haben jedoch
verschiedene Identitäten unter Subversion. Sie können die
Option --password
weglassen, falls Sie
möchten, dass Subversion nur den angegebenen Anwendernamen
verwenden soll, Sie aber trotzdem auffordern soll, das
Passwort dieses Anwenders einzugeben.
Ein letztes Wort zum Anmeldungsverhalten von
svn, im Besonderen bezüglich der Optionen
--username
und --password
.
Viele Unterbefehle des Clients akzeptieren diese Optionen,
jedoch ist es wichtig, zu verstehen, dass durch deren
Verwendung nicht automatisch
Zugangsdaten an den Server gesendet werden. Wie bereits
erörtert wurde, werden die Zugangsdaten vom Server
„eingezogen“, falls er es für notwendig hält; der
Client kann sie nicht nach belieben „abliefern“.
Wurde ein Benutzername und/oder ein Passwort als Optionen
mitgegeben, werden sie dem Server nur auf Verlangen vorgelegt.
Üblicherweise werden diese Optionen verwendet, um sich als ein
anderer Benutzer zu authentisieren als derjenige, den
Subversion standardmäßig gewählt hätte (etwa Ihr Anmeldename),
oder falls Sie die interaktive Abfrage vermeiden möchten (etwa
beim Aufruf von svn aus einem
Skript).
Anmerkung | |
---|---|
Ein verbreiteter Fehler ist die Fehlkonfigurierung eines
Servers, so dass er nie eine Aufforderung zur
Authentisierung ausgibt. Falls Benutzer dann die Optionen
|
An dieser Stelle sei abschließend zusammengefasst, wie sich ein Subversion-Client bei Erhalt einer Aufforderung zur Authentisierung verhält.
Zunächst prüft der Client, ob der Benutzer
irgendwelche Zugangsdaten als Kommandozeilenoptionen
(--username
und/oder
--password
) angegeben hat. Falls ja,
versucht der Client, diese Zugangsdaten zur
Authentisierung gegenüber dem Server zu
verwenden.
Falls keine Zugangsdaten als Kommandozeilenoptionen
angegeben worden sind oder die übergebenen ungültig waren,
verwendet der Client den Rechnernamen des Servers, den
Port und den Anmeldebereich, um damit im
Laufzeitkonfigurationsbereich auth/
nach passenden zwischengespeicherten Zugangsdaten zu
suchen. Falls solche vorhanden sind, probiert er, sich
hiermit zu authentisieren.
Falls letztendlich alle vorherigen Mechanismen keine
erfolgreiche Authentisierung des Benutzers gegen den
Server bewirken, greift der Client auf eine interaktive
Abfrage der Zugangsdaten zurück (sofern ihm das nicht
durch die Option --non-interactive
oder
client-spezifischer Äquivalente untersagt wurde).
Falls sich der Client durch irgendeine dieser Methoden erfolgreich authentisiert, versucht er, die Zugangsdaten auf der Platte zwischenzuspeichern (sofern der Benutzer dieses Verhalten nicht, wie oben beschrieben, unterbunden hat).