O Subversion fornece o Erro 500 até autenticar com um navegador da web

3

Costumávamos usar o combo Collabnet SVN / Apache em um servidor Windows com autenticação LDAP e, embora o desempenho não fosse brilhante, costumava funcionar perfeitamente.

Depois de mudar para uma nova instalação do Ubuntu 10 e configurar um Apache / SVN / LDAP, temos acesso HTTPS aos nossos repositórios, usando a autenticação do Active Directory via LDAP.

Agora estamos tendo um problema muito peculiar. Sempre que um novo usuário acessa um repositório, nossos clientes SVN (temos alguns dependendo da ferramenta, mas por causa de argumentos, vamos nos ater ao Tortoise SVN) report "Error 500 - Unknown Response". Para contornar isso, temos que entrar no repositório usando um navegador da web e navegar "para trás" até que ele funcione

E.G:

  1. SVN Checkout https://svn.example.local/SVN/MyRepo/MyModule/ - Erro 500 ( ruim )
  2. Webbrowse para https://svn.example.local/SVN/MyRepo/MyModule/ - Erro 500 ( bad )
  3. Webbrowse para https://svn.example.local/SVN/MyRepo/ - Erro 500 ( bad )
  4. Webbrowse para https://svn.example.local/SVN/ - Proibido 403 ( correto )
  5. Webbrowse para https://svn.example.local/SVN/MyRepo/ - OK 200 ( correto )
  6. SVN Checkout https://svn.example.local/SVN/MyRepo/MyModule/ - Erro 500 ( ruim )
  7. Webbrowse para https://svn.example.local/SVN/MyRepo/MyModule/ - OK 200 ( correto )
  8. SVN Checkout https://svn.example.local/SVN/MyRepo/MyModule/ - OK 200 ( correto )

Parece requerer autenticação na árvore, a partir do svnparentpath até o módulo necessário.

Alguém viu algo assim antes? Alguma idéia de por onde começar antes de deixar o servidor SVN da Collabnet?

Atualizar

Usando o Apache2, aqui está a localização /svn do meu httpd.conf:

<Location /svn>
  DAV svn
  SVNParentPath /var/lib/svn
  AuthName "Subversion Repositories"
  AuthType Basic
  AuthBasicProvider ldap
  AuthzLDAPAuthoritative off
  AuthLDAPURL "ldap://dc1.domain.local:389/DC=domain,DC=local?sAMAccountName?sub?(objectClass=*)" NONE
  AuthLDAPBindDN "domain\apacheaccount"
  AuthLDAPBindPassword superawesomepassword
  require valid-user
</Location>

Os únicos erros em /var/logs/apache2/error.log são erros de autenticação legítimos de quando usei a senha errada. No access.log , uma linha de erro 500 se parece com:

192.168.161.101 - fname.sname [11/May/2010:08:39:08 +1000] "OPTIONS /svn/MyRepo HTTP/1.1" 500 634 "-" "SVN/1.6.6 (r40053) neon/0.28.6"
    
por Mark Henderson 10.05.2010 / 06:45

2 respostas

1

Estou usando uma configuração Debian "Lenny", rodando o Apache2 / SVN com o LDAP sendo autenticado através do Apache diretamente no AD, enquanto também hospedo um site do Trac na mesma máquina. Vou dar uma cutilada nisso, mas preciso de mais algumas informações ...

O acesso ao SVN é o módulo embutido através do Apache, então a primeira pergunta que eu tenho é - você está executando isso como o processo independente do SVN, ou através do Apache (parece ser o Apache, mas eu só quero ser certo)? A segunda pergunta é: você está usando o Apache2 ou o Apache (1.x)? A terceira pergunta é: você usa autenticação LDAP por meio do PAM ou por meio do suporte integrado do Apache?

Apenas para referência, aqui está uma versão (desinfetada) da configuração do Trac, junto com as configurações do LDAP que autenticam através do AD (sim, é aberto a qualquer pessoa porque o Trac possui seu próprio sistema de permissões. somente para usuários autenticados):

