¿Cómo puedo cambiar un conjunto existente de repositorios de Subversion para usar ActiveDirectory? (svnserve / windows)

12

Tengo un conjunto de repositorios privados de Subversion en un cuadro de Windows Server 2003 al que los desarrolladores acceden a través de SVNServe a través del protocolo svn: //. Actualmente hemos estado usando los archivos authz y passwd para cada repositorio para controlar el acceso, sin embargo, con el creciente número de repositorios y desarrolladores que estoy considerando cambiar para usar sus credenciales de ActiveDirectory. Corremos en una tienda de Microsoft y usamos IIS en lugar de Apache en todos nuestros servidores web, por lo que preferiría continuar usando SVNServe si es posible.

Además de ser posible, también me preocupa cómo migrar nuestros repositorios para que el historial de los usuarios existentes se asigne a las cuentas correctas de ActiveDirectory. Tenga en cuenta también que no soy el administrador de la red y que no estoy muy familiarizado con ActiveDirectory, por lo que probablemente tendré que pasar por otras personas para realizar los cambios en ActiveDirectory si es necesario.

¿Cuáles son mis opciones?

ACTUALIZACIÓN 1: De la documentación de SVN parece que al usar SASL debería poder hacer que SVNServe se autentique usando ActiveDirectory. Para aclarar, la respuesta que estoy buscando es cómo configurar SVNServe (si es posible) para usar ActiveDirectory para la autenticación y luego cómo modificar un repositorio existente para reasignar usuarios de svn existentes a sus cuentas de inicio de sesión de dominio ActiveDirectory.

ACTUALIZACIÓN 2: Parece que el soporte de SASL en SVNServe funciona fuera de un modelo de complemento y la documentación solo se muestra como un ejemplo. Al mirar la Biblioteca Cyrus SASL , parece que se admiten varios "mecanismos" de autenticación, pero no estoy seguro de cuál se utilizará para el soporte de ActiveDirectory ni puedo encontrar documentación sobre tales asuntos.

ACTUALIZACIÓN 3: Ok, bueno, parece que para comunicarme con ActiveDirectory estoy buscando usar saslauthd en lugar de sasldb para la propiedad auxprop_plugin . Desafortunadamente, parece que según algunas publicaciones (posiblemente desactualizadas e inexactas) saslauthd no se basa en Windows y tales esfuerzos se consideran un trabajo en progreso .

ACTUALIZACIÓN 4: la última publicación que he encontrado sobre este tema hace que parezca que los binarios adecuados () están disponibles a través de la Biblioteca Kerberos del MIT, pero parece que el autor de esta publicación en Nabble.com todavía tiene problemas para hacer que las cosas funcionen .

ACTUALIZACIÓN 5: Parece de las discusiones de TortoiseSVN y también esta publicación en svn.haxx.seincluso si saslgssapi.dll o cualquier binario necesario esté disponible y configurado en el servidor de Windows, los clientes también necesitarán la misma personalización para trabajar con estos repositorios. Si esto es cierto, solo podremos obtener soporte de ActiveDirectory de un cliente de Windows solo si se realizan cambios en estos clientes, como TortoiseSVN y CollabNet, compilación de los archivos binarios del cliente para admitir dichos esquemas de autenticación. Aunque eso es lo que sugieren estas publicaciones, esto es contradictorio con lo que originalmente asumí de otra lectura, ya que ser compatible con SASL no debería requerir cambios en el cliente, sino solo que el servidor esté configurado para manejar el mecanismo de autenticación. Después de leer un poco más cuidadosamente en el documento sobre Cyrus SASL en Subversionla sección 5 establece que "1.5+ clientes con soporte Cyrus SASL podrán autenticarse contra 1.5+ servidores con SASL habilitado, siempre que al menos uno de los mecanismos admitidos por el servidor también sea respaldado por el cliente". Entonces, claramente, el soporte GSSAPI (que entiendo que es necesario para Active Directory) debe estar disponible dentro del cliente y el servidor.

Tengo que decir que estoy aprendiendo demasiado sobre lo interno de cómo Subversion maneja la autenticación de lo que siempre quise. Y desafortunadamente, simplemente estaba buscando una respuesta sobre si puedo tener soporte de autenticación de Active Directory cuando uso SVNServe en un servidor de Windows y accedo a esto desde clientes de Windows. De acuerdo con la documentación oficial, parece que esto es posible; sin embargo, puede ver que la configuración no es trivial si es posible.

ACTUALIZACIÓN: 6: Dado que el desarrollo en Subversion 1.7 está finalizando, ¿alguien podría agregar algo sobre si Subversion 1.7 mejorará la situación de lograr que SVNServe se autentique usando Active Directory?

