Instalação e autenticação do LDAP no Ubuntu 12.04

Este tutorial busca explicar como configurar um servidor para autenticar seus clientes de maneira simples através do LDAP, um dos protocolos mais utilizados do gênero.

Introdução

LDAP (Lightweight Directory Access Protocol)  é um protocolo que permite realizar a autenticação de usuários em um único e simples servidor centralizado. Desenvolvido em 1993 na Universidade do Michigan, foi um “upgrade” do protocolo DAP, que era mais específico. Por ser mais rápido e leve que o protocolo DAP, recebeu o nome de Lightweight Directory Acess Protocol.

O protocolo LDAP está actualmente na versão 3 e foi normalizado pelo IETF (Internet Engineering Task Force). Assim, existe um RFC para cada versão de LDAP, constituindo um documento de referência :

O LDAP armazena suas informações de maneira hierárquica e não relacional, ou seja, em sistemas de diretórios não temos tabelas de dados como temos em bancos relacionais (como MySQL, Oracle, SQL Server…). No lugar de tabelas, os dados são organizados em uma DIT (Directory Information Tree – Árvore de Informação do Diretório). Esta árvore é composta de vértices, e estes vértices contém um registro. O registro é a informação que estamos armazenando na árvore. A figura abaixo mostra um exemplo de como uma árvore do LDAP é esquematizada (clique na imagem para ampliar).

Exemplo de uma árvore de registros do LDAP
0

Como dito anteriormente, o LDAP possui uma estrutura hierárquica. O usuário é um dos registros mais internos, sendo identificado pelo cn (common name). Como um cn identifica registros de um diretório, não podemos criar registros com mesmo cn em um diretório. Porém, registros podem ter mesmo cn caso estejam em diretórios diferentes. No exemplo da imagem acima, poderíamos ter um registro em ou=users com cn=admin, mesmo já tendo outro cn=admin no diretório ou=admin.

Usuários geralmente fazem parte de uma Organizational Unit (ou). A ou divide grupos de usuários em relação a permissões de acesso, como ocorre no exemplo da imagem acima. Neste exemplo, há uma ou para usuários comuns e outra para administradores. O Administrador da base de dados LDAP pode oferecer permissões administrativas para usuários que estejam na ou admin.

A organização é identificada pelo dc (domain component). O dc é o domínio da organização que contém a base de dados do LDAP. Em configurações simples, como a que iremos fazer, é o nome de domínio do servidor onde vamos instalar os pacotes do LDAP Server. Um dc é a raiz da árvore do LDAP, sendo que um dc pode conter outros dc’s, numa estrutura semelhante ao DNS. Em nosso exemplo, nosso domínio possui o nome “domain.com”. Então, há um dcdomain, que está contido em outro dc  de nível maior, chamado com. Caso houvesse um domínio “exemplo.com”, o dc domínio também estaria contido dentro do dc com, e o domínio exemplo poderia ser configurado de maneira diferente do domain, com outras ou e outros usuários.
Configuração

Vamos ao que interessa! Iremos dividir a configuração em duas partes. A configuração do servidor e a autenticação dos clientes.

