You are on page 1of 11

LDAP

Conceito
Lightweight Directory Access Protocol (sucessor do protocolo DAP) é uma versão mais leve do protocolo
X.500, que foi projetado para proporcionar acesso a diretórios de rede. O funcionamento do protocolo se dá
na porta padrão 389 TCP.
Dentro desses diretórios podem estar senhas e logins de usuários de rede, impressoras, números de
telefone, e-mails , dentre outros tipos de informações.

DIT
Directory Information Tree é o nome que se dá à árvore de recursos disponibilizados por um servidor LDAP.
Em uma DIT o administrador pode ter uma visão ampla e completa sobre o servidor.
Uma DIT é toda formada por nomes que atendem pela definição de DN e RDN.

DN
Distinguished Name é o nome completo de uma entrada no servidor LDAP.
Vamos ver um exemplo de DN para o usuário odon no domínio lab.howto.online :

dn: cn=odon,ou=people,dc=lab,dc=howto,dc=online

Sendo:

CN – Common Name.
OU – Organizational Unit
DC – Domain Controler

Repare que separamos cada subdomínio dentro do DN, pois é, é este modelo que deve ser utilizado para
toda e qualquer referência a uma DIT dentro do servidor daqui para frente.

Ok mas e o RDN? Sim, Relative Distinguished Name é (como diz a tradução) o nome relativo de uma
entrada no DN. Funciona como o mesmo conceito de um nome de diretório, se você está dentro do diretório
pai e vai manipular um subdiretório dele, que diferença faz o caminho completo do mesmo? Pois é, em dn:
cn=odon,ou=people,dc=lab,dc=howto,dc=online, cada entrada dessas é um RDN, como cn=odon, por
exemplo.

Na prática, todo tipo de entrada é permitida dentro de uma DIT, posso adicionar uma entrada como o nome de
telephoneNumber, outra com o nome de address ou até uma entrada email. Isto tudo funciona como se fosse
um grande banco de dados com recursos adicionados pelo administrador.

É importante sempre se ter uma boa diagramação da grande árvore antes de o administrador começar a
incluir os registros no servidor. Aí vai um exemplo:

como pro exemplo 'objectClass: person'. Eles nada mais são do que as próprias entradas dos componentes da DIT de forma mais organizada e mais bem documentada até.howto: . indicando que se trata de um usuário. LDIF É comum entre os administradores LDAP a tática de inserir as entradas no servidor através de arquivos LDIF.Object Classes são componentes que tratam do tipo de entrada a ser inserida. Aí vai um exemplo prático de um arquivo LDIF que representa a entrada de um usuário do domínio lab.