#Rudimentary Apache2 authentication for Active Directory (without group controls)
<Location /trac>
  SetHandler mod_python
  PythonInterpreter main_interpreter
  PythonHandler trac.web.modpython_frontend
  PythonOption TracEnvParentDir /srv/trac
  PythonDebug on
  Order deny,allow
  Deny from all
  Allow from 10.0.0.0/8
  AuthType Basic
  AuthName "Trac Projects"
  AuthBasicProvider "ldap"
  AuthLDAPURL "ldap://enterprise-dc.mycompany.com:3268/DC=localsite,DC=mycompany,DC=com?sAMAccountName?sub?(objectClass=user)"
  AuthLDAPBindDN       [email protected]
  AuthLDAPBindPassword "supersecretpasswordthatnoonewillguess"
  authzldapauthoritative On
  require valid-user
  # require ldap-group "CN=Users,DC=local-site,DC=mycompany,DC=com"
</Location>

Mais importante, para os seus objetivos, usando essa forma de autenticação como modelo, podemos obter as configurações de /etc/apache2/mods-enabled/dav_svn.conf , que controlará seu acesso ao SVN:

<Location /svn>
  DAV svn
  SVNParentPath /srv/svn
  SVNAutoversioning on
  Order deny,allow
  Deny from all
  Allow from 10.0.0.0/8
  AuthType Basic
  AuthName "Subversion Repository"
  AuthBasicProvider "ldap"
  AuthLDAPURL "ldap://enterprise-dc.mycompany.com:3268/DC=local-site,DC=mycompany,DC=com?sAMAccountName?sub?(objectClass=user)"
  AuthLDAPBindDN [email protected]
  AuthLDAPBindPassword "supersecretpasswordthatnoonewillguess"
  authzldapauthoritative On
  require valid-user
</Location>

Nossos desktops têm controles bastante rígidos sobre a instalação do programa, então não estou tão preocupado com alguém (a) instalando um cliente SVN (b) descobrindo o nome exato do servidor para conectar (c) ao repo e mucky estragar tudo, e é por isso que a segurança é tão baixa. No entanto, com um pouco de ajustes, você deve ser capaz de reutilizar esse arranjo impondo um grupo AD (observe o comentário comentado no primeiro exemplo) e obtenha um controle muito mais rígido sobre o acesso.

Espero que isso seja de ajuda para você.

Atualização (com base em novas informações)

Eu acho que o problema é que você não está autenticando contra o Catálogo Global. Altere o número da porta para o que eu tenho no meu exemplo, e não se esqueça de apontá-lo em um controlador de domínio que está no nível "Enterprise", ou seja, não um membro de um domínio filho. Portanto, em vez de site.enterprise.com, aponte para enterprise.com no novo número de porta. Note que você pode não precisar especificar o nome de domínio em sua configuração para o nome de usuário, portanto, se ele se recusar a autenticar, não deixe de experimentá-lo sem o mesmo (veja o exemplo que postei); e use o nome da conta "estilo de e-mail", além do layout "estilo de domínio".

Minha suspeita: o Catálogo Global "nivela" o espaço de pesquisa para os usuários; mas perguntando uma consulta LDAP padrão no DC filho, acho que a falha inicial ocorre porque não há "resposta" a ser obtida inicialmente, até que o controlador de domínio no domínio filho possa ser executado e obter um. Na segunda tentativa, a resposta é armazenada em cache e você é bem-sucedido.

    
por 10.05.2010 / 19:32
-1

Ainda não posso postar comentários, mas apenas uma pergunta: por que não executar o servidor VisualSVN em uma caixa do Windows 2008 com apenas a instalação do SO principal. Eu apostaria que a plataforma de instalação é tão pequena quanto o Ubuntu e você poderia ter copiado toda a sua árvore de diretórios VisualSVN para a nova caixa.

Obviamente, isso não ajuda o seu problema atual, mas apenas curioso se você pensou nesta opção e qual foi o seu raciocínio para mudar tudo isso junto?

    
por 10.05.2010 / 07:26