jpierson
fuente
entonces mira aquí ... stackoverflow.com/questions/333146 pero me parece un gran truco. se puede obtener de lado a lado con IIS Apache [ejecutando el segundo ejemplo, en un puerto diferente o diferentes ip]
Pqd
2
+1 para esta pregunta. Es algo para lo que siempre deseo encontrar una respuesta y no lo consigo. La mayoría de las personas parecen encontrar apache aceptable (generalmente en forma visual). Pero es un dolor si ya tienes muchas referencias de svn: //. Y me parece mejor ejecutar svnserve para el acceso al repositorio en lugar de apache.
Jim T
1
+1 realmente quería hacer esto hace mucho tiempo también, realmente odio tener que ejecutar apache en un cuadro de Windows por principio cuando no debería ser necesario ... puntos adicionales para combinar esto con acceso SSL a través de IIS ^ ^
Oskar Duveborn
@Oskar: creo que sería genial si alguien creara un módulo WAS para IIS7 y en adelante para alojar tanto el protocolo http basado en apache como el protocolo svnserve todo dentro de IIS. Si tuviera más tiempo en mis manos, profundizaría en crear algo como esto en .NET como un proyecto de código abierto.
jpierson

Respuestas:

5

Como ya se mencionó, VisualSVN Server es la herramienta que desea. Es un paquete todo en uno para Windows que simplemente usa Apache dentro de él; nunca lo sabrías a menos que estuvieras hurgando en los dlls que instala, aunque para todos es un servicio de Windows que tiene un complemento mmc para administrarlo Puede cambiar el puerto en el que se ejecuta si ya tiene el puerto 80 tomado.

Entiendo que se está trabajando en soporte sasl a través de svnserve en este momento.

gbjbaanb
fuente
Si hubiera una manera de hacer que el servicio Apache funcione a través de IIS o que ambos usen el puerto 80, entonces sería genial. Desafortunadamente para aquellos que desean seguir con svnserve o usar IIS, no parece haber muchas opciones más que esperar para ver si el trabajo en soporte sasl para svnserve se realiza. Si no es demasiado problema, ¿podría vincular a algún lugar donde podamos obtener información actualizada sobre esta función? El proyecto SVN, aunque más reciente, parece no comunicar sus esfuerzos y progresar muy bien a la comunidad a través de su rastreador de errores.
jpierson
Tengo curiosidad por saber si puede tener alguna información sobre si el soporte de sasl en el que se está trabajando / se estaba trabajando para svnserve ha dado sus frutos. ¿Podemos esperar ver mejoras en Subversion 1.7?
jpierson
1

Estoy usando apache con svn ejecutándose en debian linux autorizando de nuevo un servidor de directorio activo. los clientes se conectan al repositorio a través del protocolo http. Si esta configuración es aceptable para usted, continúe leyendo.

Esto también debería funcionar en Apache para Windows, pero nunca lo intenté. lo que sigue es específico de Debian pero debería funcionar de manera similar en Windows / otras distribuciones; no perderás tu historial de svn mientras migras ...

instalar el software requerido:

apt-get install libapache2-svn subversion apache2

en configuración para vhost de apache [los enlaces simbólicos a ellos se pueden encontrar en / etc / apache2 / sites-enabled]. dentro de VirtualHost agregar:

<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>

asegúrese de que apache cargue el módulo ldap:

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

asegúrese de que apache pueda modificar archivos en el repositorio svn:

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

su svn_authz debe contener reglas que indiquen quién puede acceder a qué. en mi caso:

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

[/]
* = rw

[/priv]
* =
@ops = rw

Puede obtener más información sobre la sintaxis de ese archivo aquí .

si llegaste tan lejos, tus usuarios pueden visitar http: //server.address/svn/ usando cualquier cliente svn [tortoise / cmdline / visual svn], verán todo el historial y continuarán leyendo / escribiendo.

pQd
fuente
1
El uso de Apache puede ser aceptable si no hay otras alternativas, pero en este momento ya tenemos varias URL svn: // referenciadas en nuestros foros internos y software de seguimiento de errores y preferiríamos continuar usando esas URL. Además, ya hemos abierto los puertos asociados para SVNServe en nuestro firewall. Si hubiera una manera de ejecutar Appache junto con IIS en mi cuadro de Windows Server 2003, entonces este puede ser un método realista para probar, aunque ahora estoy más interesado en cómo hacer que SVNServe se autentique usando ActiveDirectory.
jpierson
1

Puede usar saslNTML en lugar de GSSAPI. El dll saslNTML se instala con TSVN de manera predeterminada, y creo que también se incluye en el cliente svn de collab.net.

Hay dos opciones que debe configurar en su archivo de configuración sasl:

ntml_server

y opcional

ntml_v2

y, por supuesto, debe configurar la lista de mech en su archivo de configuración para incluir NTML.

Solo intenté esto una vez con TSVN cuando implementé todo. Pero alguien más configuró un servidor de prueba para mí, así que no tengo idea de cuáles son las opciones de configuración exactas.

Stefan
fuente
Excelente, probaré esto pronto y veré dónde puedo llegar.
jpierson
He intentado varias cosas, pero siempre recibo el siguiente error cuando trato de pagar con TortoiseSVN. Error: error de autenticación del servidor: SASL (-13): usuario no encontrado: no se puede encontrar un error: devolución de llamada: 2
jpierson
"usuario no encontrado" significa que la computadora no es parte del dominio al que está intentando autenticarse o que el usuario no conoce el dominio. ¿Quizás pueda intentar capturar el tráfico de la red e intentar descubrir qué está sucediendo?
Stefan