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.
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. OolcDatabase={2}hdb
especifica o banco de dados HDB que está sendo utilizado ecn=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çãoolcDatabase={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
.É 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
).Aqui, o comando está especificando que o atributo
olcSuffix
da entradaolcDatabase={2}hdb
será substituído. OolcSuffix
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.Este é o novo valor que será atribuído ao
olcSuffix
. No exemplo, o banco de dados HDB agora gerenciará o namespace que começa comdc=maddogs,dc=com,dc=br
.
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.
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:
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.
Comando | Descrição |
---|---|
ldapsearch | Usado para fazer pesquisas no banco do LDAP. |
ldapadd | É usado para adicionar ou modificar algumas coisa, deve sempre ser usado com um arquivo .ldif . |
ldapdelete | Usado para deletar um objeto no LDAP, pode ser usado por linha de comando ou com arquivos .ldif . |
ldappasswd | Usado 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ção | Descrição |
---|---|
changetype | Indica 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: add | adiciona um novo atributo a uma entrada existente. |
changetype: delete | Deleta uma entrada. |
changetype: modrdn | Altera o RDN (Relative Distinguished Name) de uma entrada; |
changetype: modify | modifica uma entrada. |
changetype: moddn | move ou renomeia uma entrada. |
O changetype
possui algumas opções, são elas:
Opções do CHANGETYPE | Descrição |
---|---|
add | Adiciona um atributo, caso o atributo já exista, será acrescentado mais de um valor ao atributo. |
delete | Remove o valor do atributo, caso o valor seja único, o atributo será removido. |
replace | Substitui 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