Comment puis-je changer un ensemble existant de référentiels Subversion pour utiliser ActiveDirectory? (svnserve / windows)

12

J'ai un ensemble de référentiels Subversion privés sur une boîte Windows Server 2003 auxquels les développeurs accèdent via SVNServe via le protocole svn: //. Actuellement, nous utilisons les fichiers authz et passwd pour chaque référentiel pour contrôler l'accès, mais avec le nombre croissant de référentiels et de développeurs, j'envisage de passer à l'utilisation de leurs informations d'identification depuis ActiveDirectory. Nous fonctionnons dans une boutique entièrement Microsoft et utilisons IIS au lieu d'Apache sur tous nos serveurs Web, donc je préférerais continuer à utiliser SVNServe si possible.

En plus d'être possible, je suis également préoccupé par la façon de migrer nos référentiels afin que l'historique des utilisateurs existants soit mappé sur les comptes ActiveDirectory appropriés. Gardez également à l'esprit que je ne suis pas l'administrateur réseau et que je ne connais pas très bien ActiveDirectory, je devrai donc probablement passer par d'autres personnes pour obtenir les modifications apportées dans ActiveDirectory si nécessaire.

Quelles sont mes options?

MISE À JOUR 1: Il ressort de la documentation SVN qu'en utilisant SASL je devrais pouvoir obtenir SVNServe pour s'authentifier en utilisant ActiveDirectory. Pour clarifier, la réponse que je recherche est de savoir comment configurer SVNServe (si possible) pour utiliser ActiveDirectory pour l'authentification, puis comment modifier un référentiel existant pour remapper les utilisateurs svn existants vers leurs comptes de connexion de domaine ActiveDirectory.

MISE À JOUR 2: Il semble que la prise en charge SASL dans SVNServe fonctionne à partir d'un modèle de plug-in et la documentation ne s'affiche qu'à titre d'exemple. En regardant la bibliothèque Cyrus SASL, il semble qu'un certain nombre de "mécanismes" d'authentification sont pris en charge, mais je ne sais pas lequel doit être utilisé pour la prise en charge d'ActiveDirectory et je ne trouve aucune documentation à ce sujet.

MISE À JOUR 3: D'accord, il semble que pour communiquer avec ActiveDirectory, je cherche à utiliser saslauthd au lieu de sasldb pour la propriété auxprop_plugin . Malheureusement, il semble que, selon certains articles (éventuellement obsolètes et inexacts), saslauthd ne s'appuie pas sur Windows et ces efforts sont considérés comme un travail en cours .

MISE À JOUR 4: Le dernier message que j'ai trouvé sur ce sujet donne l' impression que les bons fichiers binaires () sont disponibles via la bibliothèque Kerberos du MIT, mais il semble que l'auteur de ce message sur Nabble.com ait toujours des problèmes pour faire fonctionner les choses .

MISE À JOUR 5: Il ressemble aux discussions TortoiseSVN et aussi à ce post sur svn.haxx.seque même si saslgssapi.dll ou les fichiers binaires nécessaires sont disponibles et configurés sur le serveur Windows, les clients auront également besoin de la même personnalisation pour fonctionner avec ces référentiels. Si cela est vrai, nous ne pourrons obtenir la prise en charge d'ActiveDirectory à partir d'un client Windows que si des modifications sont apportées dans ces clients, telles que TortoiseSVN et la construction CollabNet des fichiers binaires du client pour prendre en charge de tels schémas d'authentification. Bien que ce soit ce que ces articles suggèrent, cela est contradictoire avec ce que j'ai supposé à l'origine d'après d'autres lectures, étant que la compatibilité SASL ne devrait nécessiter aucune modification sur le client, mais plutôt que le serveur soit configuré pour gérer le mécanisme d'authentification. Après avoir lu un peu plus attentivement le document sur Cyrus SASL dans Subversionla section 5 stipule que "les clients 1.5+ avec prise en charge Cyrus SASL pourront s'authentifier auprès de serveurs 1.5+ avec SASL activé, à condition qu'au moins un des mécanismes pris en charge par le serveur soit également pris en charge par le client." Il est donc clair que la prise en charge de GSSAPI (qui, je crois, est requise pour Active Directory) doit être disponible au sein du client et du serveur.

