Skip to main content

210.3 Usando o Cliente LDAP


Introdução


Esse tópico mostra como usar o ldap, como um cliente usaria o LDAP. Para seguir com esse tópico, vamos configurar o servidor OpenLDAP para trabalhar no modo de configuração dinâmica (que é o modo recomendado de uso).



Configurando OpenLDAP modo dinâmico


No modo de configuração dinâmica do OpenLDAP, toda a configuração do servidor é gerida por meio de entradas no próprio diretório LDAP, especificamente na árvore de configuração cn=config. Isso permite que o OpenLDAP seja configurado enquanto está em execução, sem a necessidade de reiniciar o serviço para que as mudanças tenham efeito.


Vamos entender essa nova estrutura de configuração:

  1.  dn: olcDatabase={2}hdb,cn=config
2. changetype: modify
3. replace: olcSuffix
4. olcSuffix: dc=maddogs,dc=com,dc=br

Essa entrada de dados no LDAP é uma modificação em um banco de dados HDB existente, podemos ver isso pela primeira e segunda linha.


  1. Esta linha especifica o Distinguished Name (DN) da entrada que será modificada. Nesse caso, estamos lidando com um banco de dados HDB que está identificado por {2}. Esse identificador numérico {2} é um identificador único para um tipo de entrada específica, sendo que antes do {2} temos o {0}, o {1}, e assim por diante. O olcDatabase={2}hdb especifica o banco de dados HDB que está sendo utilizado e cn=config é local onde as informações do banco de dados estão armazenadas, nesse caso dentro de /etc/ldap/slapd.d/cn\=config.

    A notação olcDatabase={2}hdb é uma convenção comum para especificar um banco de dados HDB em um servidor OpenLDAP, mas para isso seu LDAP deve estar usando esse banco com esse número, mais abaixo tem um comando demonstrando como fazer para verificar qual está configurado. A opção {2}hdb é a configuração padrão para CentOS 7, para Ubuntu 20.04 normalmente é {1}mdb.

  2. É o tipo de mudança, nesse caso é uma modificação, por causa de changetype: modify. No OpenLDAP, as operações podem ser de modificação (modify), adição (add), deleção (delete), ou renomeação (modrdn).

  3. Aqui, o comando está especificando que o atributo olcSuffix da entrada olcDatabase={2}hdb será substituído. O olcSuffix define a raiz do namespace que o banco de dados gerencia. Ou seja, ele define qual parte da árvore LDAP será gerenciada por este banco de dados específico.

  4. Este é o novo valor que será atribuído ao olcSuffix. No exemplo, o banco de dados HDB agora gerenciará o namespace que começa com dc=maddogs,dc=com,dc=br.


Banco de dados

O identificador numérico, como {2} em olcDatabase={2}hdb, é crucial para distinguir entre diferentes bancos de dados configurados no servidor LDAP. A configuração do OpenLDAP pode incluir múltiplos bancos de dados, cada um gerenciando diferentes partes do diretório ou com diferentes propósitos (por exemplo, um banco de dados para informações de usuários e outro para grupos).


A ordem dos identificadores numéricos define a prioridade de acesso durante as consultas LDAP. O servidor verifica os bancos de dados na ordem dos identificadores; assim, se uma consulta não encontra dados relevantes no banco de dados {0}, ela é automaticamente direcionada para o próximo banco de dados na sequência, {1}, e assim por diante.


Para identificar os bancos de dados configurados no OpenLDAP e seus respectivos identificadores, você pode utilizar o comando:


$ sudo ldapsearch -H ldapi:/// -Y EXTERNAL -b "cn=config" -LLL -Q "olcDatabase=*" dn
dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}mdb,cn=config

Este comando faz uma consulta ao diretório cn=config e retorna todos os DNs que correspondem a entradas de banco de dados (olcDatabase). No exemplo dado:


dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}mdb,cn=config

Agora podemos configurar nosso LDAP, primeiro vamos mudar o suffix (como visto acima), depois vamos modificar o rootdn que é o usuário Root do LDAP, mas aqui ele se chama olcRootDN e por fim vamos modificar a senha do Root, que antes era chamada de rootpw e agora se chama olcRootPW.

