Buscar

Aula 08 - Servico de Diretorio

Prévia do material em texto

Serviço de Diretório
Conceito de Diretório
● Serviço de armazenamento hierárquico de informações com o objetivo 
principal de facilitar a pesquisa e a recuperação de informações.
● Um diretório permite que usuários ou aplicações possam encontrar 
recursos/informações no ambiente de acordo com determinadas 
características.
● Um serviço de diretório é uma infraestrutura de informação compartilhada 
para localizar, gerenciar, administrar e organizar itens comuns e recursos de 
rede, o que pode incluir volumes, pastas, arquivos, impressoras, usuários, 
grupos, dispositivos, números de telefone e outros objetos. 
Exemplos
A lista telefônica possui os princípios de um diretório.
Um diretório indica um caminho a seguir para se encontrar algo que procura
No caso de uma lista telefônica utiliza-se o nome de uma pessoa ou empresa 
para achar seu numero de telefone ou endereço.
 
Problemas
Centralizar informações em uma rede de computadores pode se tornar um 
problema. Planilhas compartilhadas, livros, papeis, etc, etc...
Com o crescimento da rede fica complicado ou ate inviável de manter as 
informações sincronizadas e atualizadas.
Quando um funcionário novo entrar na empresa, será preciso cadastrar em todos 
os sistemas oferecidos pela empresa.
Quando o funcionário se desliga da empresa, é necessário bloquear o acesso do 
mesmo em todos esses sistemas. 
Principais características
● Centralização das informações
● Manutenção 
● Pesquisa de informações
● Replicação
Protocolos de Acesso
O protocolo de acesso a diretorios DAP (Directory Access Protocol ) fazia parte das 
especificação da ITU.
O DAP foi definido com base no modelo OSI.
O modelo OSI substituído pelo TCP/IP.
Surgiu então o LDAP que foi uma versão do DAP.
LDAP
Lightweight Directory Access Protocol
Versão mais flexível do DAP
Padronizado em 1993 no RFC 1487
Esta atualmente na versão 3, LDAPv3 
Organiza as informações de forma hierárquica
A árvore possui um elemento raiz
A partir do elemento raiz e que são feitas as buscas percorrendo os nos-filhos até 
encontrar o elemento desejado
Estrutura
A raiz e os ramos da árvore são diretórios
Cada diretório pode conter outros diretórios ou elementos que são chamados de 
entradas
Cada entrada possui um ou mais atributos que, por sua vez, podem ter um ou 
mais valores associados 
Estrutura
Uma característica herdada do X.500 foi o uso de mnemonicos para definir os 
nomes dos atributos 
Para diretórios:
● c , define o pais (country)
● o , define o nome da empresa (organization)
● ou , departamento (organization unit )
Estrutura
Para entradas: 
● cn , atributo de nome (common name)
● uid , identidade de usuário (user ID)
● gn , nome próprio da pessoa (given name)
● sn , sobrenome de uma pessoa (surname) 
Cada entrada é identificada por um atributo único denominado DN (Distinguished 
Name) 
O DN de uma entrada costuma ser a concatenação de seu atributo ’cn’ com os 
nomes de cada nível de diretório onde está inserida, até chegar a raiz.
Tipos de informações
É permitido armazenar qualquer informação no diretório: nomes, usuários, 
senhas, emails, imagens
Cada informações que é armazenada deve estar definida em um arquivo 
chamado schema
Um schema é como uma planta-baixa, com a definição da estrutura das entradas 
e dos atributos que serão reconhecidos
As entradas são definidas em classes de objetos
As classes de objetos por sua vez definem uma lista de atributos obrigatórios e 
opcionais 
 
