# Manual de Usuário do LDAP

## Introdução

**LDAP** (Lightweight Directory Access Protocol) é um protocolo padrão utilizado para acessar e gerenciar informações armazenadas em serviços de diretório, como o *Active Directory* da Microsoft, o *OpenLDAP* dentre outros. Ele é frequentemente usado para centralizar informações de usuários, grupos e recursos em uma rede, como em sistemas de autenticação, diretórios de contatos e sistemas de gerenciamento de acesso.

{% hint style="info" %}
Este manual cobre o uso do LDAP com a ferramenta [Apache Directory Studio](https://directory.apache.org/studio/).
{% endhint %}

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-18546057525c40e90ea4c59b01ca611b500d8222%2FapacheDirectoryStudio_logo.png?alt=media)

## Iniciando o uso

### Criando uma conexão

Pelo menu File -> New será aberto o *Wizard*, escolher LDAP Browser -> LDAP Connection. Ou, na janela de conexões, com o botão direito escolher New Connection.

Preencher somente o `Nome da conexão` (*Connection name*) e o `Hostname` (ou IP) e avançar para a próxima tela.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-6c480cb48327c9350d1af7406120f0a077aba0ee%2FnewLdapConnection_1.png?alt=media)

Preencher o campo `Bind DN or User` e `Bind password` conforme informado pela equipe que criou o LDAP. Após configurado é possível clicar em Check Authentication para confirmar o acesso e login no LDAP.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-ee0c5823bc530972f13e204b649859035a8cd153%2FnewLdapConnection_2.png?alt=media)

{% hint style="success" %}
**(Opcional)** Na próxima tela, *Browser Option*, marcar `Fetch operational attributes while browsing` para melhorar a visibilidade dos grupos que cada usuário pertence.
{% endhint %}

### Conectando pela aba de Connections

Verifique qual servidor da lista deseja conectar, dê um duplo clique no servidor escolhido ou selecione-o e clique no ícone de conexão (destacado em vermelho na imagem abaixo).

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-618a6e243c8a23c34c9224d8618d37ef7d94a73c%2Fconnecting_1.png?alt=media)

Se a conexão for bem sucedida, o ícone do servidor mudará para amarelo:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-8087c9381082eb977965db744ffef9e69a1f5088%2Fconnecting_2.png?alt=media)

## Estrutura do LDAP

### Árvore de diretórios

A árvore utilizada baseia-se essencialmente em *Groups* e *Users*, podendo adicionalmente contar com *Policies* para políticas de senha.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-72896cf1efc1e064f9d4084ccc16405e4c122c48%2FdirectoryTree.png?alt=media)

### Siglas

<table><thead><tr><th width="200">Sigla</th><th>Significado</th></tr></thead><tbody><tr><td><code>dc</code></td><td>Componentes do domínio (Domain Component)</td></tr><tr><td><code>ou</code></td><td>Unidade organizacional à qual o usuário pertence (Organizational Unit)</td></tr><tr><td><code>cn</code></td><td>Nome comum (Common Name)</td></tr><tr><td><code>sn</code></td><td>Nome da pessoa (Surname)</td></tr><tr><td><code>uid</code></td><td>ID de usuário (User ID)</td></tr><tr><td><code>mail</code></td><td>e-mail (Email Address)</td></tr></tbody></table>

### Árvore *Users*

Nesta árvore são criados os usuários e definidas suas senhas, pode ser estruturada em subníveis para facilitar a organização dos usuários mediante conceito de agrupamento por localidade, departamento, etc.

### Árvore *Groups*

Nesta árvore são definidos grupos que representarão permissões / roles de acesso às ferramentas, mediante adição do usuário ao grupo de acesso desejado.

Exemplo de grupos:

* `etr_view` - Usuários adicionados a este grupo terão acesso às permissões definidas no grupo, que representam opções de acesso ao ETR como visualizador.
* `bcc_verify` - Usuários adicionados a este grupo poderão logar no BCC e realizar pesquisas de verificação (pesquisas 1:1).

### Cadastro de usuário

Na criação de usuário, preencher os seguintes atributos:

