LDAP

O que é LDAP?

LDAP significa Lightweight Directory Access Protocol.

Ele é um protocolo de rede usado para acessar e gerenciar serviços de diretórios.

Serviços de diretórios são bancos de dados especializados em armazenar informações sobre objetos de uma rede, como:

Usuários.
Grupos.
Computadores.
Dispositivos.
Recursos.
Permissões.

O LDAP é muito usado em ambientes corporativos para autenticação, controle de acesso e organização de informações da rede.


Para que o LDAP é usado?

O LDAP é usado para centralizar informações e autenticação em uma rede.

Exemplos comuns:

Autenticar usuários em sistemas.
Controlar acesso a recursos.
Organizar usuários e grupos.
Centralizar contas corporativas.
Integrar login entre vários sistemas.
Consultar dados como nome, e-mail e telefone.
Gerenciar permissões em aplicações.
Conectar sistemas ao Active Directory.


Como o LDAP funciona?

O LDAP funciona consultando um serviço de diretório.

Fluxo básico:

O cliente LDAP se conecta ao servidor LDAP.
O cliente informa usuário e senha, se necessário.
O servidor autentica a conexão.
O cliente faz consultas ao diretório.
O servidor retorna informações de usuários, grupos ou recursos.
O sistema usa essas informações para autenticação ou autorização.

Exemplo:

Sistema → Servidor LDAP → Consulta usuário/grupo

Características principais do LDAP

O LDAP possui algumas características importantes:

Organiza dados em formato hierárquico.
Usa estrutura parecida com uma árvore.
Cada entrada possui um identificador único chamado DN.
Cada objeto possui atributos.
Permite armazenar usuários, grupos e recursos.
Pode ser usado para autenticação.
Pode ser usado para autorização.
É muito usado em redes corporativas.
Pode ser integrado com Active Directory.
Pode usar criptografia com LDAPS ou STARTTLS.


O que é um diretório no LDAP?

Um diretório LDAP é uma base organizada de informações.

Ele funciona como uma árvore, onde os objetos ficam separados por níveis.

Exemplo simples:

dc=empresa,dc=com
 ├── ou=usuarios
 │    ├── uid=joao
 │    └── uid=maria
 └── ou=grupos
      ├── cn=admin
      └── cn=financeiro

Nesse exemplo:

dc=empresa,dc=com representa o domínio.
ou=usuarios representa a unidade de usuários.
ou=grupos representa a unidade de grupos.
uid=joao representa um usuário.
cn=admin representa um grupo.


O que é DN no LDAP?

DN significa Distinguished Name.

Ele é o identificador único de cada objeto dentro do diretório LDAP.

Exemplo:

uid=joao,ou=usuarios,dc=empresa,dc=com

Esse DN identifica o usuário joao dentro da unidade usuarios do domínio empresa.com.

Cada objeto no LDAP possui um DN único.


O que são atributos no LDAP?

Atributos são informações associadas a um objeto no diretório.

Exemplo de usuário:

uid: joao
cn: João Silva
mail: joao@empresa.com
telephoneNumber: 41999999999

Exemplos comuns de atributos:

AtributoFunção
uidIdentificador do usuário
cnNome comum
snSobrenome
mailE-mail
telephoneNumberTelefone
userPasswordSenha
memberOfGrupos do usuário

O que é OU no LDAP?

OU significa Organizational Unit.

Ela representa uma divisão lógica dentro do diretório.

Exemplos:

ou=usuarios
ou=grupos
ou=computadores
ou=servidores

As OUs ajudam a organizar os objetos no LDAP.

Exemplo completo:

ou=usuarios,dc=empresa,dc=com

O que é DC no LDAP?

DC significa Domain Component.

Ele representa partes do domínio.

Exemplo de domínio:

empresa.com

No LDAP, pode ficar assim:

dc=empresa,dc=com

Outro exemplo:

suporte.empresa.com

No LDAP:

dc=suporte,dc=empresa,dc=com

O que é CN no LDAP?

CN significa Common Name.

Ele representa o nome comum de um objeto.

Exemplo de grupo:

cn=administradores,ou=grupos,dc=empresa,dc=com

Exemplo de usuário:

cn=João Silva,ou=usuarios,dc=empresa,dc=com

