Como posso mudar um conjunto existente de repositórios do Subversion para usar o ActiveDirectory? (svnserve / windows)

12

Eu tenho um conjunto de repositórios privados do Subversion em uma caixa do Windows Server 2003 que os desenvolvedores acessam via SVNServe através do protocolo svn: //. Atualmente, usamos os arquivos authz e passwd para cada repositório para controlar o acesso, no entanto, com o crescente número de repositórios e desenvolvedores, estou pensando em mudar para usar suas credenciais no ActiveDirectory. Como rodamos em uma loja totalmente Microsoft e usamos o IIS em vez do Apache em todos os nossos servidores web, prefiro continuar usando o SVNServe, se possível.

Além de ser possível, também estou preocupado em como migrar nossos repositórios para que o histórico dos usuários existentes seja mapeado para as contas do ActiveDirectory corretas. Lembre-se também de que eu não sou o administrador da rede e não conheço muito bem o ActiveDirectory; portanto, provavelmente terei que passar por outras pessoas para obter as alterações feitas no ActiveDirectory, se necessário.

Quais são as minhas opções?

ATUALIZAÇÃO 1: Parece que na documentação do SVN , usando o SASL, devo conseguir que o SVNServe se autentique usando o ActiveDirectory. Para esclarecer, a resposta que eu estou procurando é como configurar o SVNServe (se possível) para usar o ActiveDirectory para autenticação e como modificar um repositório existente para remapear os usuários svn existentes para as contas de logon do domínio do ActiveDirectory.

ATUALIZAÇÃO 2: parece que o suporte a SASL no SVNServe funciona com um modelo de plug-in e a documentação é mostrada apenas como exemplo. Observando a Biblioteca SASL da Cyrus , parece que vários "mecanismos" de autenticação são suportados, mas não tenho certeza de qual deles deve ser usado para o suporte ao ActiveDirectory, nem posso encontrar documentação sobre esses assuntos.

ATUALIZAÇÃO 3: Ok, parece que, para me comunicar com o ActiveDirectory, estou procurando usar saslauthd em vez de sasldb para a propriedade auxprop_plugin . Infelizmente, parece que, de acordo com algumas postagens (possivelmente desatualizadas e imprecisas), o saslauthd não se baseia no Windows e esses empreendimentos são considerados um trabalho em andamento .

ATUALIZAÇÃO 4: A última publicação que encontrei sobre este tópico faz parecer que os binários adequados () estão disponíveis na Biblioteca MIT Kerberos, mas parece que o autor desta publicação no Nabble.com ainda está tendo problemas para fazer as coisas funcionarem .

ATUALIZAÇÃO 5: Parece das discussões do TortoiseSVN e também deste post no svn.haxx.semesmo que o saslgssapi.dll ou os binários necessários estejam disponíveis e configurados no servidor Windows, os clientes também precisarão da mesma personalização para trabalhar com esses repositórios. Se isso for verdade, só conseguiremos obter o suporte do ActiveDirectory de um cliente Windows somente se forem feitas alterações nesses clientes, como TortoiseSVN e CollabNet, compilação dos binários do cliente para suportar esses esquemas de autenticação. Embora seja o que essas postagens sugerem, isso é contraditório com o que eu supus originalmente de outra leitura, em que seja compatível com SASL não deveria exigir alterações no cliente, mas apenas que o servidor fosse configurado para lidar com o mecanismo de autenticação. Depois de ler um pouco mais atentamente no documento sobre o Cyrus SASL no Subversiona seção 5 declara "1.5+ clientes com suporte Cyrus SASL poderão se autenticar em servidores 1.5+ com SASL ativado, desde que pelo menos um dos mecanismos suportados pelo servidor também seja suportado pelo cliente". Então, claramente, o suporte GSSAPI (que eu entendo ser necessário para o Active Directory) deve estar disponível no cliente e no servidor.

Devo dizer que estou aprendendo muito sobre os aspectos internos de como o Subversion lida com a autenticação do que eu sempre quis. E, infelizmente, eu estava simplesmente procurando uma resposta sobre se posso ter suporte à autenticação do Active Directory ao usar o SVNServe em um servidor Windows e acessá-lo a partir de clientes Windows. De acordo com a documentação oficial, parece que isso é possível, mas você pode ver que a configuração não é trivial, se é que é possível.

ATUALIZAÇÃO: 6: Como o desenvolvimento do Subversion 1.7 está finalizando, alguém poderia acrescentar algo sobre se o Subversion 1.7 melhorará a situação de autenticação do SVNServe usando o Active Directory?