# Crie o diretório abaixo:
$ sudo mkdir /etc/ldap/slapd.d/maddogs

# Baixe o arquivo:
$ sudo wget -O /etc/ldap/slapd.d/maddogs/cn=maddogs.ldif https://gitlab.com/sysnetbr/codes/-/raw/main/ldap/cn=maddogs.ldif

# Antes de aplicar as mudanças, vamos ver a configuração atual:
$ sudo slapcat
dn: dc=localdomain
objectClass: top
objectClass: dcObject
objectClass: organization
o: localdomain
dc: localdomain
structuralObjectClass: organization
entryUUID: 6bd3a2a6-7038-103d-98b6-3dacc0ad91f4
creatorsName: cn=admin,dc=localdomain
createTimestamp: 20230416002148Z
entryCSN: 20230416002148.386052Z#000000#000#000000
modifiersName: cn=admin,dc=localdomain
modifyTimestamp: 20230416002148Z

dn: cn=admin,dc=localdomain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9RUFqNWh1dEtRRnN6N0hxdTdHL2l1TjFsQlN2SXQzWVA=
structuralObjectClass: organizationalRole
entryUUID: 6bd4cf0a-7038-103d-98b7-3dacc0ad91f4
creatorsName: cn=admin,dc=localdomain
createTimestamp: 20230416002148Z
entryCSN: 20230416002148.393791Z#000000#000#000000
modifiersName: cn=admin,dc=localdomain
modifyTimestamp: 20230416002148Z

# Agora vamos aplicar a mudança:
$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/ldap/slapd.d/maddogs/cn=maddogs.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}mdb,cn=config"

modifying entry "olcDatabase={1}mdb,cn=config"

modifying entry "olcDatabase={1}mdb,cn=config"

# Veja se mudou:
$ sudo slapcat


# '-Y' é uma das formas de autenticação, diferente do
# '-x', o '-Y' impede que a senha trafegue em modo texto,
# podendo ser capturada.

Erro ao usar slapcat

Caso seu primeiro slapcat de erro pode ser que esteja faltando o arquivo de configuração default, que no meu caso já veio na instalação.


Copie um arquivo base para não ter problemas:

# No ambiente RedHat:
$ sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

# Depois reinicie o serviço:
$ sudo systemctl restart slapd

No Debian Like esse arquivo normalmente vai estar por padrão, mas caso não esteja, copie o meu:

/var/lib/ldap/DB_CONFIG
set_cachesize 0 2097152 0
set_lk_max_objects 1500
set_lk_max_locks 1500
set_lk_max_lockers 1500

Nós ainda podemos fornecer o sufixo durante o slapcat:

$ suod slapcat -b cn=config

Nós ainda temos que fazer os includes, para isso faça:

# Adicionando o Core:
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{0\}core.ldif

# No Debian Like não precisa, ele já vem adicionado por padrão.


Adicionando usuários


Vamos adicionar mais informações ao nosso Banco:

# Baixe o arquivo:
$ sudo wget -O /etc/ldap/slapd.d/maddogs/cn=domain.ldif https://gitlab.com/sysnetbr/codes/-/raw/main/ldap/domain.ldif

# Agora vamos aplicar a mudança:
$ sudo ldapadd -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -f /etc/ldap/slapd.d/maddogs/cn=domain.ldif
Enter LDAP Password:
adding new entry "dc=maddogs,dc=com,dc=br"

adding new entry "ou=usuarios,dc=maddogs,dc=com,dc=br"

adding new entry "cn=Isabella,ou=usuarios,dc=maddogs,dc=com,dc=br"

adding new entry "cn=Leonardo,ou=usuarios,dc=maddogs,dc=com,dc=br"

adding new entry "cn=Sofia,ou=usuarios,dc=maddogs,dc=com,dc=br"

adding new entry "cn=Gabriel,ou=usuarios,dc=maddogs,dc=com,dc=br"

adding new entry "cn=Luiza,ou=usuarios,dc=maddogs,dc=com,dc=br"