shadowAccont. como dn. Interessante observar também que esta entrada assume vários papéis dentro do servidor e por este motivo. core. o usuário também é um conta padrão shadow. Arquivos de schema possuem dependências entre si. posixAccount.schema Contém a estrutura de atributos básica para armazenar informações de . Os schema's normalmente encontram-se armazenados dentro do subdiretório schema. O seguinte exemplo exibe a seção de schema's que utilizaremos por enquanto: Cada schema a ser utilizado pelo servidor deve ser declarado através do parâmetro include. Os schema's adicionados no exemplo acima são os necessários para prover um serviço básico de autenticação em ambientes Linux/Unix. de acordo com as necessidades de cada aplicação que irá acessá-lo.schema é pré-requisito do nis. onde além de ter seus dados pessoais armazenados no servidor (person). os schema's estão localizados em /etc/ldap/schema. nis. etc). Mais arquivos de schema's podem ser incluídos para aumentar a versatilidade do diretório ao torná-lo compatível com outros serviços da rede. para utilizar um determinado schema em seu diretório deve- se declarar também todos os arquivos dos schema's dos quais ele depende. Na distribuição Ubuntu. ou seja. login. Esse schema é obrigatório para que o serviço funcione. Mas uma entrada não anula a outra? Não!! O objeto pode acumular funções. O pacote slapd contém alguns arquivos de schema por padrão.schema Núcleo do OpenLDAP.schema.conf Schemas Os arquivos de schema definem que tipo de informação poderá ser armazenada no diretório. Também é possível ver que neste caso foi armazenado o shell que o usuário vai utilizar. Nas vídeo aulas você vai estudar toda a parte prática de implementação do OpenLDAP. que reside no mesmo diretório onde as configurações do serviço estão armazenadas. como no caso acima. existe a repetição da definição de objectClasses (person.schema. Em outras palavras. cn e sn. cosine. A maioria dos schema's inclusos fornecem a estrutura necessária para o armazenamento de informações de autenticação e suporte a aplicações distribuídas.À cima já podemos visualizar alguns tipos de entrada já vistos anteriormente. Slapd. eles definem quais atributos estarão disponíveis para cada entrada adicionada à árvore do diretório. O principal deles é o core. UID e até o password já criptografado do mesmo.schema O schema cosine. que provê a funcionalidade básica do serviço.

Este parâmetro é configurado através de um inteiro. loglevel Nível delog.schema Especifica os atributos utilizados para armazenar informações de catálogo de endereços (informações sobre os usuários). assim como o local onde serão armazenadas as informações sobre o processo em execução no servidor. que representa os tipos de informação que devem ser guardados nos arquivos de log do serviço. Abaixo temos um exemplo dessa seção contendo os principais parâmetros: Esses parâmetros são explicados abaixo: pidfile Esse parâmetro especifica o local absoluto do arquivo que contém o PID (Process ID) . argsfile Esse parâmetro especifica o local absoluto do arquivo que contém os parâmetros de linha de comando utilizados pelo processo slapd em execução no servidor. operações e resultados 512 Estatísticas para resultados devolvidos aos clientes . Níveis de informações de log -1 Todas as informações de log 0 Nenhuma informação de log 1 Chamadas de funções 2 Depuração do manuseamento dos pacotes 4 Depuração detalhada 8 Gerenciamento da conexão 16 Pacotes enviados e recebidos 32 Processamento do filtro de pesquisa 64 Processamento do arquivo de configuração 128 Processamento das listas de controle de acesso 256 Estatísticas para conexão.autenticação de usuários Linux/Unix. Existem parâmetros que controlam a quantidade de informações que será gerada nos arquivos de log. Serviço Essa seção configura alguns aspectos gerais do serviço de diretório. Também configuramos quais módulos deverão ser carregados. inetorgperson.

A diretiva backend permite configurar as opções específicas de cada backend. estamos configurando opções que são específicas da backend BDB. caso vá utilizar. depois criamos as instâncias de bases de dados. Nesta figura você também encontra o caminho para o certificado digital. Bases de dados Aqui concentramos todos os parâmetros relacionados às bases de dados que armazenarão as informações do diretório.1024 Comunicação com backends de shell 2048 Depuração da análise sintática (parsing) das entradas modulepath Caminho do path dos módulos a serem utilizados pelo servidor. moduleload Nomes dos módulos que serão carregados. Todas as opções listadas abaixo dessa diretiva serão aplicadas à essa backend até que exista outra diretiva desta no arquivo de configuração. Primeiro definimos as opções que são específicas de cada backend utilizado. No caso estamos carregando o módulo que dará suporte à backend BDB (Sleepycat Berkeley Database v4). No exemplo. .

ou distribuir essas sub-árvores entre vários servidores e configurá-los de forma que um referencie o outro quando for consultado sobre uma partição do diretório que não está armazenada localmente (semelhante à maneira como o serviço de DNS funciona). BDB é a backend recomendada atualmente pela documentação do OpenLDAP e também a utilizada por padrão na distribuição Ubuntu. criar bases de dados diferentes para armazenar cada sub-árvore do diretório. Pode ser interessante. utilizando a backend especificada. até que exista outra diretiva database.Adicionando bases de dados ao diretório A diretiva database inicia uma nova instância de uma base de dados. por exemplo. Todos os parâmetros colocados depois dessa diretiva serão aplicados a essa instância. . Os seguintes parâmetros configuram a instância de base de dados: database Define a backend utilizada pela instância de base de dados.

Os quatro tipos de índices são: approx Indexa a informação de acordo com uma combinação aproximada ou fonética dos valores dos atributos. rootdn Um diretório LDAP pode ter um usuário root. pois permite verificar quando a informação foi atualizada. Se estiver utilizando mais de uma instância de base de dados.suffix Determina o contexto do diretório que será servido por essa base de dados. pres Indexa a informação conforme a presença de valores. sub Indexa a informação para procurar por substrings dentro dos valores dos atributos. No nosso exemplo configuramos o contexto como sendo a raiz do nosso domínio. É recomendável permitir acesso de gravação e leitura apenas ao proprietário do processo slapd (0600). Utilize o comando slappasswd para gerar a hash que será utilizada. ACL's . que normalmente será o usuário root do sistema. semelhante ao super-usuário dos sistemas Linux/Unix. Especifica quantas entradas devem ser armazenadas em cache na memória. cachesize Parâmetro para melhorar a performance do banco de dados. O sufixo é escrito utilizando atributos no padrão X. apenas do diretório. eq Indexa a informação de acordo com a combinação exata dos atributos.500. mode Modo (permissão) em que os arquivos serão criados. Quando autenticado. rootpw Especifica a hash que contém a senha do rootdn e o algoritmo utilizado para gerá-la. lastmod Grava informações de tempo em cada modificação e criação das entradas no diretório. index Especifica para quais atributos o slapd deve manter índices de forma a otimizar as operações de busca. é uma boa prática armazenar os arquivos de cada uma em um subdiretório diferente. directory Configura o local onde serão armazenados os arquivos da base de dados. e o suporte de um tipo de índice por parte de um atributo é determinado pelo arquivo de schema ao qual o atributo pertence. Se o administrador optar por não configurar um rootdn para o diretório esse parâmetro não é necessário. pois vamos colocar todo o nosso diretório em apenas uma instância de base de dados. especificando qual será a sua raiz. tem acesso irrestrito ao diretório e por essa razão muitos administradores preferem não configurá-lo. O nome do rootdn é arbitrário e ele não precisa ser um usuário do sistema. Existem quatro tipos de índices. Necessário para o caching no lado do cliente.

Como dissemos anteriormente. para autenticação aos usuários anônimos e para escrita aos usuários autenticados (apenas para as suas próprias entradas). a primeira ACL listada perderia seu efeito. o que é inconveniente. ou seja. muitos administradores preferem não especificar um rootdn para o diretório por questões de segurança. As configurações das ACL's serão aplicadas apenas à instância de base de dados que as contém. mesmo estando com os arquivos devidamente protegidos. execute o comando slaptest para verificar se está tudo certo: com a sintaxe do mesmo: ObjectClass Como o próprio nome já sugere. sendo que as que contém as regras mais restritivas devem aparecer antes das mais gerais para que tenham efeito. A ordem das ACL's é relevante. permite que os usuários alterem a própria senha. um ObjectClass define o tipo de objeto a ser inserido/modificado na base de dados do servidor LDAP. Definimos o rootdn nesse caso apenas para ilustrar uma possibilidade de configuração.As ACL's (Access Control Lists) definem quem tem acesso a qual informação no diretório. Dica Ao finalizar a configuração do seu arquivo /etc/ldap/slapd. Verifique que como a primeira ACL é mais restritiva. Se a ordem estivesse invertida. A segunda configuração garante direito de acesso à todo o diretório para escrita (e consequentemente leitura) ao usuário admin e para leitura aos demais usuários. É muito importante que o administrador saiba que tipo de ObjectClass corresponde a cada entrada dentro de um arquivo LDIF. tornando-o um perigo em potencial. Um dos motivos é o de que será necessário armazenar a hash da senha no arquivo de configuração do slapd.conf. A alternativa existente é não definir um rootdn e criar um usuário administrador. A primeira configuração listada no exemplo garante direito de acesso ao atributo userPassword para escrita (e conseqüentemente leitura) ao usuário admin. ela vai impedir que a segunda ACL garanta direito de leitura das senhas aos usuários comuns. determinando suas permissões explicitamente através das ACL's. O outro motivo é o de que existirá um usuário no diretório para o qual nenhuma ACL terá efeito. como no exemplo abaixo: .

schema rfc822Mailbox inetOrgPerson mail cosine.schema postalAddress organizationalPerson .schema organizationName organization o core.schema organizationalUnit organizationalUnit ou core.schema postalCode organizationalPerson postalCode cosine.schema surname person sn core.schema .schema organizationalPerson organizationalRole groupOfNames applicationProcess applicationEntity posixAccount device mobileTelephoneNumber inetOrgPerson mobile cosine.schema commonName person cn core.schema organizationalUnit person dmd simpleSecurityObject domain posixAccount userid account uid core.schema inetOrgPerson posixAccount . organization userPassword core. cosine.schema domainComponent dcObject dc core.Alias ObjectClass Entrada Schema responsável countryName country c core.

slapadd .conf. ldapdelete .Ferramentas de linha de comando Slap Tools Essa coleção de ferramentas vem junto com o OpenLDAP e fornece um mecanismo para importar e exportar dados diretamente da base de dados do servidor OpenLDAP (slapd). Essas ferramentas podem ser usadas para verificar se a base de dados está correta. Existe uma relação um-para-um entre essas ferramentas e as operações do protocolo LDAP.Lê registros LDIF de um arquivo ou entrada padrão e escreve as novas entradas na base de dados slapd.Procura entradas LDAP. o servidor LDAP não pode estar rodando quando essas ferramentas forem ser usadas.Altera o password de uma entrada. LDAP Tools É um conjunto de ferramentas clientes LDAP do OpenLDAP para se comunicar com qualquer servidor LDAPv3.Renomeia (altera o RDN) uma entrada LDAP existente.Verifica a sintaxe do arquivo /etc/ldap/slapd. slapindex . slaptest . slapcat .Adiciona entradas (no formato LDIF) em em diretório LDAP.conf.Apaga entradas LDAP.Alteras entradas LDAP existentes. ldapsearch .Gera um hash de password apropriado para se usar no etc/ldap/slapd. ldapmodify . Atenção ! Já que essas ferramentas mexem diretamente na base de dados. pois a base de dados LDAP poderá ser corrompida. ldapadd . ldappasswd . slappasswd .Regenera os índices em uma base de dados slapd.Lê entradas da base de dados slapd e as escreve em um arquivo ou saída padrão.Verifica se uma entrada possui um dado valor de atributo. ldapmodrdn . Essas ferramentas podem ser usadas para verificar se o servidor LDAP está funcionando corretamente. . ldapcompare .

Em uma saída onde caracteres não imprimíveis surgem.Especifica uma porta alternativa do servidor LDAP (Está se tornando obsoleto em favor de -H).Inicia uma conexão segura.É usado para não especificar a senha na linha de comandos. As opções comuns a todos estes comandos são: -h <host>t .. -D binddn .Principais opções do ldapsearch: -b searchbase . one e sub base – Busca apenas na base DN one – busca no mesmo nível do “galho” definido em -b e em mais um sub-nível.Apartir de que ponto do diretório a pesquisa irá iniciar. -LLL . -t . sub – opção padrão. . busca recursivamente a partir do “galho”. -s Define o escopo da pesquisa.Mostra informações restrita ao formato LDIFv1. -W . -LL . -C .Usa autenticação simples no lugar de SASL -ZZ . -L .Garante que ele vai seguir as referências da pesquisas. -v . As opções são: base.Usa a DN informada para se conectar no diretório LDAP. tipicamente os atributos jpegPhoto ou audio.Retorna o diagnóstico da operação na saída padrão. com start_tls.Senha para se autenticar no servidor LDAP. -f arquivo . -x . [filtros] .Condição de pesquisa.. -p <ldapport> .As linhas são lidas do arquivo informado.Mostra informações do LDIF sem os comentários.Especifica um host alternativo no qual deseja se conectar (Está se tornando obsoleto em favor de -H). os mesmo serão copiados para o diretório /tmp. Se omitido assume '(objectClass)' [atributos .Atributos que devem ser retornados na pesquisa. ] .Mostra informações sobre o LDIF sem os comentários e sem a versão. -w senha .