LDAP é a mesma coisa que Active Directory?

Não.

LDAP é um protocolo.

Active Directory é um serviço de diretório da Microsoft que pode usar LDAP para consultas e autenticação.

Resumo:

NomeO que é
LDAPProtocolo de acesso a diretórios
Active DirectoryServiço de diretório da Microsoft
OpenLDAPImplementação LDAP muito usada em Linux

O Active Directory usa LDAP, Kerberos, DNS e outros serviços para funcionar.


LDAP é usado para autenticação?

Sim.

Muitos sistemas usam LDAP para autenticar usuários.

Exemplo:

Um usuário tenta entrar em um sistema.
O sistema envia usuário e senha para o servidor LDAP.
O servidor verifica se as credenciais estão corretas.
Se estiverem corretas, o acesso é liberado.

Exemplo de uso:

Login do sistema → Consulta LDAP → Usuário autenticado

LDAP é usado para autorização?

Sim.

Além de autenticar, o LDAP pode ajudar a verificar permissões.

Exemplo:

O usuário faz login.
O sistema consulta os grupos do usuário no LDAP.
Se o usuário estiver no grupo correto, recebe acesso ao recurso.

Exemplo:

Usuário pertence ao grupo cn=admin → acesso liberado ao painel administrativo

LDAP usa TCP ou UDP?

O LDAP usa principalmente TCP.

Portas comuns:

ServiçoPortaSegurança
LDAP389/TCPSem criptografia ou com STARTTLS
LDAPS636/TCPSSL/TLS

A porta padrão do LDAP é:

389/TCP

A porta padrão do LDAPS é:

636/TCP

LDAP usa TLS ou SSL?

Pode usar.

O LDAP pode ser usado de forma simples ou segura.

Formas comuns:

LDAP na porta 389 sem criptografia.
LDAP na porta 389 com STARTTLS.
LDAPS na porta 636 com SSL/TLS.

O mais recomendado é usar LDAP com criptografia, principalmente quando há autenticação com senha.


Diferença entre LDAP e LDAPS

ProtocoloPorta comumSegurança
LDAP389Sem criptografia ou STARTTLS
LDAPS636SSL/TLS

O LDAP puro pode expor dados sensíveis se usado sem criptografia.

O LDAPS protege a comunicação com SSL/TLS.


Como instalar LDAP no Linux?

Uma implementação comum no Linux é o OpenLDAP.

No Debian, Ubuntu e derivados:

sudo apt update
sudo apt install slapd ldap-utils

Durante a instalação, pode ser solicitada uma senha de administrador LDAP.

Reconfigurar o OpenLDAP:

sudo dpkg-reconfigure slapd

Verificar status:

sudo systemctl status slapd

Iniciar serviço:

sudo systemctl start slapd

Habilitar na inicialização:

sudo systemctl enable slapd

Como testar se o LDAP está funcionando?

Testar porta LDAP:

nc -vz ip_do_servidor 389

Testar porta LDAPS:

nc -vz ip_do_servidor 636

Verificar serviço:

sudo systemctl status slapd

Consultar base LDAP:

ldapsearch -x -H ldap://ip_do_servidor -b "dc=empresa,dc=com"

Exemplo com localhost:

ldapsearch -x -H ldap://localhost -b "dc=empresa,dc=com"

Como fazer uma consulta LDAP?

Exemplo de consulta simples:

ldapsearch -x -H ldap://localhost -b "dc=empresa,dc=com"

Buscar usuários:

ldapsearch -x -H ldap://localhost -b "ou=usuarios,dc=empresa,dc=com"

Buscar por usuário específico:

ldapsearch -x -H ldap://localhost -b "dc=empresa,dc=com" "(uid=joao)"

Buscar por e-mail:

ldapsearch -x -H ldap://localhost -b "dc=empresa,dc=com" "(mail=joao@empresa.com)"

Como autenticar no LDAP pelo terminal?

Exemplo usando bind com usuário administrador:

ldapsearch -x -H ldap://localhost -D "cn=admin,dc=empresa,dc=com" -W -b "dc=empresa,dc=com"

Explicação:

-x usa autenticação simples.
-H informa o servidor LDAP.
-D informa o DN do usuário usado para autenticar.
-W solicita a senha.
-b informa a base da busca.