# Agora rode o slapcat:
$ sudo slapcat
dn: dc=localdomain
objectClass: top
objectClass: dcObject
objectClass: organization
o: localdomain
dc: localdomain
structuralObjectClass: organization
entryUUID: 6bd3a2a6-7038-103d-98b6-3dacc0ad91f4
creatorsName: cn=admin,dc=localdomain
createTimestamp: 20230416002148Z
entryCSN: 20230416002148.386052Z#000000#000#000000
modifiersName: cn=admin,dc=localdomain
modifyTimestamp: 20230416002148Z

dn: cn=admin,dc=localdomain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9RUFqNWh1dEtRRnN6N0hxdTdHL2l1TjFsQlN2SXQzWVA=
structuralObjectClass: organizationalRole
entryUUID: 6bd4cf0a-7038-103d-98b7-3dacc0ad91f4
creatorsName: cn=admin,dc=localdomain
createTimestamp: 20230416002148Z
entryCSN: 20230416002148.393791Z#000000#000#000000
modifiersName: cn=admin,dc=localdomain
modifyTimestamp: 20230416002148Z

dn: dc=maddogs,dc=com,dc=br
objectClass: dcObject
objectClass: organization
o: Teste Empresa
dc: maddogs
structuralObjectClass: organization
entryUUID: 49fb973c-70cf-103d-973d-89e75b44e542
creatorsName: cn=admin,dc=maddogs,dc=com,dc=br
createTimestamp: 20230416182145Z
entryCSN: 20230416182145.611549Z#000000#000#000000
modifiersName: cn=admin,dc=maddogs,dc=com,dc=br
modifyTimestamp: 20230416182145Z

dn: ou=usuarios,dc=maddogs,dc=com,dc=br
objectClass: organizationalUnit
ou: usuarios
structuralObjectClass: organizationalUnit
entryUUID: 49fe469e-70cf-103d-973e-89e75b44e542
creatorsName: cn=admin,dc=maddogs,dc=com,dc=br
createTimestamp: 20230416182145Z
entryCSN: 20230416182145.629210Z#000000#000#000000
modifiersName: cn=admin,dc=maddogs,dc=com,dc=br
modifyTimestamp: 20230416182145Z

dn: cn=Isabella,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Isabella
sn: Silva
objectClass: person
structuralObjectClass: person
entryUUID: 49fed5fa-70cf-103d-973f-89e75b44e542
creatorsName: cn=admin,dc=maddogs,dc=com,dc=br
createTimestamp: 20230416182145Z
entryCSN: 20230416182145.632878Z#000000#000#000000
modifiersName: cn=admin,dc=maddogs,dc=com,dc=br
modifyTimestamp: 20230416182145Z

dn: cn=Leonardo,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Leonardo
sn: Rodrigues
objectClass: person
structuralObjectClass: person
entryUUID: 49ff9918-70cf-103d-9740-89e75b44e542
creatorsName: cn=admin,dc=maddogs,dc=com,dc=br
createTimestamp: 20230416182145Z
entryCSN: 20230416182145.637874Z#000000#000#000000
modifiersName: cn=admin,dc=maddogs,dc=com,dc=br
modifyTimestamp: 20230416182145Z

dn: cn=Sofia,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Sofia
sn: Costa
objectClass: person
structuralObjectClass: person
entryUUID: 4a0022b6-70cf-103d-9741-89e75b44e542
creatorsName: cn=admin,dc=maddogs,dc=com,dc=br
createTimestamp: 20230416182145Z
entryCSN: 20230416182145.641399Z#000000#000#000000
modifiersName: cn=admin,dc=maddogs,dc=com,dc=br
modifyTimestamp: 20230416182145Z

dn: cn=Gabriel,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Gabriel
sn: Pereira
objectClass: person
structuralObjectClass: person
entryUUID: 4a0084ea-70cf-103d-9742-89e75b44e542
creatorsName: cn=admin,dc=maddogs,dc=com,dc=br
createTimestamp: 20230416182145Z
entryCSN: 20230416182145.643913Z#000000#000#000000
modifiersName: cn=admin,dc=maddogs,dc=com,dc=br
modifyTimestamp: 20230416182145Z

