Apache + Web_dav + AD/LDAP + subversion (SVN) + trac, parte I


Introdução


Apache:
O Apache HTTP Server ("httpd ou apache2") é um projeto da Apache Software Foundation, que pode ser encontrado na URL http://httpd.apache.org/, desde abril de 1996 o é servidor Web Apache mais conhecido no mundo e utilizado livremente.

WebDAV:
Web Distributed Authoring and Versioning ou seu acrônimo WebDAV, é uma extensão do Hypertext Transfer Protocol - HTTP, que facilita a colaboração entre os usuários de edição e gestão de conteúdos armazenados em servidores World Wide Web.

Um grupo de trabalho da Internet Engineering Task Force (IETF) definiu WebDAV na RFC 4918.

O protocolo WebDAV torna o protocolo http um suporte de leitura e escrita, fornecendo uma estrutura para os usuários criar, alterar e mover documentos em um servidor.

Active Directory:
MicroSoft Active Directory (MSAD/AD) é um serviço de diretório criado pela Microsoft para redes de domínio do Windows.

Este serviço está incluído na maioria dos sistemas operacionais Windows Server, o Active Directory é muito útil para controlar toda a rede a partir de um computador.

O MSAD possibilita uma administração central da rede e da segurança, onde os hosts que executam o AD são denominados de controladores de domínio (DC). Um controlador de domínio AD autentica e autoriza todos os usuários e computadores em um tipo de arvore de domínio, onde são aplicadas as políticas de segurança para todos os computadores e instalados ou atualizados seus softwares.

Por exemplo, quando um usuário faz logon em um computador que faz parte de um domínio do Windows, o serviço AD verifica a senha enviada, e o autentica com as suas permissões e determina se o usuário é um administrador de sistema ou o usuário normal e quais outros serviços este usuário pode executar na rede gerida pelo DC.

Active Directory faz uso de Lightweight Directory Access Protocol (LDAP) versões 2 e 3, Kerberos e DNS.

Subversion:
Apache Subversion, também conhecido por seu acrônimo svn, é um sistema de controle de versão desenhado especificamente para ser um substituto moderno do CVS (Concurrent Version System).

Este serviço que permite que se trabalhe com diversas versões de arquivos organizados em um diretório e localizados local ou remotamente, mantendo-se suas versões antigas e os logs de quem e quando manipulou os arquivos. É especialmente útil para se controlar versões de um software durante seu desenvolvimento, ou para composição colaborativa de um documento.

Trac:
Trac é uma simples ferramenta, open source com interface web para acompanhamento e controle de mudanças em projetos de desenvolvimento de software.

O objetivo do software é ajudar o desenvolvedor a rastrear essas mudanças, entender o porque de cada uma e qual o seu impacto no projeto como um todo.

Esta ferramenta trabalha com um wiki integrado, controle de tickets, e integração como os principais Sistemas de versionamento.


Dependências básicas:
redhat like
yum install cpp gcc gcc-c++ make openssl-devel openssh elinks
debian like
sudo aptitude install build-essential openssh-dev elinks

Dependências dos Servidores:
redhat like
yum install libtool autoconf httpd apr-devel apr-util-devel sqlite-devel libzip neon mod_wsgi openldap-clients
debian like
sudo aptitude install apache2 apache2-dev sqlite-dev libzip neon mod_wsgi ldap-utils

Subversion Instalação

Instalação do Subversion 1.6.12, através do repositório:

redhat like
yum install subversion mod_dav_svn
debian like
aptitude install subversion libapache2-svn

Instalação do Subversion 1.7.5, através do fonte:

  1. wget http://ftp.unicamp.br/pub/apache/subversion/subversion-1.7.5.tar.bz2;
  2. tar xvjf subversion-1.7.5.tar.bz2 -C /usr/src;
  3. cd /usr/src/subversion-1.7.5;
  4. ./configure --prefix=/opt/subversion --with-openssl --with-ssl --enable-mod-activation;
  5. make;
  6. make install;