Como adicionar uma entrada no LDAP?

Normalmente, entradas são adicionadas usando arquivos .ldif.

Exemplo de arquivo:

nano usuario.ldif

Conteúdo:

dn: uid=joao,ou=usuarios,dc=empresa,dc=com
objectClass: inetOrgPerson
uid: joao
cn: João Silva
sn: Silva
mail: joao@empresa.com

Adicionar ao LDAP:

ldapadd -x -D "cn=admin,dc=empresa,dc=com" -W -f usuario.ldif

Como modificar uma entrada LDAP?

Criar arquivo de alteração:

nano alterar-email.ldif

Conteúdo:

dn: uid=joao,ou=usuarios,dc=empresa,dc=com
changetype: modify
replace: mail
mail: joao.silva@empresa.com

Aplicar alteração:

ldapmodify -x -D "cn=admin,dc=empresa,dc=com" -W -f alterar-email.ldif

Como remover uma entrada LDAP?

Remover um usuário:

ldapdelete -x -D "cn=admin,dc=empresa,dc=com" -W "uid=joao,ou=usuarios,dc=empresa,dc=com"

Atenção: remover uma entrada pode afetar autenticação e permissões de sistemas integrados.


Como configurar LDAP em uma aplicação?

Normalmente, uma aplicação solicita dados como:

Servidor LDAP: ldap://ldap.empresa.com
Porta: 389
Base DN: dc=empresa,dc=com
Bind DN: cn=admin,dc=empresa,dc=com
Senha: senha_do_bind
Filtro de usuário: (uid={usuario})

Para LDAPS:

Servidor LDAP: ldaps://ldap.empresa.com
Porta: 636
Base DN: dc=empresa,dc=com
Bind DN: cn=admin,dc=empresa,dc=com
Senha: senha_do_bind
Filtro de usuário: (uid={usuario})

Em Active Directory, o filtro pode usar sAMAccountName:

(sAMAccountName={usuario})

Diferença entre autenticação e autorização no LDAP

FunçãoO que faz
AutenticaçãoVerifica se usuário e senha estão corretos
AutorizaçãoVerifica o que o usuário pode acessar

Exemplo:

Autenticação: o usuário joao digitou a senha correta.
Autorização: o usuário joao pertence ao grupo financeiro, então pode acessar o sistema financeiro.


Diferença entre LDAP, Kerberos e Active Directory

TecnologiaFunção
LDAPConsulta e gerenciamento de diretórios
KerberosAutenticação segura por tickets
Active DirectoryServiço de diretório da Microsoft

Em ambientes Windows, o Active Directory pode usar LDAP para consulta e Kerberos para autenticação.


Erros comuns no LDAP

Invalid credentials

Erro:

Invalid credentials

Ou:

ldap_bind: Invalid credentials (49)

Possíveis causas:

Senha incorreta.
Bind DN incorreto.
Usuário não existe.
Conta bloqueada.
Formato do usuário errado.

Verificar DN usado:

ldapsearch -x -H ldap://localhost -b "dc=empresa,dc=com" "(uid=usuario)"

Testar autenticação:

ldapsearch -x -H ldap://localhost -D "cn=admin,dc=empresa,dc=com" -W -b "dc=empresa,dc=com"

Can't contact LDAP server

Erro:

Can't contact LDAP server

Possíveis causas:

Serviço LDAP parado.
IP ou hostname incorreto.
Porta bloqueada.
Firewall bloqueando.
Servidor fora do ar.

Verificar serviço:

sudo systemctl status slapd

Testar porta:

nc -vz ip_do_servidor 389

Testar LDAPS:

nc -vz ip_do_servidor 636

Verificar firewall:

sudo ufw status

No such object

Erro:

No such object

Possíveis causas:

Base DN incorreta.
Objeto não existe.
OU errada.
Domínio LDAP informado errado.

Verificar base:

ldapsearch -x -H ldap://localhost -b "dc=empresa,dc=com"

Testar outra base:

ldapsearch -x -H ldap://localhost -b "dc=com"

Strong authentication required

Erro:

Strong authentication required

Possíveis causas:

Servidor exige conexão segura.
LDAP simples sem TLS foi bloqueado.
Senha está sendo enviada sem criptografia.

