Uso e gerenciamento
A forma padrão de uso e gerenciamento de uma base OpenLDAP é feita através de uma série de comandos que fazem parte do servidor. Além dos comandos que fazem parte do servidor o OpenLDAP oferece um conjunto extra de comandos.
Os comandos que já vem com o servidor iniciam com slap e os comandos extras começam com ldap. A diferença crucial é que os comandos slap somente devem ser executados “a frio”, ou seja, com o servidor OpenLDAP parado, enquanto que os comando ldap somente devem ser executados “quentes”, ou seja, com o servidor OpenLDAP sendo executado.
Para instalar os comandos extras utilize o seguinte comando:
aptitude install ldap-utils
Série de comandos “slap”
Importante lembrar que estes comandos só devem ser executados com a base OpenLDAP parada.
Assim o primeiro passo é parar o OpenLDAP com o comando:
/etc/init.d/slapd stop
slaptest
Este comando testa a integridade do arquivo de configuração slapd.conf e suas opções. Excelente para saber se as opções estão corretamente definidas.
slapcat
Este comando permite que a base LDAP seja exportada para um arquivo ldif que é a extensão de arquivos utilizada para adicionar e/ou remover informações de uma base LDAP.
A sintaxe mais comum é:
slapcat -l base_ldap.ldif
slapadd
Este comando utiliza um arquivo ldif para adicionar objetos à base LDAP. A seguir vamos ver alguns exemplos de arquivos ldif para adicionar objetos:
Adicionando uma “ou” – Organizational Unit
1. Crie o arquivo ou.ldif e copie nele este conteúdo:
dn: ou=Usuarios,dc=kyapanel,dc=com,dc=br ou: Usuarios objectClass: organizationalUnit objectClass: top
2. Salve o arquivo;
3. Pare o OpenLDAP;
4. Execute o comando: slapadd -l ou.ldif
Adicionando um usuário ao “ou”
1. Crie o arquivo user.ldif e copie nele o seguinte conteúdo:
dn: cn=Marcos Lima,ou=Usuarios,dc=kyapanel,dc=com,dc=br uid: marcosl cn: Marcos Lima sn: MarcosL objectClass: inetOrgPerson objectClass: posixAccount homeDirectory: /home/marcosl loginShell: /bin/bash uidNumber: 1000 gidNumber: 1000 userPassword: 123mudar
2. Salve o arquivo;
3. Pare o OpenLDAP;
4. Execute o comando: slapadd -l user.ldif
Testando a criação de objetos
Execute o comando “slapcat” para ver a saída. Os dois objetos devem existir.
slappasswd
Este comando é um utilitário para geração de senhas em “hash”. O seu uso é muito simples:
slappasswd -s sua_senha_aqui
Sua utilidade é transformar senhas literais em senhas seguras em hash. Pode-se definir qual o “hash” desejado usando a opção “-h” e indicando o tipo. Os tipos de “hash” suportados pelo comando são: {CRYPT}, {MD5}, {SMD5}, {SSHA} e {SHA}.
Sim. É necessário escrever os {}. veja o exemplo:
slappasswd -h {MD5} -s sua_senha_aqui
Se a opção -h não for utilizada o “hash” padrão é o SSHA que atualmente é um dos melhores.
No exemplo anterior tínhamos o atributo “userPassword” contendo uma senha em texto plano “123mudar”. Dessa forma funciona, mas a senha será armazenada em texto plano na base LDAP e isso é indesejável
Podemos usar o comando, “slappasswd -s 123mudar”, para gerar um “hash” como este:
{SSHA}B+3Ppz4uc/D722PwOFqrQIDF8v4ISYU5
Este “hash” deve ser colocado integralmente no atributo “userPassword”, assim a senha não mais será armazenada em texto plano.
slapindex
Este comando é utilizado para indexar a base LDAP seguindo às instruções definidas na opção “index” do arquivo de configuração “slapd.conf”.
Maiores detalhes sobre a indexação da base LDAP serão vistos mais adiante, neste manual.
Série de comandos “ldap”
Importante lembrar que estes comandos devem ser executados com a base OpenLDAP ativada.
Portanto o primeiro passo é ativar o OpenLDAP com o comando:
/etc/init.d/slapd start
Por se tratarem de comandos que são executados em uma base LDAP ativa, algumas opções adicionais se fazem sempre necessárias, como o “host” no qual vai se conectar e as credenciais de acesso.
As opções mais comuns são:
-h Host no qual se vai conectar
-p Porta na qual se vai conectar
-x Autenticação não segura, ou seja, sem SASL
-ZZ Autenticação segura usando TLS - Transport Layer Security
-D BINDDN ou simplesmente o DN completo do usuário que será usado para autenticar
-w Senha do BINDDN
É certo que praticamente todos os comandos da série “ldap” irão usar praticamente todas essas opções.
ldapsearch
Este comando é utilizado para realizar buscas na base LDAP. Além das opções acima, pode-se usar ainda as opções:
-b Define a partir de qual “galho” a pesquisa será feita
-s Define o escopo da pesquisa. As opções são: base, one e sub
base – Busca apenas na base DN
one – busca no mesmo nível do “galho” definido em -b e em mais um sub-nível;
sub – opção padrão, busca recursivamente a partir do “galho”
-LLL - Mostra o resultado da pesquisa desabilitando comentários e informações extras
Exemplo:
ldapsearch -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -b ou=Usuarios,dc=kyapanel,dc=com,dc=br -LLL
Aprendendo a sintaxe do filter
O comando ldapsearch oferece ainda mais uma possibilidade de refinamento da pesquisa. Pode-se definir um ou vários filtros para os resultados.
Para usá-los basta acrescentar ao final o filtro desejado e o(s) atributo(s) que devem ser mostrados no resultado.
Vamos aos exemplos para ilustrar:
ldapsearch -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -b ou=Usuarios,dc=kyapanel,dc=com,dc=br -LLL uid=marcosl
Perceba que nesta pesquisa não aparece o objeto ou=Usuarios
ldapsearch -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -b ou=Usuarios,dc=kyapanel,dc=com,dc=br -LLL uid=marcosl cn
Nesta pesquisa a busca foi feita pelo atributo “uid”, mas no final pedimos que fosse retornado o atributo “cn”.
Os filtros podem ser ainda mais elaborados utilizando algumas conjunções como o caracter * para definir todos ou inicia-se por “mar”, além dos operadores lógicos:
& => para condicional e; | => para condicional ou; ! => para condicional não;
E operadores comparativos:
“=” para igual; “~=” para igualdades aproximadas; “<=” para menor que; “>=” para maior que.
Vejamos exemplos mais elaborados:
ldapsearch -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -b ou=Usuarios,dc=kyapanel,dc=com,dc=br -LLL '(&(uid=marcosl)(uidNumber=2000))' cn
Esta pesquisa não deve retornar nada, afinal de contas o “uid” marcosl tem uidNumber igual a 1000 e não 2000
ldapsearch -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -b ou=Usuarios,dc=kyapanel,dc=com,dc=br -LLL '(|(uid=marcosl)(uid=joao))' cn
Esta pesquisa irá retornar todos os objetos que tenham “uid” igual a marcosl ou joao
ldapsearch -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -b ou=Usuarios,dc=kyapanel,dc=com,dc=br -LLL '(&(uid=marcosl)(!(uidNumber=2000)))' cn
Esta pesquisa irá retornar o CN do “uid” marcosl, afinal de contas o usuário marcosl tem uidNumber igual a 1000.
Resumindo
Pode-se refinar muito a pesquisa utilizando os operadores do filtro. Para simplificar a sintaxe assuma:
OL – Operador lógico
OC – Operador comparativo
Sintaxe básica:
‘(OL(atributo1<OC>valor)(atributo2<OC>valor))’
Sintaxe avançada:
‘(OL(atributo1<OC>valor)(OL(atributo2<OC>valor)))’
ldapadd
Este comando é similar ao slapadd, entretanto permite que se adicionem objetos à base LDAP com o serviço “no ar”.
O procedimento é o mesmo:
1. Crie o arquivo group.ldif e copie nele este conteúdo:
dn: ou=Grupos,dc=kyapanel,dc=com,dc=br ou: Grupos objectClass: organizationalUnit objectClass: top
2. Salve o arquivo;
3. Execute o comando:
ldapadd -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -f group.ldif
O sucesso ou fracasso na adição de um objeto dependerá sempre do permissionamento do BINDDN e da forma do arquivo ldif.
ldapmodify
Este comando permite fazer alterações nos atributos de um objeto já existente. Seu funcionamento é similar aos demais comandos, ou seja, ele utiliza um arquivo “ldif” para fazer as alterações desejadas.
Apesar de usar um arquivo “ldif”, este é levemente diferente, permitindo que os parâmetros de alteração sejam definidos.
A opção extra para indicar qual é o arquivo “ldif” a ser usada é: -f
Estão disponíveis três formas de alteração:
add
replace
delete
Vejamos como esses arquivos “ldif” de modificação são escritos:
dn: completo ação: atributo atributo: valor
Vamos fazer alterações em nosso usuário Marcos Lima, adicionando um novo atributo title, alterando o valor do atributo loginShell e finalmente, removendo o atributo title.
Adicionando um atributo
1. Crie o arquivo alter_user.ldif com o seguinte conteúdo:
dn: cn=Marcos Lima,ou=Usuarios,dc=kyapanel,dc=com,dc=br add: title title: Professor
2. Execute o comando:
ldapmodify -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -f alter_user.ldif
Alterando um atributo
1. Crie o arquivo alter_user2.ldif com o seguinte conteúdo:
dn: cn=Marcos Lima,ou=Usuarios,dc=kyapanel,dc=com,dc=br replace: loginShell loginShell: /bin/false
2. Execute o comando:
ldapmodify -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -f alter_user2.ldif
Removendo um atributo
1. Crie o arquivo alter_user3.ldif com o seguinte conteúdo:
dn: cn=Marcos Lima,ou=Usuarios,dc=kyapanel,dc=com,dc=br delete: title
2. Execute o comando:
ldapmodify -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -f alter_user3.ldif
Tudo no mesmo ldif
Visando facilitar múltiplas alterações, pode-se escrever um “ldif” de modificação contendo todas elas e executando-as de uma única vez. Para isso basta separar as ações por um hífen. Veja abaixo o exemplo:
1. Crie o arquivo alter_user4.ldif com o seguinte conteúdo:
dn: cn=Marcos Lima,ou=Usuarios,dc=kyapanel,dc=com,dc=br add: title title: Professor - replace: loginShell loginShell: /bin/bash - delete: title
2. Execute o comando:
ldapmodify -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -f alter_user4.ldif
ldapdelete
Este comando permite remover um objeto especificando o seu DN completo. Veja o exemplo:
ldapdelete -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha cn="Marcos Lima",ou=Usuarios,dc=kyapanel,dc=com,dc=br
O resultado será a completa remoção do usuário “Marcos Lima”.
ldapmodrdn
Este comando permite que um DN seja renomeado. Até o momento vimos diversas opções que permitem alterações em atributos de um objeto, mas não do próprio objeto, ou seja, do seu DN.
Este comando permite essa alteração.
A opção extra e que deve ser sempre usada é “-r”. Ela evita que o novo DN modificado tenha dois registros CN.
Vejamos como ele funciona:
1. Crie o arquivo alter_user5.ldif com o seguinte conteúdo:
cn="Marcos Lima",ou=Usuarios,dc=kyapanel,dc=com,dc=br cn="Marcos Lima da Silva"
Perceba que a segunda linha contém apenas o valor para o qual se quer modificar o DN e não um DN completo.
2. Execute o seguinte comando:
ldapmodrdn -h localhost -p 389 -x -D cn=admin,dc=kyapanel,dc=com,dc=br -w senha -r -f alter_user5.ldif
Licença
Copyright 2007 Anahuac de Paula Gil e Francisco Kem Iti Saito
Permite-se distribuição, publicação e cópia literal da íntegra deste documento, sem pagamento de royalties, desde que sejam preservadas a nota de copyright, a URL oficial do documento e esta nota de permissão.
Permite-se também distribuição, publicação e cópia literal de seções individuais deste documento, sem pagamento de royalties, desde que sejam preservadas a nota de copyright e a nota de permissão acima, e que a URL oficial do documento seja preservada ou substituída pela URL oficial da seção individual.