Ativar bibliotecas no Sistema Operacional:
echo "/opt/subversion/lib" >> /etc/ld.so.conf.d/subversion-1.7.5.conf


Ativar executáveis no Sistema Operacional:
echo "export PATH=$PATH:/opt/subversion/bin/" >> /etc/profile



Subversion Criação de Projetos


Inicialmente os projetos devem ser criados, mesmo que vazios para serem apreciados na configuração.

Na configuração deste artigo, considere uma arvore de svn, onde a estrutura base, comporta todos os projetos. Para criar os projetos execute um dos comandos abaixo:
svnadmin create /var/svn/projeto
svnadmin create /storage/svn/projeto

Para migração e exportação de projetos pré-existentes, siga as instruções destes tutoriais Brito:Dump de Subversion, Brito: Backup no Subversion e Brito: Usando o Subversion

Subversion permissões

O SVN precisará de permissões no sistema de arquivos para funcionar adquadamente.
redhat-like:
find /storage/svn -type d -exec chown 48.48 -R {} \;
find /storage/svn -type d -exec chmod 2775 {} \;
find /storage/svn -type f -exec chmod 0664 {} \;
debian-like:
find /storage/svn -type d -exec chown 33.33 -R {} \;
find /storage/svn -type d -exec chmod 2775 {} \;
find /storage/svn -type f -exec chmod 0664 {} \;

Subversion configuração

Uma parte da configuração do subversion, reside no apache.

A estrutura do apache é onde ele está instalado em seu sistema operacional:
debian-like: /etc/apache2

redhat-like:/etc/httpd

  1. Crie um diretório para conter as configurações específicas do svn, na estrutura do apache, como por exemplo vhosts.
    cd /etc/httpd; ou
    cd /etc/apache2; e
    mkdir -v vhosts ssl
  2. Uma destas configurações é para aceitar o protocolo ldaps, e manter o sigilo das informações de autenticação do usuário AD(Active Darectory)/LDAP(Lightweight Directory Access Protocol), entre os servidores SVN(Subversion) e AD/LDAP. Crie o arquivo em conf.d/ldaps.conf com o conteudo abaixo na estrutura do apache:
  3. Crie e/ou baixe os certificados em ssl/ na estrutura do apache.
    Orientações completas desta etapa pode ser seguidas no artigo Brito: Openssl - Gerando certificados do tipo A1.
    certificado da CA: ssl/certpr.crt
    certificado do site: ssl/svn1349967503.crt
    requisição do site: ssl/svn1349967503.csr
    chave privada do site: ssl/svn1349967503.key
  4. Configurar a autenticação no AD/LDAP.
    Particularmente preferi, listar todos os projetos na raiz do site, e separar as permissões por grupos, como é apresentado na configuração abaixo, no arquivo vhosts/svn_ldap.conf:

    Na diretiva AuthLDAPURL, há os modos de autenticação ldap(comentado) e ldaps(ldap secure)
  5. No Debian, somente no Debian, na estrutura do apache, execute:
    ln -s /var/log/apache2/ logs
  6. Configurar o apache para https.

    Observe que foi utilizado a diretiva Include para carregar o SVN(svn_ldap.conf) na configuração, sem redundância.
  7. No Debian e suas variantes, habilite os módulos, com o comando a2moden <módulo>:
    auth_basic
    authn_file
    authnz_ldap
    authz_default
    authz_groupfile
    authz_host
    authz_user
    dav
    dav_svn
    ldap
    ssl
    vhost_alias
  8. No RedHat e suas variantes, habilite o módulo ldap.
    cat > conf.d/mod_ldap.conf<< eof
    LoadModule ldap_module modules/mod_ldap.so
    LoadModule auth_ldap_module modules/mod_auth_ldap.so
    eof
    
  9. No RedHat e suas variantes, habilite o módulo svn, pois os demais já são habilitados nativamente.
    cat > conf.d/mod_svn.conf<< eof
    LoadModule dav_svn_module /usr/lib/apache/mod_dav_svn.so
    LoadModule authz_svn_module /usr/lib/apache/mod_authz_svn.so
    eof
    
  10. Inicie o apache:
    service apache2 restart; ou
    service httpd restart;