dn: cn=Luiza,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Luiza
sn: Santos
objectClass: person
structuralObjectClass: person
entryUUID: 4a00f402-70cf-103d-9743-89e75b44e542
creatorsName: cn=admin,dc=maddogs,dc=com,dc=br
createTimestamp: 20230416182145Z
entryCSN: 20230416182145.646758Z#000000#000#000000
modifiersName: cn=admin,dc=maddogs,dc=com,dc=br
modifyTimestamp: 20230416182145Z


Comandos


Aqui vamos ver os comandos mais usados no lado do cliente e como operar esses comandos.


ComandoDescrição
ldapsearchUsado para fazer pesquisas no banco do LDAP.
ldapaddÉ usado para adicionar ou modificar algumas coisa, deve sempre ser usado com um arquivo .ldif.
ldapdeleteUsado para deletar um objeto no LDAP, pode ser usado por linha de comando ou com arquivos .ldif.
ldappasswdUsado para trocar a senha de usuário de sistema ou usuários que estejam no LDAP.
.
.


Operações Booleanas


Uma operação booleana é um tipo de operação lógica que envolve valores verdadeiros (true) e falsos (false). Essas operações são comumente utilizadas em programação, matemática, eletrônica digital, entre outras áreas.


As operações booleanas mais comuns são o E lógico (em inglês AND), o OU lógico (em inglês OR) e a negação lógica (em inglês NOT). Podemos usas essas operações dentro do LDAP para fazer filtros de buscas.


Cada linguagem (de programação principalmente) possui sua própria maneira de implementar essas operações.


  • AND
    No LDAP é referenciado por & (e-comercial), é usado para encontrar entradas que atendam a todas as condições especificadas. Por exemplo, se você quiser encontrar todos os usuários com o sobrenome Silva e o nome Maria, você usaria o operador AND. A sintaxe seria:

    (&(sn=Silva)(givenName=Maria))

  • OR
    No LDAP é referenciado por | (barra vertical ou Pipe), é usado para encontrar entradas que atendam a pelo menos uma das condições especificadas. Por exemplo, se você quiser encontrar todos os usuários com o sobrenome Silva ou o nome Maria (perceba que é um ou outro), você usaria o operador OR. A sintaxe seria:

    (|(sn=Silva)(givenName=Maria))

  • NOT
    No LDAP é referenciado por ! (exclamação), é usado para encontrar entradas excluindo uma entrada em particular. Por exemplo, para pesquisar por todos os usuários que não pertencem ao grupo "administrators", você poderia usar a seguinte expressão LDAP:

    (&(objectClass=user)(!(memberOf=cn=administrators,ou=groups,dc=example,dc=com)))


Filtros


Vamos ver como usar os comando mencionados acima, em alguns casos vamos usar algumas sintaxes desses comandos para criar certos tipos de filtros, ainda adicionando as operações booleanas para melhorar esses filtros.



ldapsearch


Um exemplo do comando ldapsearch pode ser visto abaixo:

$ ldapsearch -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -b "dc=maddogs,dc=com,dc=br"
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=maddogs,dc=com,dc=br> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# maddogs.com.br
dn: dc=maddogs,dc=com,dc=br
objectClass: dcObject
objectClass: organization
o: Teste Empresa
dc: maddogs

# usuarios, maddogs.com.br
dn: ou=usuarios,dc=maddogs,dc=com,dc=br
objectClass: organizationalUnit
ou: usuarios

# Isabella, usuarios, maddogs.com.br
dn: cn=Isabella,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Isabella
sn: Silva
objectClass: person

# Leonardo, usuarios, maddogs.com.br
dn: cn=Leonardo,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Leonardo
sn: Rodrigues
objectClass: person

# Sofia, usuarios, maddogs.com.br
dn: cn=Sofia,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Sofia
sn: Costa
objectClass: person

# Gabriel, usuarios, maddogs.com.br
dn: cn=Gabriel,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Gabriel
sn: Pereira
objectClass: person

# Luiza, usuarios, maddogs.com.br
dn: cn=Luiza,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Luiza
sn: Santos
objectClass: person

# search result
search: 2
result: 0 Success