`cn` - usado como o nome do **login** do usuário; `sn` - usado para registar o **nome completo** do usuário; `uid` - reservado para uso futuro, devendo ser preenchido com o mesmo texto que o `cn`; `password` - preenchido com a **senha** deste usuário; `mail` - usado para registar o **e-mail** do usuário.

Para cadastrar um usuário, clique com botão direito em cima de `ou=User` e escolha New -> New Entry:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-db011eff93b0543c57154fd77a9f3b53819b7503%2FnewUser_1.png?alt=media)

Será aberta a tela de criação de usuário. Caso existam `ou` intermediárias, altere o caminho no diretório de criação. Caso contrário, se nenhuma alteração for realizada, o usuário será criado na raiz do diretório *Users*.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-cb87eeedcd5c0b177c637512e48599787397440f%2FnewUser_2.png?alt=media)

Na tela seguinte, remova `organizationalUnit`:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-ba79a25acdc0597bbffd97e0bef2e63d6c80575a%2FnewUser_3.png?alt=media)

Adicione `inetOrgPerson` e o aplicativo automaticamente trará as classes de dependência `organizationalPerson`, `person` e `top`:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-5394be5cff3fe53258a7e991c8b35780eb8cbbc9%2FnewUser_4.png?alt=media)

Avance para próxima tela para escolher o `cn`. Preencha com o `cn` de login desejado:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-07b52523bbb277fe63dfa059726e6e718207bc84%2FnewUser_5.png?alt=media)

Nesta nova tela é exibido um sumário do que será feito e pode-se alterar o `sn`. Preencha, se possível, com o nome completo do usuário.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-13f3b2fe34a13e596dbd2eea289ec242be6baad9%2FnewUser_6.png?alt=media)

Em seguida, clique com o botão direito do mouse em New Attribute:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-0b1d4684bb63f1bb5b9c914873468af2845240f5%2FnewUser_7.png?alt=media)

Escolha `UID` e preencha com o valor do `UID`.

{% hint style="info" %}
O valor do `UID` deve vir do administrador de usuários do sistema.
{% endhint %}

Em seguida, o atributo `userPassword`:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-8c295718cd1c4cfc25bfa0f278c466f48e995188%2FnewUser_8.png?alt=media)

Ao encerrar, será aberta a tela para definir a senha. Escolha `CRYPT-SHA-512` e preencha com a senha desejada:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-77ecc3768330c355016c5c2a668544c925e6eabe%2FnewUser_9.png?alt=media)

Finalmente, exclua o *objectClass* `organizationalPerson (structural)` clicando com o botão direito e escolhendo Delete Value:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-ad5842ea8c4acd7d6e32592a170138fdeda1c8c1%2FnewUser_10.png?alt=media)

### Adição de grupo a um usuário

Em *Users*, abra o cadastro de um usuário e copie o **DN** do usuário mostrado no cabeçalho da tela:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-f84112d97c7737e65c290c7012bed79bb4bb0853%2FaddGroupToUser_1.png?alt=media)

{% hint style="info" %}
**DN** é a sigla para *Distinguished Name*, que é o **Nome Distinto** do objeto no LDAP. É a maneira de identificar um objeto de forma única no diretório. Ele fornece o caminho para a entrada específica dentro da hierarquia do diretório LDAP, que é organizada em uma estrutura de árvore. Um DN é composto por uma sequência de nomes distintos relativos (RDNs) conectados por vírgulas. Cada RDN é um componente do DN que representa um valor de atributo específico.

Por exemplo:

<img src="https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-eced749a9233136ad975290ac29af7c8993a357a%2FaddGroupToUser_2.png?alt=media" alt="" data-size="original">

* `cn=leandro.pinheiro`: **Nome Comum** (`cn`) da entrada. Geralmente é utilizado para nomes de pessoas ou objetos.
* `ou=Users`: **Unidade Organizacional** (`ou`) onde a entrada está localizada.
* `dc=oldap`: **Componente de Domínio** (`dc`). Pode representar um subdomínio ou uma parte específica do domínio dentro da estrutura LDAP.
* `dc=igp`: Outro **Componente de Domínio** (`dc`). Representa outra parte do domínio, possivelmente indicando um departamento ou subdivisão dentro da organização.
* `dc=griaule`: **Componente de Domínio** (`dc`) de nível mais alto. Representa o domínio principal da organização.

