LDAP - RafaelFazzolino/ServicoRadiusLdap GitHub Wiki
História
Na década de 80, foi observada a necessidade de desenvolver um protocolo que organizasse entradas num serviço de nomes de forma hierárquica, capaz de suportar grandes quantidades de informação e com uma grande capacidade de procura de informação. Em 1988, o serviço denominado X.500 foi apresentado junto com um conjunto de recomendação e das normas ISO 9594 que supria essas necessidades.
O X.500 especificava que a comunicação entre o cliente e o servidor do Diretório usava o Directory Access Protocol (DAP) que era executado sobre a pilha de protocolos do modelo Open Source Initiative (OSI). Por causa do X.500 ser muito complexo, os pesquisadores da Universidade de Michigan a criaram um servidor Lightweight Directory Access Protocol (LDAP), o slapd, que atuava diretamente sobre o TCP/IP, evitando o overhead das camadas superiores da pilha de protocolos OSI. No LDAP a maioria dos elementos de dados são representados como cadeias de caracteres.
Características
Diretório
Diferente do significado usual de diretório (pastas de um disco rígido), no LDAP, diretório é uma base de dados especializada definida de forma hierárquica, otimizado para leitura suportando métodos de pesquisa, com o propósito de obter uma resposta rápida a um grande volume de consultas e onde são armazenadas as informações estáticas de objetos. Não existem restrições quanto aos objetos que podem ser salvos em um diretório.
ObjectClass
Um conjunto de atributos referentes a uma entrada é denominado objectClass. Dado uma entrada definida, são atribuídas um ou mais objectClasses. Esses objectClasses possuem atributos que podem ser obrigatórios ou opcionais. Existem dois tipos de objectClasses: estrutural e auxiliar. Toda a entrada deve ter um objectClass do tipo estrutural e pode ter uma ou mais objectClass auxiliar.
Schemas
Os schemas em LDAP permitem manter a consistência dos dados do diretório. Uma característica dos schemas é serem extensíveis e assim é possível adicionar mais atributos ou classes de acordo com as necessidades. Os schemas definem:
- Quais as objectClasses que podem ser inseridas num diretório;
- Quais os atributos de uma determinada objectClass;
- Os valores possíveis para os atributos;
Se um objeto não obedecer às regras do schema, este não pode ser adicionado no diretório. Por isso, cada entrada é condicionada a uma hierarquia de armazenamento dos dados na base LDAP. Isto é especificado através do Nome Distinto (Distinguished Name) (DN).
Nome Distinto
O Nome Distinto (Distinguished Name) (DN) é usado para identificar uma entrada de forma não única num Serviço de Diretório. Os DN's são compostos por uma sequência de Nomes Distintos Relativos (Relative Distinguished Name) (RDN) e são separados por vírgulas. Por exemplo:
dn: uid=1888,ou=persons,dc=example,dc=com
Atributos
Os atributos são identificados por um nome ou acrônimo, possuem um tipo e um ou mais valores. O tipo de atributo está associado a uma sintaxe, que define que tipo de valor pode ser armazenado no atributo. Alguns dos atributos pode ser observado na tabela a seguir:
Abreviatura | Nome do atributo |
---|---|
dc | domainComponent |
ui | userID |
dn | distinguishedName |
cn | commonName |
gn | givenName |
sn | surName |
o | organizationName |
ou | organizationalUnitName |
st | stateOrProvinceName |
l | localityName |
Object Identifier
Cada objectClass ou tipo de atributo tem uma sintaxe que identifica o de tipo de objeto, isto é, um Object Identifier (OID) único.
Os OID's são representados como strings decimais separados por pontos representando uma árvore hierárquica. A Internet Assigned Authority (IANA) é a entidade responsável pelo registo de “sub-árvores”de OID's.
LDIF
LDAP Data Interchange Format (LDIF) é um arquivo de texto usado para:
-
Importar dados para o Diretório;
-
Alterar objetos existentes;
-
Criar o Backup do Diretório;
-
A replicação;
Vantagens e Desvantagens
Vantagens
-
É um padrão aberto;
-
Está otimizado para fazer pesquisas de informação;
-
Centraliza toda a informação trazendo assim enormes benefícios, tais como: um único ponto de administração; menos dados duplicados;
-
Tem um mecanismo de replicação incluído (slurpd);
-
Tem mecanismos de segurança tanto para a autenticação (SASL) como para o troca de dados (SSL/TLS);
-
Atualmente várias aplicações tem suporte para LDAP;
Desvantagens
-
O LDAP em alguns casos não substitui as Bases de Dados Relacionais;
-
Raramente são efetuadas atualizações;
-
Apenas convém ser guardados dados estáticos;
-
Obviamente não é possível relacionar dois atributos, visto que não se trata de uma Base de Dados Relacional mas sim de uma base de dados estruturada hierarquicamente. Exemplo: Não é possível relacionar o código de uma disciplina com o nome da disciplina;
Serviços
Slapd - Stand-alone LDAP Daemon
O slapd é um serviço LDAP autônomo (executa como um servidor único), responsável por ficar escutando ligações nas portas definidas, que podem ser uma ou mais.
Slurpd - Stand-alone LDAP Update Replication Daemon
O slurpd é também um serviço LDAP autônomo de atualização e replicação de dados entre as Bases de Dados dos vários servidores. Permite replicar as alterações de uma Base de Dados slapd para outra. O slapd produz um log de replicação com alterações, caso esteja configurado desta forma, e então o slurpd lê a partir desse log e envia as alterações para as outras instâncias slapd, via protocolo LDAP. Obs.: Versões mais novas no LDAP utilizam syncrepl no lugar no slurpd.
OpenLDAP
OpenLDAP, distribuído pela OpenLDAP Foundation, é uma suíte de aplicativos LDAP open-source, que possui diversas ferramentas necessárias para fornecer um serviço de diretório LDAP em um ambiente de rede como os módulos slapd, slurpd, bibliotecas que implementam o protocolo LDAP, utilitários e exemplos de clientes LDAP. Ele está disponível para várias plataformas (Linux, Solaris, MacOS). Atualmente possui amplo suporte, sendo largamente utilizada como alternativa às implementações comerciais existentes (Microsoft Active Directory, Novell eDirectory, Sun Java System Directory Server, etc.).
O OpenLDAP implementa a versão 3 do LDAP, a versão mais recente do protocolo e que é o padrão atualmente, e suporta LDAP em IPv4, IPv6 e Unix IPC. O projeto OpenLDAP é uma continuação do servidor LDAP da Universidade de Michigan. O OpenLDAP possui suporte a threads para aumentar a performance de seu servidor, reduzindo o overhead requerido para atender as múltiplas requisições que chegam dos clientes.