# numResponses: 8
# numEntries: 7

Podemos melhorar o filtro, por exemplo, pesquisar por Sofia:

$ ldapsearch -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -b "dc=maddogs,dc=com,dc=br" cn=Sofia
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=maddogs,dc=com,dc=br> with scope subtree
# filter: cn=Sofia
# requesting: ALL
#

# Sofia, usuarios, maddogs.com.br
dn: cn=Sofia,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Sofia
sn: Costa
objectClass: person

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Pesquise por tudo que comece com C dentro de sn. Vou usar o parâmetro -LLL para suprimir o resultado:

$ ldapsearch -LLL -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -b "dc=maddogs,dc=com,dc=br" sn=C*
Enter LDAP Password:
dn: cn=Sofia,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Sofia
sn: Costa
objectClass: person


ldapadd/ldapmodify


Normalmente o ldapadd é um link para o comando ldapmodify:

$ ls -l $(which ldapadd)
lrwxrwxrwx 1 root root 10 May 12 2022 /usr/bin/ldapadd -> ldapmodify

Vamos adicionar um usuário:

# Baixe o arquivo:
$ sudo wget -O /etc/ldap/slapd.d/maddogs/cn=usuario.ldif https://gitlab.com/sysnetbr/codes/-/raw/main/ldap/usuarios.ldif

# Adicione o usuário:
$ sudo ldapadd -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -f /etc/ldap/slapd.d/maddogs/cn=usuario.ldif
Enter LDAP Password:
adding new entry "cn=Joao,ou=usuarios,dc=maddogs,dc=com,dc=br"

Agora vamos modificar ele, vamos usar o mesmo comando (já que é um link simbólico):

# Baixe o arquivo:
$ sudo wget -O /etc/ldap/slapd.d/maddogs/cn=modificacao.ldif https://gitlab.com/sysnetbr/codes/-/raw/main/ldap/modificacao.ldif

# Veja tudo sobre esse usuário:
$ ldapsearch -LLL -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -b "dc=maddogs,dc=com,dc=br" cn=joao
Enter LDAP Password:
dn: cn=Joao,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Joao
sn: Dias
mail: joao@maddogs.com.br
objectClass: person
objectClass: inetOrgPerson

# Adicione a modificação (vamos adicionar uma descrição):
$ sudo ldapadd -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -f /etc/ldap/slapd.d/maddogs/cn=modificacao.ldif
Enter LDAP Password:
modifying entry "cn=Joao,ou=usuarios,dc=maddogs,dc=com,dc=br"

# Veja se adicionou a descrição para o usuário:
$ ldapsearch -LLL -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -b "dc=maddogs,dc=com,dc=br" cn=joao
Enter LDAP Password:
dn: cn=Joao,ou=usuarios,dc=maddogs,dc=com,dc=br
cn: Joao
sn: Dias
mail: joao@maddogs.com.br
objectClass: person
objectClass: inetOrgPerson
description: Acrescentando informacao


Modificando informações

Qualquer mudança pode ser realizada usando a ferramenta ldapmodify, para isso, deve-se existir um arquivo no formato ldif com a mudança que deva ser realizada.


Um arquivo ldif possui algumas opções, nós usamos um sem essas opções para adicionar, mas para modificar temos que adicionar algumas opções para dizer qual o comportamento e o que fazer:
OpçãoDescrição
changetypeIndica o tipo de ação a ser realizada, neste caso é modificar um registro existente, veja as opções possíveis para alteração de registro.
changetype: addadiciona um novo atributo a uma entrada existente.
changetype: deleteDeleta uma entrada.
changetype: modrdnAltera o RDN (Relative Distinguished Name) de uma entrada;
changetype: modifymodifica uma entrada.
changetype: moddnmove ou renomeia uma entrada.

O changetype possui algumas opções, são elas:

Opções do CHANGETYPEDescrição
addAdiciona um atributo, caso o atributo já exista, será acrescentado mais de um valor ao atributo.
deleteRemove o valor do atributo, caso o valor seja único, o atributo será removido.
replaceSubstitui o valor do atributo pelo novo valor.