Portanto, o DN `cn=leandro.pinheiro,ou=Users,dc=oldap,dc=igp,dc=griaule` identifica um usuário específico chamado `leandro.pinheiro` dentro da unidade organizacional `Users`, que faz parte do subdomínio `oldap`, do domínio `igp`, dentro do domínio principal `griaule`. Este DN fornece um caminho claro e exclusivo para localizar esta entrada específica no diretório LDAP da organização.
{% endhint %}

Em seguida, abra o raiz de *Groups* e escolha o grupo desejado. Clique com o botão direito no grupo e em New Attribute. Em `Attribute Type`, escolha `member`. Clique em Finish.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-fae970f51c0aefcb099fffd2981fc58cf27406fb%2FaddGroupToUser_3.png?alt=media)

Na tela **DN Editor**, cole o **DN** completo do usuário (copiado no primeiro passo). Clique em OK:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-d26e5a188ccc23095f0efdbbd234acfef92ad0c4%2FaddGroupToUser_4.png?alt=media)

### Adição rápida de grupo a um usuário

Quando o grupo já possui usuários / membros, a adição de um novo usuário ao grupo é mais ágil: basta clicar com o botão direito no componente `member` e escolher New Value. A tela **DN Editor** abrirá. Então, como mostrado na seção anterior, cole o **DN** completo do usuário e clique em OK.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-9457ef29204866f838c35220c45632b5251e885d%2FquicklyAddGroupToUser.png?alt=media)

### Exclusão do usuário de um grupo

Abra o grupo em que o usuário está:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-df03b65828b603b210252f1eecce8449d2f9e4b6%2FdeleteUserFromGroup_1.png?alt=media)

Clique com o botão direito no `member` do usuário que se deseja remover do grupo e clique em Delete Value:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-45929fddf26cb318601ad7c80a02faac2ea45fae%2FdeleteUserFromGroup_2.png?alt=media)

Confirme clicando em OK:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-57430f56eb62435d48f7848375c2415b08988bf3%2FdeleteUserFromGroup_3.png?alt=media)

### Criação de grupo

Para criar um novo grupo, clique com botão direito em cima de `ou=Groups` e escolha New -> New Entry.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-375f0685542a0201d99603f72ab0aec64efa1626%2FcreateGroup_1.png?alt=media)

Será aberta a tela de criação, semelhante à criação de usuários. Escolha a opção `organizationalUnit`.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-3f26a226d7c05750ab5808dd34c73f6da1546700%2FcreateGroup_2.png?alt=media)

Escolha `ou` e preencha um nome, no exemplo abaixo foi escolhido `LDAP`. Finalize a criação do grupo clicando em Finish.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-4bc12d9a9fbdc6beb7d4892db6947efbed5de13f%2FcreateGroup_3.png?alt=media)

## Navegação no LDAP

### Pesquisa de grupos do usuário pelo "Quick Search"

Para localizar os grupos de um usuário, acesse o buscador do LDAP e selecione a opção `cn` ou `member`.

{% hint style="info" %}
Selecionando `member`, será necessário pesquisar utilizando o **DN** completo do usuário.
{% endhint %}

Na parte superior direita, verifique se o seguinte ícone está selecionado:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-59ecfc9897ae5c073e551ead42b89df455d72a74%2FsearchTreeIcon.png?alt=media)

Se não estiver, selecione-o. Isso permitirá fazer uma busca por toda árvore do groups (opções `search one level only` ou `search whole subtree`).

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-48321fc4393b34fb7014bd88a0260a9df95aac61%2FsearchUserGroups_1.png?alt=media)

Verifique a resposta no `Quick Search`:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-732591ed1019e67008e32727cb8d6e1f2e6fd5bf%2FsearchUserGroups_2.png?alt=media)

