# Serviço de diretório

Um serviço de diretório é o sistema de software que armazena, organiza e fornece acesso a informações em um diretório do sistema operacional de computador. Em engenharia de software, um diretório é um mapa entre nomes e valores. Ele permite a consulta de valores nomeados, semelhante a um dicionário. Como uma palavra em um dicionário deve possuir várias definições, um serviço de diretório pode associar um nome com vários pedaços de informações diferentes. Do mesmo modo, como uma palavra pode ter partes diferentes de articulação e diferentes definições, um nome em um diretório pode ter vários tipos de dados diferentes.
Diretórios podem ser muito limitados em escopo, suportando apenas um pequeno conjunto de tipos de nós e tipos de dados, ou eles podem ser muito amplos, suportando um conjunto de tipos arbitrário ou extensível. Em um diretório de telefones, os nós são nomes e os itens de dados são números de telefone. No DNS os nós são nomes de domínio e os itens de dados são endereços IP (e apelidos, nomes de servidor de e-mail, etc.). Em um diretório usado por um sistema operacional de rede, os nós representam recursos que são gerenciados pelo SO, incluindo usuários, computadores, impressoras e outros recursos compartilhados. Muitos serviços de diretório diferentes têm sido usados desde o aparecimento da Internet, mas este artigo foca principalmente naqueles que descenderam do serviço de diretório X.500.

## Introdução

Um serviço de diretório chamado de um serviço de nomes, mapeia os nomes de recursos da rede para seus respectivos endereços de rede. Com o tipo de diretório de serviço de nomes, um usuário não tem que se lembrar do endereço físico de um recurso da rede. Fornecer um nome localiza o recurso. Cada recurso na rede é considerado um objeto no servidor de diretórios. Informações sobre um recurso particular é armazenado como atributos daquele objeto. Informações dentro de objetos podem se tornar seguros de maneira que apenas usuários com as permissões disponíveis sejam capazes de acessá-las. Diretórios mais sofisticados são projetados com espaços de nomes como Assinantes, Serviços, Dispositivos, Direitos, Preferências, Conteúdos e assim por diante. Este processo de projeto é altamente relacionado com gerenciamento de identidade.
Um serviço de diretório define o espaço de nomes para a rede. Um espaço de nomes neste contexto é o termo que é usado para armazenar um ou mais objetos como entradas nomeadas. O processo de projeto de diretório normalmente possui um conjunto de regras que determinam como recursos de rede são nomeados e identificados. As regras especificam que os nomes sejam únicos e não-ambíguos. No X.500 (o padrão de serviço de diretório) e no LDAP (Lightweight Directory Access Protocol) o nome é chamado de Distinguished name (DN), em português nome distinto, e refere-se a uma coleção de atributos (nomes distintos relativos) que compõem o nome de uma entrada de diretório.
Um serviço de diretório é uma infraestrutura de informação compartilhada para localizar, gerenciar, administrar e organizar itens comuns e recursos de rede, o que pode incluir volumes, pastas, arquivos, impressoras, usuários, grupos, dispositivos, números de telefone e outros objetos. Um serviço de diretório é um componente importante de um Sistema Operacional de Rede. Nos casos mais complexos, um serviço de diretório é o repositório central de informação para uma Plataforma de Entrega de Serviços. Por exemplo, consultar "computadores" usando um serviço de diretório pode produzir uma lista de computadores disponíveis e informações para acessá-los.
A replicação e distribuição possuem significados muito distintos no projeto e gerenciamento de um diretório de serviços. O termo replicação é usado para indicar que o mesmo espaço de nomes de diretório (os mesmos objetos) são copiados para outro servidor de diretório por razões de redundância e de taxas de transferência. O espaço de nome replicado é governado pela mesma autoridade. O termo distribuição é usado para indicar que vários servidores de diretório, que armazenam espaços de nomes diferentes, são interconectados para formar um serviço de diretório distribuído. Cada espaço de nomes pode ser governado por autoridades diferentes.

## Comparação com bancos de dados relacionais

Vários fatores distinguem um serviço de diretório tradicional de um banco de dados relacional comum. Obviamente há exceções, porém em geral:
* informações de diretório são lidas com mais frequência que escritas. Isto faz com que características relacionadas a transações e reversões (rollback) sejam menos importantes.
* dados podem ser redundantes se ajudar no desempenho.
Esquemas de diretório são definidos como classes de objeto, atributos, ligações de nomes e conhecimento (espaços de nome), onde uma classe de objeto possui:
* Deve (Must) - atributos que cada uma de suas instâncias devem ter
* Pode (May) - atributos que podem ser definidos para uma instância, mas podem ser omitidos com a ausência tratada como algo parecido com NULL em um banco de dados relacional
* Atributos são às vezes multi-valorados, permitindo vários atributos de nome em um nível como tipo de máquina e número serial concatenado ou vários números de telefone para "fone comercial"
* Atributos e classes de objeto são padronizados em toda a indústria e formalmente registrados com o IANA para seus IDs de objeto. Entretanto, aplicações de diretório procuram reutilizar muitas das classes e atributos padrões para maximizar o benefício de software servidor de diretório existente.
* Instâncias de objeto são divididos em espaços de nome. Isto é, cada classe de objeto herda de sua classe de objeto pai (e por fim da raiz da hierarquia) adicionando atributos à lista deve/pode.
* Serviços de diretório são frequentemente um componente central no projeto de segurança de um sistema de TI e possuem uma correspondência de fina granularidade em relação ao controle de acesso: que pode operar de tal maneira sobre qual informação. Ver também: ACLs

