Baixe o app para aproveitar ainda mais
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
Compartilhar