Je dois dire que j'apprends beaucoup trop sur les aspects internes de la façon dont Subversion gère l'authentification que je ne l'ai jamais voulu. Et malheureusement, je cherchais simplement une réponse pour savoir si je pouvais prendre en charge l'authentification Active Directory lorsque j'utilisais SVNServe sur un serveur Windows et y accédais à partir de clients Windows. Selon la documentation officielle, cela semble possible, mais vous pouvez voir que la configuration n'est pas triviale, voire même possible.

MISE À JOUR: 6: Étant donné que le développement sur Subversion 1.7 se termine, quelqu'un pourrait-il ajouter quelque chose à savoir si Subversion 1.7 améliorera la situation pour que SVNServe s'authentifie à l'aide d'Active Directory?

jpierson
la source
alors regardez ici .. stackoverflow.com/questions/333146 mais cela me semble tout à fait un hack. vous pouvez obtenir IIS côte à côte avec apache [en exécutant le deuxième par exemple sur un port différent ou une ip différente]
pQd
2
+1 pour cette question. C'est quelque chose que je continue de vouloir trouver une réponse et qui échoue. La plupart des gens semblent trouver apache acceptable (généralement sous forme visuelle). Mais c'est pénible si vous avez déjà beaucoup de références svn: //. Et il me semble juste préférable d'exécuter svnserve pour l'accès au référentiel plutôt qu'apache.
Jim T
1
+1 voulait vraiment le faire il y a longtemps aussi, je déteste vraiment devoir exécuter apache sur une boîte Windows juste par principe quand cela ne devrait pas être nécessaire ... des points supplémentaires pour combiner cela avec un accès SSL sur IIS ^ ^
Oskar Duveborn
@Oskar - Je pense que ce serait génial si quelqu'un créait un module WAS pour IIS7 et plus pour héberger à la fois le protocole http basé sur Apache ainsi que le protocole svnserve dans IIS. Si j'avais plus de temps, je me plongerais dans la création de quelque chose comme ça dans .NET en tant que projet open source.
jpierson

Réponses:

5

Comme déjà mentionné, VisualSVN Server est l'outil que vous souhaitez. C'est un package tout-en-un pour Windows qui utilise juste Apache à l'intérieur - vous ne le sauriez jamais à moins que vous ne fassiez un tour dans les dll qu'il installe, pour tout le monde, c'est un service Windows qui a un composant logiciel enfichable mmc pour administrer. Vous pouvez changer le port sur lequel il s'exécute si vous avez déjà pris le port 80.

Je comprends que le support sasl via svnserve est en cours d'élaboration.

gbjbaanb
la source
S'il y avait un moyen de faire fonctionner le service Apache via IIS ou de les faire utiliser le port 80, ce serait parfait. Malheureusement pour ceux qui veulent s'en tenir à svnserve ou utiliser IIS, il ne semble pas y avoir beaucoup d'autres options que d'attendre pour voir si le travail sur le support sasl pour svnserve se concrétise. Si cela ne vous pose pas trop de problèmes, pourriez-vous créer un lien vers un endroit où nous pourrons obtenir des informations à jour sur cette fonctionnalité? Le projet SVN, bien que plus récent, ne semble pas communiquer ses efforts et progresser très bien à la communauté via son bug tracker.
jpierson
Je suis curieux de savoir si vous pourriez avoir des informations sur le fait que le support sasl sur lequel / qui a été travaillé pour svnserve a porté ses fruits. Pouvons-nous nous attendre à voir des améliorations dans Subversion 1.7?
jpierson
1

j'utilise apache avec svn fonctionnant sur debian linux autorisant contre un serveur d'annuaire actif. les clients se connectent au référentiel via le protocole http. si cette configuration vous convient, continuez à lire.

cela devrait aussi fonctionner sous apache pour windows mais je ne l'ai jamais essayé. ce qui suit est spécifique à Debian mais devrait fonctionner de la même manière sous Windows / autres distributions; vous ne perdrez pas votre historique svn lors de la migration ...