jpierson
fonte
então olhe aqui .. stackoverflow.com/questions/333146 mas me parece um hack. você pode obter side-by-side IIS com apache [executando a segunda por exemplo, em diferentes porto ou ip diferente]
PQD
2
+1 para esta pergunta. É algo que eu continuo querendo encontrar uma resposta e falhando. A maioria das pessoas parece achar aceitável o apache (geralmente na forma visualsvn). Mas é uma dor se você já tem muitas referências svn: //. E me parece melhor executar o svnserve para acesso ao repositório em vez do apache.
Jim T
1
O +1 realmente queria fazer isso há muito tempo também, eu realmente odeio ter que executar o apache em uma caixa do Windows apenas por princípio, quando não deveria ser necessário ... pontos extras para combinar isso com o acesso SSL no IIS ^ ^
Oskar Duveborn
@Oskar - Eu acho que seria ótimo se alguém criasse um módulo WAS para o IIS7 e hospedasse tanto o protocolo http baseado em apache quanto o protocolo svnserve no IIS. Se eu tivesse mais tempo em minhas mãos, iria me aprofundar na criação de algo assim no .NET como um projeto de código aberto.
jpierson

Respostas:

5

Como já mencionado, o VisualSVN Server é a ferramenta que você deseja. É um pacote tudo-em-um para Windows que, por acaso, usa o Apache dentro dele - você nunca saberia, a menos que estivesse mexendo nas dlls instaladas, para todos é um serviço do Windows que possui um snap-in mmc para administrá-lo. Você pode alterar a porta em que é executado se você já tiver a porta 80 tomada.

Entendo que o suporte sasl através do svnserve está sendo trabalhado no momento.

gbjbaanb
fonte
Se houvesse uma maneira de fazer com que o serviço Apache funcionasse através do IIS ou os dois usassem a porta 80, isso seria ótimo. Infelizmente para aqueles que querem ficar com o svnserve ou usar o IIS, parece não haver muitas opções além de esperar para ver se o trabalho no suporte sasl para o svnserve vem a bom termo. Se não houver muitos problemas, você pode acessar um local onde possamos obter informações atualizadas sobre esse recurso? O projeto SVN, embora seja mais recente, parece não comunicar seus esforços e progredir muito bem à comunidade através do rastreador de erros.
jpierson
Estou curioso para saber se o suporte sasl que está / estava sendo trabalhado para o svnserve teve algum êxito. Podemos esperar melhorias no Subversion 1.7?
Jpierson 27/04
1

Estou usando o apache com svn em execução no debian linux autorizando againsta server do diretório ativo. os clientes se conectam ao repositório através do protocolo http. se essa configuração for aceitável para você - continue lendo.

isso também deve funcionar no apache para windows, mas eu nunca tentei. o que se segue é específico do debian, mas deve funcionar de maneira semelhante em janelas / outras distros; você não perderá seu histórico de svn ao migrar ...

instale o software necessário:

apt-get install libapache2-svn subversion apache2

na configuração do vhost do apache [links simbólicos para eles podem ser encontrados em / etc / apache2 / sites-enabled]. dentro do VirtualHost adicione:

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

verifique se o apache carrega o 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

certifique-se de que o apache possa modificar arquivos no repositório svn:

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

seu svn_authz deve conter regras dizendo quem pode acessar o quê. No meu caso:

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

[/]
* = rw

[/priv]
* =
@ops = rw

você pode descobrir mais sobre a sintaxe para esse arquivo aqui .

se você chegou até aqui - seus usuários podem acessar http: //server.address/svn/ usando qualquer cliente svn [tortoise / cmdline / visual svn], eles verão todo o histórico e continuarão lendo / escrevendo nele.

pQd
fonte
1
O uso do Apache pode ser aceitável se não houver outras alternativas, mas a partir de agora já temos vários URLs svn: // referenciados nos fóruns internos e no software de rastreamento de bugs e preferimos continuar usando esses URLs. Também já abrimos as portas associadas ao SVNServe em nosso firewall. Se havia uma maneira de executar o Appache junto com o IIS na caixa do Windows Server 2003, esse pode ser um método realista de tentar, embora agora eu esteja mais interessado em obter autenticação do SVNServe usando o ActiveDirectory.
jpierson
1

Você poderia usar saslNTML em vez de GSSAPI. A dll saslNTML é instalada com o TSVN por padrão, e acho que também está incluída no cliente svn do collab.net.

existem duas opções que você precisa definir no seu arquivo de configuração sasl:

ntml_server

e opcional

ntml_v2

e é claro que você precisa definir a lista mech no seu arquivo de configuração para incluir NTML.

Eu só tentei isso uma vez com o TSVN quando implementei a coisa toda. Mas eu tinha alguém para configurar um servidor de teste para mim, então não tenho idéia de quais são as opções exatas de configuração.

Stefan
fonte
Excelente, vou tentar isso em breve e ver onde posso chegar.
jpierson
Eu tentei várias coisas, mas sempre recebo o seguinte erro ao tentar fazer check-out usando o TortoiseSVN. Erro: Erro de autenticação do servidor: SASL (-13): usuário não encontrado: Não foi possível encontrar um Erro: retorno de chamada: 2
jpierson
"usuário não encontrado" significa que o computador não faz parte do domínio para o qual você está tentando se autenticar ou que o usuário não conhece o domínio. Talvez você possa tentar capturar o tráfego de rede e descobrir o que está acontecendo?
Stefan