Solução:

Usar STARTTLS:

ldapsearch -x -ZZ -H ldap://ldap.empresa.com -b "dc=empresa,dc=com"

Ou usar LDAPS:

ldapsearch -x -H ldaps://ldap.empresa.com -b "dc=empresa,dc=com"

Certificate verify failed

Erro:

Certificate verify failed

Possíveis causas:

Certificado expirado.
Certificado emitido para outro domínio.
Autoridade certificadora não confiável.
Cliente sem CA instalada.

Testar certificado:

openssl s_client -connect ldap.empresa.com:636 -servername ldap.empresa.com

Verificar se o nome do certificado corresponde ao servidor usado.


Insufficient access

Erro:

Insufficient access

Ou:

ldap_modify: Insufficient access (50)

Possíveis causas:

Usuário sem permissão para alterar o diretório.
Bind DN não tem privilégio suficiente.
ACL bloqueando alteração.
Tentativa de modificar atributo protegido.

Solução:

Usar usuário administrativo correto.
Verificar permissões e ACLs do LDAP.
Testar com o admin LDAP:

ldapmodify -x -D "cn=admin,dc=empresa,dc=com" -W -f arquivo.ldif

Already exists

Erro:

Already exists

Possíveis causas:

A entrada já existe no diretório.
O DN informado já está em uso.
Usuário ou grupo já foi criado.

Verificar objeto:

 

ldapsearch -x -H ldap://localhost -b "dc=empresa,dc=com" "(uid=joao)"

Como testar se o LDAP está funcionando?

Verificar serviço:

sudo systemctl status slapd

Testar porta LDAP:

nc -vz ip_do_servidor 389

Testar porta LDAPS:

nc -vz ip_do_servidor 636

Fazer consulta simples:

ldapsearch -x -H ldap://ip_do_servidor -b "dc=empresa,dc=com"

Fazer consulta autenticada:

ldapsearch -x -H ldap://ip_do_servidor -D "cn=admin,dc=empresa,dc=com" -W -b "dc=empresa,dc=com"

Verificar logs:

sudo journalctl -u slapd -f

Comandos principais relacionados ao LDAP

ComandoFunção
ldapsearchConsulta informações no LDAP
ldapaddAdiciona entradas no LDAP
ldapmodifyModifica entradas existentes
ldapdeleteRemove entradas do LDAP
ldapwhoamiTesta autenticação LDAP
slapcatExporta base LDAP
slapaddImporta dados diretamente na base
systemctl status slapdVerifica status do OpenLDAP
nc -vz servidor 389Testa porta LDAP
nc -vz servidor 636Testa porta LDAPS

Exemplo completo de uso

Instalar OpenLDAP e ferramentas:

sudo apt update
sudo apt install slapd ldap-utils

Verificar serviço:

sudo systemctl status slapd

Testar porta LDAP:

nc -vz localhost 389

Consultar base LDAP:

ldapsearch -x -H ldap://localhost -b "dc=empresa,dc=com"

Criar arquivo de usuário:

nano usuario.ldif

Conteúdo:

dn: uid=joao,ou=usuarios,dc=empresa,dc=com
objectClass: inetOrgPerson
uid: joao
cn: João Silva
sn: Silva
mail: joao@empresa.com

Adicionar usuário:

ldapadd -x -D "cn=admin,dc=empresa,dc=com" -W -f usuario.ldif

Buscar usuário:

ldapsearch -x -H ldap://localhost -b "dc=empresa,dc=com" "(uid=joao)"

Esse exemplo instala o LDAP, testa o serviço, cria uma entrada de usuário e consulta o usuário no diretório.


Boas práticas de segurança

Usar LDAPS ou LDAP com STARTTLS.
Evitar autenticação simples sem criptografia.
Usar senhas fortes para contas administrativas.
Criar contas de bind com permissões limitadas.
Não usar conta admin em aplicações comuns.
Restringir acesso ao servidor LDAP por firewall.
Usar grupos para organizar permissões.
Manter OpenLDAP, Samba ou Active Directory atualizados.
Monitorar logs de autenticação.
Fazer backup regular da base LDAP.
Desativar contas antigas sem uso.
Revisar permissões e ACLs periodicamente.