fragen stichworte

Authentifizieren Sie Subversion-Benutzer mit svnserve UND SSH

Bei der Bereitstellung meines Subversion-Servers möchte ich nicht für jeden Benutzer ein Systemkonto erstellen. Daher habe ich mir eine andere Authentifizierungsmethode überlegt.

Ich möchte nur ein Systemkonto mit SSH verwenden und dann Benutzer mit svnserve authentifizieren.

Ich habe versucht, SSH so zu konfigurieren, dass jeder Benutzer einen anderen Schlüssel und einen bestimmten svnserve -Befehl mit einem bestimmten --tunnel-user hat. Ich habe diese Benutzer auch meiner passwd -Datei in meinem Repository hinzugefügt.

Mein Problem ist, dass svnserve die passwd -Datei nicht zur Authentifizierung von --tunnel-user -Namen verwendet, sondern Lesen und Schreiben erlaubt, solange die SSH-Authentifizierung durchgeführt wurde.

Gibt es eine Möglichkeit, svnserve zu erzwingen, um zu verhindern, dass ein Benutzer, der nicht in passwd ist, in einem Repository liest oder ein Commit ausführt?

bearbeitet:

Wenn dies mit meinem Setup nicht möglich ist, gibt es eine andere Möglichkeit, Subversion über SSH bereitzustellen, ohne für jeden Benutzer ein Systemkonto zu erstellen?

antworten

Im Tunnelmodus wird die svnserve-Authentifizierung zugunsten der SSH-Authentifizierung von Entwurf übersprungen.

"... the connection is considered to be pre-authenticated ..."

Sie versuchen, diesen Ansatz dahin zu bringen, dass Sie das tun, was es nicht tun soll. Verwenden Sie stattdessen ein WebDAV-Setup über SSL (mit in der Authentifizierung des Webservers definierten Benutzern).

Ich habe eine einfache Lösung gefunden. Obwohl svnserve die Authentifizierung nicht erneut mit einem SSH-authentifizierten Benutzer durchführen kann, kann er es dennoch mit der authz-Datei autorisieren.

Also hier mein Setup:

  • Benutzer svn ist das Hauptkonto und sein Hauptkonto ist /var/svn
  • Alle Benutzer verwenden ein svn Konto für SSH auf dem SVN-Server
  • Das Konto
  • svn enthält alle öffentlichen Schlüssel aller Benutzer in seinem .ssh/authorized_keys
  • Jedem öffentlichen Schlüssel wird command="svnserve -r/var/svn -t --tunnel-user=<user1>" vorangestellt (er ist eigentlich länger, da ich auch Tunneling und Co. deaktivieren).
  • Jedes Repository in /var/svn hat authz-db = authz in conf/svnserve.conf
  • Jedes Repository hat eine eigene conf/authz -Datei, um autorisierte Benutzer aufzulisten:
[groups]
developers = <user1>,<user2>

[/]
@developers = rw
* =

Jetzt kann ich einen Benutzer hinzufügen, indem Sie einfach einen neuen öffentlichen Schlüssel in /var/svn/.ssh/authorized_keys mit einem neuen Namen --tunnel-user hinzufügen und diesen Benutzernamen allen autorisierten Repositorys hinzufügen.