Configuração do Servidor

  1. Instale os pacotes necessários: sudo apt-get install slapd ldap-utils
    1. Quando solicitar a senha de administrador, insira a sua senha de administrador.
  2. Quando a instalação for concluída, reconfigure o pacote slapd:   sudo dpkg-reconfigure slapd
  3. Você deverá informar algumas opções:
    1. Em omitir LDAPserver Configuration, escolha NO.
    2. Em DNS Domain Name, você deve colocar o domínio de seu servidor. Caso em seu terminal apareça user@domain, você deve colocar a palavra domain nesta opção. Caso seja user@domain.com, insira domain.com
    3. Em Organization Name, você deve inserir o nome de sua organização ou trabalho. Por exemplo, insira o nome “Meu servidor LDAP”
    4. em Administrator Password, insira a sua senha, a mesma da etapa anterior.
    5. Em Database Backend, escolha HDB
    6. Em Remover a base de dados quando o comando purge for utilizado, fica a seu critério. Por padrão, insira NO.
    7. Em Move Old Database, YES.
    8. Em permitir protocolo LDAPv2, escolha NO.
  4. Instale o phpldapadmin, um servidor web que provê uma interface gráfica, facilitando a utilização do LDAP:
      sudo apt-get install phpldapadmin
  5. Para a configuração do phpldapadmin siga os passos:
      1. Abra o arquivo de configuração:
        sudo vi /etc/phpldapadmin/config.php
      2. mude a linha que contém
        $servers->setValue('server','host','');

        Para o nome de seu domínio( no caso anterior, domain) ou seu IP fixo. Exemplo:

    $servers->setValue('server','host','domain')

    Ou, caso seu domíno seja domain.com:

    $servers->setValue('server','host','domain.com')
  6. mude a linha
    $servers->setValue('server','base',array(dc=example, dc=test, dc=com'));

    mudando os ‘dcs’ para o nome de seu domínio. Caso tenha ponto (ex: domain.com), serão dcs separados.
    Exemplos:
    Caso o domínio seja único(domain):

    $servers->setValue('server','base',array(‘dc=domain'));

    Caso tenha pontos (domain.com):

    $servers->setValue('server','base',array(‘dc=domain, dc=com'));
  7. mude a linha
    $servers->setValue('login','bind_id','cn=admin,dc=example, dc=test, dc=com');

    para o nome de seu domínio, assim como no exemplo anterior. Caso o domínio seja único(domain):

    $servers->setValue('login','bind_id','cn=admin,dc=domain');

    Caso tenha pontos (domain.com):

    $servers->setValue('login','bind_id','cn=admin,dc=domain, dc=com');
  8. Abra o arquivo de configuração da conta dos usuários. Você irá mudar o login shell, onde o phpldapadmin não oferece a opção ‘/bin/bash’. Esta opção faz com que um cliente tenha mais funcionalidades pois o bash é o shell padrão do usuário Linux. No terminal, digite:
    sudo vi /etc/phpldapadmin/templates/creation/posixAccount.xml
  9. Adicione mais um valor após a linha <type>select</type>, com valor
     <value id=”/bin/bash”>/bin/bash</value>
  • Agora já é possível acessar a interface Web! Logue na interface Web no seu browser, ou pelo endereço localhost/phpldapadmin ou SEU_IP/phpldapadmin. Para a autenticação, coloque a senha e verifique se consegue entrar na interface Web. Se não conseguir, verifique sua senha ou seu IP. Caso seu IP esteja diferente no informado pela configuração, a base de dados do LDAP não autenticará a conexão. Caso tenha ocorrido tudo certo, a tela será parecida com a imagem abaixo.
    1
  • Crie uma Organizational Unit (OU). Após logar, clique em “Create new entry here”. A imagem abaixo mostra um exemplo
    2
    e escolha a opção “Generic: Organizational Unit”.
    Coloque o nome groups e dê commit;
  • Após criar a OU groups, clique nela e clique em “Create a child entry”, assim como na imagem abaixo.
    3
    Após aparecer a tela, ponha o nome admin e salve. Repita o processo, crie outro grupo e ponha o nome dele de users.
  • Clique no grupo users, e crie um usuário, como na imagem abaixo:
    4

    1. Clique em “Create a child entry” e escolha a opção “Generic: User Account”
      5
    2. Em GID Number, escolha a opção “users”
    3. Em login Shell, escolha a opção “/bin/bash”
      As configurações devem estar próximas a da imagem:
      7
    4. Salve o objeto. Se o uid estiver com o número 1000, mude para um número maior, pois o cliente pode apontar para o usuário criado em vez do usuário comum do cliente. Para mudar,clique no usuário criado e mude o uid para 1002 por exemplo.

O servidor está pronto!

Configuração do Cliente

  1. Instale os pacotes necessários:
    sudo apt-get install libpam-ldap nscd
  2. Você deverá inserir algumas respostas:
    1. Na pergunta sobre o servidor LDAP, coloque ldap://IP_DE_SEU_SERVIDOR_LDAP (vale lembrar que este IP é do servidor configurado anteriormente.
    2. No nome do identificador, coloque o nome identificador da sua base de dados LDAP. No exemplo anterior, era dc=domain ou dc=domain, dc=com.
    3. Versão do LDAP, escolha a 3
    4. Fazer o root local ser admin da base local: YES
    5. A base de dados requer login? NÃO
    6. Conta LDAP do root: o que identifica o admin na base de dados do LDAP. NO nosso exemplo, seria cn=admin, dc=domain ou cn=admin, dc=domain, dc=com
  3. Após terminar a configuração, altere o arquivo de configuração nsswitch.conf. Digite sudo vi /etc/nsswitch.conf e configure alumas linhas da seguinte forma:
    passwd: compat ldap
    group: compat ldap
    shadow: compat ldap
    
  4. Depois disso, vá para a configuração do PAM. O PAM(Pluggable Authentication Modules)é um sistema que conectam aplicações que provêm autenticação com aplicações que exige autenticação.  Edite o arquivo: sudo nano /etc/pam.d/common-session. Insira uma linha abaixo de “session require” com o comando:
    session required pam_mkhomedir.so skel=/etc/skel umask=0022
  5. Por fim, reinicie o nscd do cliente.
    sudo /etc/init.d/nscd restart
  6. Pronto! O LDAP estará funcionando. Para testar, você pode logar em seu cliente com um usuário criado no servidor LDAP através do ssh, pelo comando
    ssh usuarioLDAPCriado@IP_CLIENTE

    Para sair, digite logout.

Espero que tenham aprendido um pouco mais sobre o LDAP, e que tenham conseguido autenticar os usuários corretamente! 🙂

Autor: Demis Gomes

Referências
http://stackoverflow.com/questions/18756688/what-is-cn-ou-dc-in-ldap-search
http://www.vivaolinux.com.br/artigo/Entendendo-o-LDAP
http://pt.kioskea.net/contents/271-o-protocolo-ldap
https://www.digitalocean.com/community/articles/how-to-authenticate-client-computers-using-ldap-on-an-ubuntu-12-04-vps
https://www.digitalocean.com/community/articles/how-to-install-and-configure-a-basic-ldap-server-on-an-ubuntu-12-04-vps

3 comentários em “Instalação e autenticação do LDAP no Ubuntu 12.04

  1. Boa tarde. Muito bom o tópico! Fiz os procedimentos e ocorreu tudo bem. Mas como posso configurar o login em cache? Caso alguns usuários levem nootbooks para fora da rede empresarial? Abraço

    Curtir

Deixe um comentário