## Implementações de serviços de diretório

Os serviços de diretório foram parte de uma iniciativa da Interconexão de Sistemas Abertos (Open Systems Interconnection - OSI) para conseguir que todos na indústria concordem com os padrões comuns de rede para fornecer interoperabilidade entre vários fornecedores. Na década de 1980, a ITU e o OSI vieram com um conjunto de normas - X.500, para serviços de diretório, inicialmente para suportar os requisitos de mensagens eletrônicas entre operadoras e pesquisa de nome de rede. O Lightweight Directory Access Protocol, LDAP, baseia-se nos serviços de informação de diretório do X.500, mas usa a pilha TCP/IP e um esquema de codificação de cadeias de caracter do protocolo DAP baseado no X.500, dando-lhe mais relevância na Internet.
Houve inúmeras formas de implementações de serviço de diretório de diferentes fornecedores. Os sistemas desenvolvidos antes do advento do X.500 incluem:
* Domain Name System: (DNS), o primeiro serviço de diretório na Internet, que ainda é usado em todos os lugares hoje.
* Hesiod: foi baseado em DNS e utilizado no Projeto Athena do MIT.
* Network Information Service: (NIS), originalmente chamado Yellow Pages (YP), foi a implementação da Sun Microsystems de um serviço de diretório para ambientes de rede Unix. Ele serviu um papel semelhante como Hesiod.
* NetInfo: foi desenvolvido pela NeXT no final de 1980 para NEXTSTEP. Depois de ser adquirida pela Apple, que foi lançado como código aberto e usado como o serviço de diretório para o Mac OS X antes de ser preterido em favor do Open Directory baseado em LDAP. Suporte para NetInfo foi completamente removido com o lançamento do 10.5 Leopard.
* Banyan Vines: foi a primeira oferta de serviços de diretório escalável.
* NT Domains: foi desenvolvido pela Microsoft para fornecer serviços de diretório para máquinas Windows antes do lançamento do LDAP baseada em Active Directory no Windows 2000 Windows Vista continua a apoiar domínios NT, mas só depois relaxar os protocolos mínimos de autenticação que ele suporta.

### Implementações LDAP

Entre as implementações LDAP/X.500 estão:
* Active Directory: serviço de diretório moderno da Microsoft para Windows, originários do diretório X.500, criado para uso no Exchange Server, primeiro vem com o Windows 2000 Server e é apoiada por sucessivas versões do Windows.
* eDirectory: Esta é a implementação da NetIQ de serviços de diretório. Ele suporta múltiplas arquiteturas, incluindo Windows, NetWare, Linux e vários sabores de Unix e tem sido muito utilizado para a administração de usuários, gerenciamento de configuração e gerenciamento de software. eDirectory evoluiu para um componente central em uma ampla gama de produtos de gerenciamento de identidade. Foi anteriormente conhecido como Novell Directory Services.
* Red Hat Directory Server: Red Hat lançou um serviço de diretório, que adquiriu a partir da unidade de Soluções Netscape Segurança da AOL, [1] como um produto comercial em execução no topo do Red Hat Enterprise Linux chamado Red Hat Directory Server e como a comunidade apoiou 389 Directory Server projeto.
* Apache Directory Server: Apache Software Foundation oferece um serviço de diretório chamado ApacheDS.
* Oracle Internet Directory: (OID) é o serviço de diretório da Oracle Corporation, que é compatível com LDAP versão 3.
* Sun Java System Directory Server: oferta de serviços de diretório atual da Sun Microsystems [2]
* OpenDS: An open source implementação de serviço de diretório a partir do zero em Java, apoiado pela Sun Microsystems [3]
* IBM Tivoli Directory Server: é uma compilação personalizada de uma versão antiga do OpenLDAP.
* Windows NT Directory Services (NTDS), mais tarde rebatizado de Active Directory, substitui o antigo sistema de domínio NT.
* Critical Path Directory Server
* OpenLDAP: derivado da implementação LDAP de referência da Universidade de Michigan (como são os servidores Netscape / Red Hat / Fedora / Sun JSDS), mas evoluiu significativamente. Ele suporta todas as arquiteturas de computadores atuais, incluindo Unix e derivados do Unix, Linux, Windows, z / OS, e uma variedade de sistemas embarcados / realtime.
* Lotus Domino
* Nexor Directory
Há também uma série de ferramentas de código aberto para a criação de serviços de diretório, incluindo o OpenLDAP e o protocolo Kerberos e o software Samba, que pode atuar como um controlador de domínio do Windows com beackends Kerberos e LDAP. A administração é feita usando GOsa ou Samba desde SWAT.

## Usando serviços de nome
### Sistemas operacionais Unix

Serviços de nome em sistemas Unix são normalmente configurados através do nsswitch.conf. Informações dos serviços de nome podem ser recuperadas usando getent.