Teste de conectividade entre GNU/Linux e MSAD

Para conexão no AD/LDAP, faz-se necessário instalação das dependencias a seguir:
RedHat-like yum install openldap-clients
Debian-like aptitude install ldap-utils
Suponha que no MSAD(MicroSoft Active Directory) do domínio incolume.com.br, exista o usuário ussvn catalogado, na Organization Unit(OU)/Users App, o qual será usado pela aplicação, que no caso será o svn, para consultar os logins no sistema de diretório, e este usuário possue os seguintes dados:
CN=ussvn,OU=Users_App,DC=incolume,DC=com,DC=br senha=5n2012
A URL de consulta para o SVN pode ser ldap ou ldaps, como abaixo:
ldap://10.0.0.5:389/dc=incolume,dc=com,dc=br?sAMAccountName?sub?(objectClass=user)
ldaps://10.0.0.5:636/dc=incolume,dc=com,dc=br?sAMAccountName?sub?(objectClass=user)
Obs: Quando na utilização do ldaps, o servidor AD/LDAP deve ser previamente configurado para aceita-lo.
Agora de posse destas informações, as quais deve ser providenciadas para configuração do ambiente, podemos realizar as consultas pelo GNU/Linux, como apresentado abaixo:
ldapsearch -H ldap://10.0.0.5:389 -x -w 5n2012 -D CN=ussvn,OU=Users_App,DC=incolume,DC=com,DC=br -b dc=incolume,dc=com,dc=br sub '(&(objectClass=user)(sAMAccountName=ricardobn))'
ldapsearch -H ldap://10.0.0.5:389 -x -w 5n2012 -D CN=ussvn,OU=Users_App,DC=incolume,DC=com,DC=br -b dc=incolume,dc=com,dc=br -s sub '(&(objectClass=user)(sAMAccountName=ricardobn))' sAMAccountName
ldapsearch -H ldap://10.0.0.5:389 -x -w 5n2012 -D CN=ussvn,OU=Users_App,DC=incolume,DC=com,DC=br -b dc=incolume,dc=com,dc=br -s sub sAMAccountName '(&(objectClass=user)(sAMAccountName=ricardobn))'
ldapsearch -H ldap://10.0.0.5:389 -x -w 5n2012 -D CN=ussvn,OU=Users_App,DC=incolume,DC=com,DC=br -b dc=incolume,dc=com,dc=br -s sub '(&(objectClass=user)(sAMAccountName=ricardobn))' sAMAccountName

Realocação de Projeto

A realocação de projeto ocorre na mudança de URL, se por ventura não ocorrer tal mudança, este procedimento não é necessário. Dentro do diretório da cópia de trabalho, execute:
svn switch --relocate old-url new-url
Exemplo:
cd /dir/meu/projeto svn switch --relocate http://www.incolume.com.br/svn/projeto https://www.incolume.com.br/svn/projeto

Relacionados

Continuação em Apache + Web_dav + AD/LDAP + subversion (SVN) + trac, parte II

Agradecimentos

Agradeço ao colega Leonardo dos Santos Dourado, pela colaboração e sua expertise em MSAD.

Referências:

http://brito.blog.incolume.com.br/2011/07/encapsulamento-de-apache-com-chroot.html
http://en.wikipedia.org/wiki/Active_Directory
http://en.wikipedia.org/wiki/WebDAV
http://pt.wikipedia.org/wiki/CVS
http://pt.wikipedia.org/wiki/Trac
http://atrpms.net/documentation/install/
https://support.railsmachine.com/index.php?pg=kb.page&id=42
http://www.jejik.com/articles/2007/06/apache_and_subversion_authentication_with_microsoft_active_directory/

Comentários