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/grupoCaracterí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=financeiroNesse 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=comEsse 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: 41999999999Exemplos comuns de atributos:
| Atributo | Função |
|---|---|
uid | Identificador do usuário |
cn | Nome comum |
sn | Sobrenome |
mail | |
telephoneNumber | Telefone |
userPassword | Senha |
memberOf | Grupos 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=servidoresAs OUs ajudam a organizar os objetos no LDAP.
Exemplo completo:
ou=usuarios,dc=empresa,dc=comO que é DC no LDAP?
DC significa Domain Component.
Ele representa partes do domínio.
Exemplo de domínio:
empresa.comNo LDAP, pode ficar assim:
dc=empresa,dc=comOutro exemplo:
suporte.empresa.comNo LDAP:
dc=suporte,dc=empresa,dc=comO 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=comExemplo de usuário:
cn=João Silva,ou=usuarios,dc=empresa,dc=comLDAP é 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:
| Nome | O que é |
|---|---|
| LDAP | Protocolo de acesso a diretórios |
| Active Directory | Serviço de diretório da Microsoft |
| OpenLDAP | Implementaçã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 autenticadoLDAP é 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 administrativoLDAP usa TCP ou UDP?
O LDAP usa principalmente TCP.
Portas comuns:
| Serviço | Porta | Segurança |
|---|---|---|
| LDAP | 389/TCP | Sem criptografia ou com STARTTLS |
| LDAPS | 636/TCP | SSL/TLS |
A porta padrão do LDAP é:
389/TCPA porta padrão do LDAPS é:
636/TCPLDAP 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
| Protocolo | Porta comum | Segurança |
|---|---|---|
| LDAP | 389 | Sem criptografia ou STARTTLS |
| LDAPS | 636 | SSL/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-utilsDurante a instalação, pode ser solicitada uma senha de administrador LDAP.
Reconfigurar o OpenLDAP:
sudo dpkg-reconfigure slapdVerificar status:
sudo systemctl status slapdIniciar serviço:
sudo systemctl start slapdHabilitar na inicialização:
sudo systemctl enable slapdComo testar se o LDAP está funcionando?
Testar porta LDAP:
nc -vz ip_do_servidor 389Testar porta LDAPS:
nc -vz ip_do_servidor 636Verificar serviço:
sudo systemctl status slapdConsultar 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.ldifConteúdo:
dn: uid=joao,ou=usuarios,dc=empresa,dc=com
objectClass: inetOrgPerson
uid: joao
cn: João Silva
sn: Silva
mail: joao@empresa.comAdicionar ao LDAP:
ldapadd -x -D "cn=admin,dc=empresa,dc=com" -W -f usuario.ldifComo modificar uma entrada LDAP?
Criar arquivo de alteração:
nano alterar-email.ldifConteúdo:
dn: uid=joao,ou=usuarios,dc=empresa,dc=com
changetype: modify
replace: mail
mail: joao.silva@empresa.comAplicar alteração:
ldapmodify -x -D "cn=admin,dc=empresa,dc=com" -W -f alterar-email.ldifComo 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ção | O que faz |
|---|---|
| Autenticação | Verifica se usuário e senha estão corretos |
| Autorização | Verifica 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
| Tecnologia | Função |
|---|---|
| LDAP | Consulta e gerenciamento de diretórios |
| Kerberos | Autenticação segura por tickets |
| Active Directory | Serviç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 credentialsOu:
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 serverPossíveis causas:
Serviço LDAP parado.
IP ou hostname incorreto.
Porta bloqueada.
Firewall bloqueando.
Servidor fora do ar.
Verificar serviço:
sudo systemctl status slapdTestar porta:
nc -vz ip_do_servidor 389Testar LDAPS:
nc -vz ip_do_servidor 636Verificar firewall:
sudo ufw statusNo such object
Erro:
No such objectPossí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 requiredPossí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 failedPossí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.comVerificar se o nome do certificado corresponde ao servidor usado.
Insufficient access
Erro:
Insufficient accessOu:
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.ldifAlready exists
Erro:
Already existsPossí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 slapdTestar porta LDAP:
nc -vz ip_do_servidor 389Testar porta LDAPS:
nc -vz ip_do_servidor 636Fazer 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 -fComandos principais relacionados ao LDAP
| Comando | Função |
|---|---|
ldapsearch | Consulta informações no LDAP |
ldapadd | Adiciona entradas no LDAP |
ldapmodify | Modifica entradas existentes |
ldapdelete | Remove entradas do LDAP |
ldapwhoami | Testa autenticação LDAP |
slapcat | Exporta base LDAP |
slapadd | Importa dados diretamente na base |
systemctl status slapd | Verifica status do OpenLDAP |
nc -vz servidor 389 | Testa porta LDAP |
nc -vz servidor 636 | Testa porta LDAPS |
Exemplo completo de uso
Instalar OpenLDAP e ferramentas:
sudo apt update
sudo apt install slapd ldap-utilsVerificar serviço:
sudo systemctl status slapdTestar porta LDAP:
nc -vz localhost 389Consultar base LDAP:
ldapsearch -x -H ldap://localhost -b "dc=empresa,dc=com"Criar arquivo de usuário:
nano usuario.ldifConteúdo:
dn: uid=joao,ou=usuarios,dc=empresa,dc=com
objectClass: inetOrgPerson
uid: joao
cn: João Silva
sn: Silva
mail: joao@empresa.comAdicionar usuário:
ldapadd -x -D "cn=admin,dc=empresa,dc=com" -W -f usuario.ldifBuscar 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.