installer le logiciel requis:

apt-get install libapache2-svn subversion apache2

dans la configuration du vhost d'apache [les liens symboliques vers ceux-ci peuvent être trouvés dans / etc / apache2 / sites-enabled]. à l'intérieur de VirtualHost, ajoutez:

<Location /svn>
        DAV svn
        #change this to actual path
        SVNPath /full/path/to/your/current/svn/directory

        AuthType Basic
        AuthName "SVN Server"
        AuthBasicProvider ldap
        AuthzLDAPAuthoritative Off

        # provide here credentials for existing domain user. 
        # in my case domain is called domainName and user - user
        AuthLDAPBindDN "domainName\user"
        AuthLDAPBindPassword usersPassword
        # put here ip of the domain controler and full path to OU containing accounts
        AuthLDAPURL ldap://10.11.22.33:389/ou=Users,dc=domainName,dc=companyName,dc=whatever?sAMAccountName?sub?(objectClass=*)
        Require valid-user
        SVNAutoversioning on

        AuthzSVNAccessFile /etc/apache2/svn_authz
</Location>

assurez-vous qu'apache charge le module ldap:

cd /etc/apache2/mods-enabled
ln -s ../mods-available/authnz_ldap.load
ln -s ../mods-available/ldap.load
/etc/init.d/apache2 reload

assurez-vous qu'apache peut modifier les fichiers dans le référentiel svn:

chown www-data:www-data -R /full/path/to/your/current/svn/directory

votre svn_authz doit contenir des règles indiquant qui peut accéder à quoi. dans mon cas:

[groups]
ops=jack.brown,john.smith

[/]
* = rw

[/priv]
* =
@ops = rw

vous pouvez en savoir plus sur la syntaxe de ce fichier ici .

si vous êtes arrivé jusque-là - vos utilisateurs peuvent vérifier à partir de http: //server.address/svn/ en utilisant n'importe quel client svn [tortoise / cmdline / visual svn], ils verront tout l'historique et continueront à lire / écrire dessus.

pQd
la source
1
L'utilisation d'Apache peut être acceptable s'il n'y a pas d'autres alternatives, mais à l'heure actuelle, nous avons déjà plusieurs URL svn: // référencées dans nos forums internes et notre logiciel de suivi des bogues et préférerions continuer à utiliser ces URL. Nous avons également déjà ouvert les ports associés pour SVNServe dans notre pare-feu. S'il y avait un moyen d'exécuter Appache avec IIS sur ma boîte Windows Server 2003, cela peut être une méthode réaliste à essayer, bien que pour l'instant je suis plus intéressé par la façon d'obtenir SVNServe pour s'authentifier en utilisant ActiveDirectory.
jpierson
1

Vous pouvez utiliser saslNTML au lieu de GSSAPI. La DLL saslNTML est installée avec TSVN par défaut, et je pense qu'elle est également incluse dans le client svn de collab.net.

il y a deux options que vous devez définir dans votre fichier de configuration sasl:

ntml_server

et facultatif

ntml_v2

et bien sûr, vous devez définir la liste mech dans votre fichier de configuration pour inclure NTML.

Je n'ai essayé cela qu'une seule fois avec TSVN lorsque j'ai implémenté le tout. Mais j'avais quelqu'un d'autre mis en place un serveur de test pour moi, donc je n'ai aucune idée des options de configuration exactes.

Stefan
la source
Excellent, je vais essayer ça bientôt et voir où je peux me rendre.
jpierson
J'ai essayé un certain nombre de choses, mais j'obtiens toujours l'erreur suivante lors de la vérification de l'utilisation de TortoiseSVN. Erreur: erreur d'authentification du serveur: SASL (-13): utilisateur introuvable: impossible de trouver une erreur: rappel: 2
jpierson
"utilisateur non trouvé" signifie que l'ordinateur ne fait pas partie du domaine auprès duquel vous essayez de vous authentifier ou que l'utilisateur n'est pas connu sur le domaine. Vous pouvez peut-être essayer de capturer le trafic réseau et essayer de savoir ce qui se passe?
Stefan