Tipos de informações
Toda entrada inserida em um diretório deve implementar pelo menos uma classe 
de objetos
A partir da entrada tem o dever de definir os atributos obrigatórios da classe 
implementada
E os atributos opcionais como o próprio nome revela podem ser definidos ou não.
Cada objeto ou atributo possui um OID (Object ID) registrado na IANA 
Se for necessário criar um schema próprio, deve ser feito o registro no site da 
IANA ou somente para uso privado.
Tipos de informações
Devido a isto o LDAP já fornece alguns schemas prontos para serem utilizados 
Por exemplo os atributos (c, o, ou, cn, uid, gn, sn) são definidos pelos schemas 
padrão do LDAP 
Quando é necessário integrar o LDAP com outra aplicação, normalmente a 
própria aplicação fornece o schema com a definição dos atributos utilizados
Insert de informações
Após a configuração básica do LDAP com o carregamento dos schemas básicos, 
o LDAP inicia um serviço, com a base de informações vazia 
Para enviar informações para a base de dados e configurar a estrutura que se 
pretende ter, é necessário utilizar arquivos no formato ldif 
ldif - LDAP Interchange Format (Formato de intercambio LDAP)
O ldif é um arquivo texto, usado para importar e exportar informações do LDAP, e 
pode ser editado por um editor de texto simples
Este arquivo não pode ter acentos, cedilhas e espaços em branco no final de 
cada linha
Exemplo de arquivo ldif 
dn: uid=usuario1, ou=departamento, dc=senai, dc=br 
objectClass: top
objectClass: organizationalPerson
objectClass: qmailuser
objectClass: samba uid: usuario1 
Busca de Informações
As pesquisas são feitas por meio de critérios de busca, podendo indicar em qual 
parte da árvore será realizada a busca.
Também é possível pesquisar pela árvore toda, mas a performance é bastante 
ruim
A pesquisa pode ser realizada por qualquer usuário com acesso ao servidor 
(somente leitura)
Por exemplo uma base que é acessada para verificar um usuário e senha de rede
Por exemplo validar se o usuario faz parte de um grupo
Aplicações
Lista de endereços 
SAMBA
File Server
Proxy
Email
Sistemas próprios
 
Vamos brincar um pouco !!!
[root@faznada ~]# 
yum -y install openldap-servers openldap-clients
[root@faznada ~]# 
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG 
[root@faznada ~]# 
chown ldap. /var/lib/ldap/DB_CONFIG 
Vamos brincar um pouco !!!
[root@faznada ~]# 
systemctl start slapd 
[root@faznada ~]# 
systemctl enable slapd 
Criar uma senha criptografada
[root@faznada ~]# slappasswd 
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
Vamos brincar um pouco !!!
[root@faznada ~]# 
vi chrootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx (SENHA GERADA ANTES)
Vamos brincar um pouco !!!
[root@faznada ~]# 
ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
Vamos brincar um pouco !!!
[root@faznada ~]# 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
Vamos brincar um pouco !!!
root@faznada ~]# 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"
Vamos brincar um pouco !!!
[root@faznada ~]# 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"
Vamos brincar um pouco !!!
[root@faznada ~]# (guarde essa senha)
slappasswd 
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
Vamos brincarum pouco !!!
[root@faznada ~]# 
vi chdomain.ldif
# troque o nome do dominio "dc=***,dc=***" nas sessoes abaixo.
# use a senha gerada anteriormente
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
 read by dn.base="cn=Manager,dc=srv,dc=world" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=srv,dc=world
Não esqueça de trocar os 
campos O, dc
Vamos brincar um pouco !!!
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=srv,dc=world
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
 dn="cn=Manager,dc=srv,dc=world" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=srv,dc=world" write by * read
Não esqueça de trocar os 
campos O, dc
Vamos brincar um pouco !!!
[root@faznada ~]# 
ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
Vamos brincar um pouco !!!
[root@dlp ~]# 
vi basedomain.ldif
dn: dc=srv,dc=world
objectClass: top
objectClass: dcObject
objectclass: organization
o: Server World
dc: Srv
dn: cn=Manager,dc=srv,dc=world
objectClass: organizationalRole
cn: Manager
description: Directory Manager
dn: ou=People,dc=srv,dc=world
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=srv,dc=world
objectClass: organizationalUnit
ou: Group
Não esqueça de trocar os 
campos O, dc
Vamos brincar um pouco !!!
[root@faznada ~]# 
ldapadd -x -D cn=Manager,dc=srv,dc=world -W -f basedomain.ldif 
Enter LDAP Password: (primeira senha que geramos)
adding new entry "dc=srv,dc=world"
adding new entry "cn=Manager,dc=srv,dc=world"
adding new entry "ou=People,dc=srv,dc=world"
adding new entry "ou=Group,dc=srv,dc=world"
Não esqueça de trocar os 
campos O, dc
Instalando phpLDAPadmin
# install from EPEL
[root@faznada ~]# yum --enablerepo=epel -y install phpldapadmin
[root@faznada ~]# 
vi /etc/phpldapadmin/config.php
# line 397: uncomment, line 398: comment out
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');
Instalando phpLDAPadmin
[root@faznada ~]# 
vi /etc/httpd/conf.d/phpldapadmin.conf
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
<Directory /usr/share/phpldapadmin/htdocs>
 
<IfModule mod_authz_core.c>
 # Apache 2.4
 Require local
 Require ip 10.0.0.0/24