{% hint style="danger" %}
**Nunca realizar exclusão de usuário usando o resultado da pesquisa** (no item Quick Search), pois foram pesquisados os grupos que esta pessoa pertence. Portanto, **apagar uma linha do Quick Search significa apagar o grupo** e não o usuário.
{% endhint %}

### Lista de grupos do usuário na descrição do usuário

Outra forma de verificar os grupos que o usuário pertence é através do *Fetch*.

Para isso, clique com o botão direito do mouse no nome do usuário e escolha Fetch -> Fetch Operacional Attributes:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-528572a1b0f7065da7ad79f3f582b6e96334a0a5%2FfetchUserGroups_1.png?alt=media)

Também é possível inserir o *Fetch Operacional Attributes* clicando com o botão direito do mouse e escolhendo Properties. Em seguida, clique em `Connection` e abra a aba `Browser Options`. Então, na seção `Features`, marque a opção `Fetch operational attributes while browsing`:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-30f330be2b6a292946e8dd05d114bbb495284a8b%2FfetchUserGroups_2.png?alt=media)

Assim, os grupos que o usuário pertence serão exibidos durante a navegação:

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-7e69d332b3eada3a3aa5ddd30b7eb0141b742fb6%2FfetchUserGroups_3.png?alt=media)

### Troca de senha

Localize o usuário pelo Quick Search, como mostrado [neste passo a passo](#pesquisa-de-grupos-do-usuario-pelo-quick-search).

Após localizar o usuário, clique duas vezes em userPassword e abra a aba `New Password`.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-a3857ad7ea3a35d6d7b638d4eb01836e588cccfe%2FchangePassword.png?alt=media)

Insira a nova senha e confirme.

Após aplicar a nova senha, aparecerá a tela do *Modification Logs* confirmando sua alteração.

### Verificação de senha

Para verificação de senha, primeiro localize o usuário pelo Quick Search, como mostrado [neste passo a passo](#pesquisa-de-grupos-do-usuario-pelo-quick-search).

Após localizar o usuário, clique duas vezes em userPassword e abra a aba `Current Password`.

No campo, `Verify Password`, insira a senha atual do usuário e clique em Verify.

Se a senha estiver correta, a mensagem "*Password verified successfully*" será exibida.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-9768423f9fc393561c9eb6a9bfc158a0aec5dc7e%2FverifyPassword.png?alt=media)

## Organização de usuários

### Usuários por subgrupos

A organização eficiente dos usuários em um diretório LDAP pode ser realizada por meio das subárvores. Essa estrutura facilita a administração do diretório, permitindo uma segmentação clara dos usuários com base em critérios específicos como empresa, departamento ou contratos.

#### Conceito de Subárvore de Usuários

Para otimizar a gestão de usuários, é recomendado a implementação de uma subárvore hierárquica com um ou dois níveis no máximo de profundidade. Essa prática garante uma separação lógica dos usuários, trazendo clareza e eficiência na administração do diretório.

#### Vantagens da Subárvore de Usuários

1. **Simplificação da Administração**: Reduz a complexidade da administração do LDAP.
2. **Organização Estruturada**: Facilita a localização e o gerenciamento de objetos LDAP.
3. **Melhoria de Performance**: Minimiza o tempo de resposta em consultas e operações no LDAP.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-78974a34a0de8ef7ffba1723d6ca35cc757ace29%2FuserSubgroups_1.png?alt=media)

Esta estrutura exemplifica:

* **ROOT**: Nível raiz do diretório LDAP.
* **Organização**: Unidade organizacional principal.
* **UF**: Unidade Federativa, exemplificando com `SP` (São Paulo).
* **CONTRATO**: Subdivisão de contratos, como `Polícia Científica`.
* **USER**: Usuários dentro do contrato específico.
* **Permissão**: Permissões associadas aos usuários.

Outro exemplo, esse diretamente no LDAP, consiste em uma árvore de subgrupos. Onde tem-se um grupo `policiaCivil` e dentro dele um subgrupo `SC`.

![](https://35846584-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7Bx0xNdsdGHpCZ20yxbn%2Fuploads%2Fgit-blob-75fffee00e07fd6010023a2f9e8b49e236f54360%2FuserSubgroups_2.png?alt=media)