Vamos brincar um pouco com ldamodify, já que é uma operação que normalmente acontece com bastante frequência. Vamos mudar o nome da Isabella par Isabela:

# Crie um arquivo com essas opções:
dn: cn=Isabella,ou=usuarios,dc=maddogs,dc=com,dc=br
changetype: modrdn
newrdn: cn=Isabela
deleteoldrdn: 1

# Agora aplique a mudança, coloquei o nome do meu arquivo de 'mod.ldif':
$ ldapmodify -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -f mod.ldif
Enter LDAP Password:
modifying rdn of entry "cn=Isabella,ou=usuarios,dc=maddogs,dc=com,dc=br"

# Veja se mudou o CN do user:
$ ldapsearch -LLL -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -b "dc=maddogs,dc=com,dc=br" cn=isabela
Enter LDAP Password:
dn: cn=Isabela,ou=usuarios,dc=maddogs,dc=com,dc=br
objectClass: person
sn: Silva
cn: Isabela

Vamos modificar o sobrenome da Isabela:

# Crie um arquivo com essas opções:
dn: cn=Isabela,ou=usuarios,dc=maddogs,dc=com,dc=br
changetype: modify
replace: sn
sn: Andrade

# Agora aplique a mudança, coloquei o nome do meu arquivo de 'mod.ldif':
$ ldapmodify -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -f mod.ldif
Enter LDAP Password:
modifying entry "cn=Isabela,ou=usuarios,dc=maddogs,dc=com,dc=br"

# Veja se mudou o CN do user:
$ ldapsearch -LLL -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -b "dc=maddogs,dc=com,dc=br" cn=isabela
Enter LDAP Password:
dn: cn=Isabela,ou=usuarios,dc=maddogs,dc=com,dc=br
objectClass: person
cn: Isabela
sn: Andrade

O delete usa a mesma estrutura do replace:

dn: cn=Isabela,ou=usuarios,dc=maddogs,dc=com,dc=br
changetype: modify
delete: sn
sn: Andrade

Ou deletar um usuario:

dn: cn=Isabela,ou=usuarios,dc=maddogs,dc=com,dc=br
changetype: delete

Ou para adicionar:

dn: cn=Isabela,ou=usuarios,dc=maddogs,dc=com,dc=br
changetype: add
objectClass: person
objectClass: iNetOrgPerson
cn: Leonardo
sn: Rodrigues
mail: isabela@maddogs.com.br


ldapdelete


Vamos começar revomendo um usuário, o Joao que foi o último que nós adicionamos:

$ sudo ldapdelete -h localhost -D "cn=admin,dc=maddogs,dc=com,dc=br" -W "cn=Joao,ou=usuarios,dc=maddogs,dc=com,dc=br"
Enter LDAP Password:

# Verifique se ele está na base de dados:
$ ldapsearch -LLL -x -D "cn=admin,dc=maddogs,dc=com,dc=br" -W -b "dc=maddogs,dc=com,dc=br" cn=joao
Enter LDAP Password:

# Não retornou nada porque não encontrou.


Mudando/Adicionando banco de dados


É possível mudar o Banco de dados em uso, não altere com sistema já em produção, se não, vai perder os dados:

# Crie um arquivo com as opções abaixo:
dn: cn=config
changetype: modify
replace: olcDatabase
olcDatabase: <novo_tipo_de_banco>


# Rode o comando:
$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f arquivo.ldif

Ainda é possível adicionar um novo banco se preferir:

# Crie o arquivo abaixo:
/etc/ldap/slapd.d/cn=config/olcDatabase={3}bdb.ldif

## Adicione a configuração abaixo:
dn: olcDatabase={3}bdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: {3}bdb
olcSuffix: dc=exemplo,dc=com
olcDbDirectory: /var/lib/ldap/db3
olcRootDN: cn=admin,dc=exemplo,dc=com
olcRootPW: {SSHA}password
olcDbIndex: objectClass eq,pres
olcDbIndex: cn,uid eq,pres,sub

# Execute o comando abaixo:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/ldap/slapd.d/cn=config/olcDatabase={3}bdb.ldif


Fontes importantes


https://www.openldap.org/doc/admin24/access-control.html