[root@faznada ~]# 
systemctl restart httpd 
Adicionando um usuario
vi ldapuser.ldif
dn: uid=charles,ou=People,dc=faznada,dc=xyz
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: charles
sn: josiah
userPassword: {SSHA}QPqs9MxVDDzVyEkzDg5GKDFnCk+Wsvv1
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/charles
Adicionando um usuário
dn: cn=charles,ou=Group,dc=faznada,dc=xyz
objectClass: posixGroup
cn: charles
gidNumber: 1000
memberUid: charles
[root@faznada ~]# ldapadd -x -D cn=Manager,dc=faznada,dc=xyz -W -f ldapuser.ldif
Enter LDAP Password: 
adding new entry "uid=charles,ou=People,dc=faznada,dc=xyz"
adding new entry "cn=charles,ou=Group,dc=faznada,dc=xyz"
Removendo usuário
[root@faznada ~]# ldapdelete -x -W -D 'cn=Manager,dc=faznada,dc=xyz' 
"cn=charles,ou=Group,dc=faznada,dc=xyz"
Enter LDAP Password: 
[root@faznada ~]# ldapdelete -x -W -D 'cn=Manager,dc=faznada,dc=xyz' 
"uid=charles,ou=People,dc=faznada,dc=xyz"
Enter LDAP Password: 
[root@localhost ~]# 
slapcat -v -l backup.ldiff
Fazendo backup
Restaurando...
Pare o serviço: systemctl stop slapd 
faznada:~# cd /var/lib/ldap
faznada: ˜# rm -rf *
faznada:~# slapadd -l backup.ldif
4. Comece o serviço: 
faznada:~# systemctl start slapd
Exercicio
Adicionar 3 usuarios: user1, user2 e user3
Adicionar 3 grupos: TI, Compras, Vendas
Adicionar:
user3 no grupo compras
user2 no grupo TI
user1 no grupo TI
user2 no grupo Compras e Vendas
Fazendo uns searches ….
Trazendo toda a arvore...
ldapsearch -D cn=Manager,dc=faznada,dc=xyz -w qwe123 -p 389 -h localhost -b 
"dc=faznada,dc=xyz" -s sub "(objectclass=*)"
Trazendo toda a arvore, so que filtrando um pouco…
 ldapsearch -D cn=Manager,dc=faznada,dc=xyz -w qwe123 -p 389 -h localhost -b 
"dc=faznada,dc=xyz" -s sub "(objectclass=*)" sn cn
Fazendo umas perguntas….
Procurar e mostrar informações de 1 usuario
ldapsearch -D cn=Manager,dc=faznada,dc=xyz -w qwe123 -p 389 -h localhost -b 
"dc=faznada,dc=xyz" -s sub "(cn=User1)" 
Filtrando a saida pelo que queremos….
ldapsearch -D cn=Manager,dc=faznada,dc=xyz -w qwe123 -p 389 -h localhost -b 
"dc=faznada,dc=xyz" -s sub "(cn=User1)" cn sn
Procurando...
Mostrar os membros do grupo compras….
ldapsearch -D cn=Manager,dc=faznada,dc=xyz -w qwe123 -p 389 -h localhost -b 
"dc=faznada,dc=xyz" -s sub -b "ou=compras,dc=faznada,dc=xyz" memberUid
Procurar 1 usuario no grupo compras….
ldapsearch -D cn=Manager,dc=faznada,dc=xyz -w qwe123 -p 389 -h localhost -b 
"dc=faznada,dc=xyz" -s sub -b "ou=compras,dc=faznada,dc=xyz" 
"(memberUid=user3)"
Mais umas procuras….
Todos os grupos que o user2 esta cadastrado,
ldapsearch -D cn=Manager,dc=faznada,dc=xyz -w qwe123 -p 389 -h localhost -b 
"dc=faznada,dc=xyz" -s sub "(memberUid=user2)"
Concatenando perguntas
ldapsearch -D cn=Manager,dc=faznada,dc=xyz -w qwe123 -p 389 -h localhost -b 
"dc=faznada,dc=xyz" -s sub "(&(cn=User1)(objectClass=posixAccount))"
ldapsearch -D cn=Manager,dc=faznada,dc=xyz -w qwe123 -p 389 -h localhost -b 
"dc=faznada,dc=xyz" -s sub "(&(cn=User1)(objectClass=posixAccount))" dn
Filtros e logicas
Operator
Symb
Exercícios
Fazemos em conjunto ….. Esses dois ultimos slides.
Árvore LDAP

Continue navegando