OpenLDAP - Servidor de diretórios
Introdução
Servidor de diretórios, similar a um Banco de Dados, mas só que voltado a leitura utilizando base de dados mais
simples como bdb e entre outros, com uma estrutura que lembra um sistema de diretório.
A principal utilização é
centralizar informações onde podemos usar para autenticação, agenda e entre outros de forma que irá integrar e facilitará o gerenciamento de usuários e recursos.
Antes disso uma breve descrição
Atributo → Atributos são valores
que iremos armazenar, exemplo uid=rafael ( uid é atributo onde o
valor é rafael ).
ObjectClass → É um conjunto de
atributos onde terá uma organização definida, exemplo PosixAccount
( objeto que tem como atributos uid, mail e entre outros ).
Schema → São um conjunto de
ObjectClass onde que é uma estrutura inteira para utilização de
qual forma você irá configurar.
Estrutura
Máquina virtual Debian 7.5 com 256MB que poderá disponibilizar recursos para mais de 300 usuários.
Instalação
Openssl → Integração segura
utilizando criptografia.
Sasl → Autenticação simples.
Ldap-utils → Ferramentas para
gerenciamento e consulta da base ldap.
Slapd → Serviço LDAP.
# apt-get install openssl db5.1-util sasl2-bin slapd ldap-utils |
Iremos deparar com a definição da
senha para o usuário administrador da base:
Com essa senha utilizaremos para adicionar informações a nossa base de dados a partir do usuário admin administrador serviço.
Estrutura
A nossa base ldap será constituida no
padrão DN ( Distinguished Name ).
Essa estrutura DN comporta como um domínio, como assim? Terá um domínio
principal que será o nosso DN como newphonesevoip.com.br que dentro
dessa base principal conterá nossa estrutura de diretórios.
DN componente de domínio
Em nossa base de diretório terá o
domínio subdividido em DC ( Domain Componente ), ficando dessa forma:
dominio: newphonesevoip.com.br
E nosso DN ficaria dessa forma:
dn: dc=newphonesevoip,dc=com,dc=br
Então até aqui sabemos DN e DC e veremos que essa estrutura armazena informações de forma
estruturada em diretório ( atributos ) e dentro desse diretório contem
informações ( valores ).
Unidade Organizacional
Unidade de organização dentro da estrutura. Como por exemplo adicionamos usuários novos em nossa base, mas eles são de São Paulo então criamos uma unidade organizacional ( OU ) chamada SP, dentro dessa mesma OU conterá todos os usuários referente a esse estado.
Em nosso casso mais simples mostraremos a OU que conterá todos os usuários.
ou=usuario, dc=newphonesevoip, dc=com,
dc=br
UID ou CN ?
Dentro dessa estrutura alguns conjunto de informações precisão ter uma identificação unica, hoje se utiliza muito um atributo mail, mas em outras bases de dados muito administradores utiliza uid que é o login que o usuário utiliza.
uid=rafael, ou=usuarios,
dc=newphonesevoip, dc=com, dc=br
Atributos
As informações dentro do LDAP constitui de atributos que são variaveis que contem dados que está armazenado na base.
userPassword=[SENHA], uid=rafael,
ou=usuarios, dc=newphonesevoip, dc=com, dc=br
Senha é o conteúdo ( dados ) do atributo userPassword, resalto que toda nossa base é constituida de atributos e valores.
LDIF
Para adicionar informações
informações em nossa base precisamos estruturar essas informações em um arquivo texto comum, esse arquivo conterá um mapa de
informações para que seja adicionado, seguinte arquivo:
dn: cn=admin,dc=newphonesevoip,dc=com,dc=br
objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword:: 9aTVXNnpYOTBYd1llUmx5eldWUW9tZzM2cXFYWjZhMXQ= entryCSN: 20140611004506.164787Z#000000#000#000000 modifiersName: cn=admin,dc=nodomain modifyTimestamp: 20140611004506Z ... |
Esse arquivo é só um exemplo.
Configuração
O arquivo de configuração do ldap é de certe forma completo, contendo flags simples de configuração e estrutura de ACL flexivel.
ACL
Podemos utilizar ACL (
Access Control List ) para que nossa base sejá segura evitando que uma consulta simples haja informações como hash da senha de usuário e entre outros, isso é apenas um dos exemplos que já vem por padrão configurado.
INDEX
Essa flag irá definir os atributos a
serem indexados para que futuras consultas sejão realizadas de
maneira muito rápida para que nossa base sejá mais robusta em
consultas frequentes.
Arquivo de configuração
Podemos começar pelo arquivo de
configuração do serviço SLAPD, mostrando alguns dos parametros
básico para nossa administração.
root@serv-ldap:/etc/ldap# cat slapd.conf
# Versão do protocolo V2 - compativel com todos dispositivos allow bind_v2 # Schemas e definiçoes de classes de objetos include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema # Arquivo de controle do processo pidfile /var/run/slapd/slapd.pid argsfile /var/run/slapd/slapd.args # Modulos modulepath /usr/lib/ldap moduleload back_bdb # Tipo da base backend bdb # Base de dados database bdb # Estrutura de diretorio e administrador suffix "dc=newphonesevoip,dc=com,dc=br" rootdn "cn=admin,dc=newphonesevoip,dc=com,dc=br" rootpw {SSHA}l8BdZ+3NKUOB8YdKIU0hToBpCT8Z5ZC9 # Local de armazenamento da base directory /var/lib/ldap |
Nessa configuração básica iremos ver
que é bem simples. E com isso após restarta o serviço veremos no
log:
Jun 10 22:53:39 serv-ldap slapd[10093]: daemon: shutdown
requested and initiated.
Jun 10 22:53:39 serv-ldap slapd[10093]: slapd shutdown: waiting for 0 operations/tasks to finish Jun 10 22:53:39 serv-ldap slapd[10093]: slapd stopped. Jun 10 22:53:39 serv-ldap slapd[10157]: @(#) $OpenLDAP: slapd (Apr 23 2013 12:16:04) $#012#011root@lupin:/tmp/buildd/openldap-2.4.31/debian/build/servers/slapd Jun 10 22:53:39 serv-ldap slapd[10158]: slapd starting |
E o serviço esta ativo e rodando
normalmente:
root@serv-ldap:/etc/ldap# netstat
-nltp
Conexões Internet Ativas (sem os
servidores)
Proto Recv-Q Send-Q Endereço
Local Endereço Remoto Estado PID/Program
name
tcp 0 0 0.0.0.0:389
0.0.0.0:* OUÇA 10158/slapd
tcp6 0 0 :::389
:::* OUÇA 10158/slapd
|
Cadastrando informação
Nosso primeiro LDIF conterá a
informação base do nosso LDAP e com isso adicionaremos nosso DN e
dentro dele dois OU ( diretórios ) e dentro dele cadastrar nosso
grupo, usuários e outras informações.
Criaremos um diretório para organizar
nosso ldif
root@serv-ldap:/etc/ldap# mkdir -p /root/slapd/newphones |
E dentro dele criaremos nosso registro
começando com a base:
root@serv-ldap:/etc/ldap# cd /root/slapd/newphones root@serv-ldap:~/slapd/newphones# vi DN.ldif dn: dc=newphonesevoip,dc=com,dc=br dc: newphonesevoip o: NewPhoneseVoip objectClass: top objectClass: domain |
Logo no conteúdo temos o dominio
principal da forma como DN e os objectClass que são como um
dicionario que contem atributos para nosso registro.
Iremos criar as unidades organizacional
OU que conterá os nosso registro dentro da nossa base conforme o
conteúdo a seguir:
root@serv-ldap:~/slapd/newphones# vi OU.ldif
dn: ou=Grupos,dc=newphonesevoip,dc=com,dc=br ou: Grupos objectClass: top objectClass: organizationalUnit dn: ou=Usuarios,dc=newphonesevoip,dc=com,dc=br ou: Usuarios objectClass: top objectClass: organizationalUnit |
Duas unidade organizacional que irá
conter nossos registro, atentando-se ao objectClass novo que é o
organizationUnit que diz que os atributos necessários terão dentro
desse objeto, como “ou”.
Adicionaremos nosso registro dentro da
OU grupos conforme o exemplo abaixo:
root@serv-ldap:~/slapd/newphones# cat grupos.ldif
dn: cn=root,ou=Grupos,dc=newphonesvoip,dc=com,dc=br objectClass: posixGroup objectClass: top cn: root userPassword: {crypt}x gidNumber: 0 dn: cn=administrador,ou=Grupos,dc=newphonesevoip,dc=com,dc=br objectClass: posixGroup objectClass: top cn: administrador userPassword: {crypt}x gidNumber: 1600 dn: cn=usuarios,ou=Grupos,dc=newphonesevoip,dc=com,dc=br objectClass: posixGroup objectClass: top cn: administrador userPassword: {crypt}x gidNumber: 1601 |
Nessa saida conseguimos vizualizar
nossos registros dentro da OU que são respectivamente o grupo “root”
e “administrador”. Dentro desse grupo contem informações como a
senha do grupo e a identificação do grupo que iremos amarrar gid
nos nossos usuarios.
E por último adicionaremos os nosso
usuarios principais:
root@serv-ldap:~/slapd/newphones# cat usuario.ldif
# Usuario Root, ID = 0 dn: uid=root,ou=Usuarios,dc=newphonesevoip,dc=com,dc=br uid: root cn: root objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$LoP5FlPE$tjzaioZU87XSqw3CahRyrbPynvF1KGJbnD6Zx4e1UGnmRPim4HDHgm7xTX/Cy3blspeXNH2Y42L6XWnqJoBdz0 shadowLastChange: 16209 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 0 gidNumber: 0 homeDirectory: /root gecos: root # Usuario Root, ID = 1600 dn: uid=suporte,ou=Usuarios,dc=newphonesevoip,dc=com,dc=br uid: suporte cn: Suporte objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {SSHA}q3XD6lJSuOKFgkT43ypDkAtsRbtOXq3Y shadowLastChange: 16209 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1600 gidNumber: 1600 homeDirectory: /home/suporte gecos: suporte ... |
Esses registro serão adicionados
dentro da OU usuários.
Adicionando na base com comando
“ldapadd”:
root@serv-ldap:~/slapd/newphones# ls
DN.ldif grupos.ldif OU.ldif usuario.ldif root@serv-ldap:~/slapd/newphones# ldapadd \ -D ”cn=admin,dc=newphonesevoip,dc=com,dc=br" -W -f DN.ldif -x Enter LDAP Password: adding new entry "dc=newphonesevoip,dc=com,dc=br" |
Simples assim, nosso ldif funcionou corretamente e podemos ver que no final docomando ldapadd a entreda do registro.
Para verificarmos podemos ver com o
comando:
root@serv-ldap:~/slapd/newphones# ldapsearch -x
# extended LDIF # # LDAPv3 # base <dc=newphonesevoip,dc=com,dc=br> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # newphonesevoip.com.br dn: dc=newphonesevoip,dc=com,dc=br dc: newphonesevoip o: NewPhoneseVoip objectClass: top objectClass: domain # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 |
Estamos quase lá após isso
adicionamos o OU, grupos e usuarios, logo após consultaremos a base:
root@serv-ldap:~/slapd/newphones# ldapsearch -x -LLL dn
dn: dc=newphonesevoip,dc=com,dc=br dn: ou=Grupos,dc=newphonesevoip,dc=com,dc=br dn: ou=Usuarios,dc=newphonesevoip,dc=com,dc=br dn: uid=root,ou=Usuarios,dc=newphonesevoip,dc=com,dc=br dn: uid=suporte,ou=Usuarios,dc=newphonesevoip,dc=com,dc=br dn: cn=root,ou=Grupos,dc=newphonesevoip,dc=com,dc=br dn: cn=administrador,ou=Grupos,dc=newphonesevoip,dc=com,dc=br dn: cn=usuarios,ou=Grupos,dc=newphonesevoip,dc=com,dc=br ... |
Dessa forma não conseguimos ver de uma
maneira estruturada e compreensível. Mas consultaremos utilizando o
Apache Directory.
Integração
Iremos integrar a autenticação do
sistema no ldap, com isso precisamos instalar algumas dependência
que fará com que o sistema se autentique através de PAM ( Módulo
de autenticação plugavel ).
Para instalação digitamos:
root@serv-ldap:~# apt-get install libpam-ldap libnss-ldap |
Editamos o aruivo de configuração:
root@serv-ldap:~# vim /etc/libnss-ldap.conf # Base DN base dc=newphonesevoip,dc=com,dc=br # Servidor LDAP uri ldap://ldap.newphonesevoip.com.br # Admin rootbinddn cn=admin,dc=newphonesevoip,dc=com,dc=br |
Habilitando no sistema no nsswitch.conf:
root@serv-ldap:~# vi /etc/nsswitch.conf passwd: compat ldap group: compat ldap shadow: compat ldap |
Nessa regra ele dará preferencia a
autenticação dos usuários do sistema ( /etc/passwd ) e depois do
ldap que é no servidor de diretórios.
Pronto agora o sistema esta integrado
em nosso LDAP interno.
Conclusão
Servidor de diretório é um excelente
aliando para centralização de informações. Podemos manipular e
adiquirir diversos recursos como alguns citados aqui.
Comentários
Postar um comentário