SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
LDAP: Usos e Aplicações



Daniel Novais Martins
CNPTIA/Embrapa



VI Seminário de Capacitação Interna


dnovais@correionet.com.br
LDAP: Usos e Aplicações


•   Relembrando
•   Vantagens/Limitações
•   Elementos de uma solução LDAP
•   Exemplos : Sendmail, Apache, aplicação em C
•   Conclusão
Relembrando

Lightweight Directory Access Protocol => baseado no padrão
X.500


• X.500 simplificado e flexível
• Implementado sobre TCP/IP (totalmente integrado à Internet)
• Padrão que pode ser encontrado na RFC 1777/RFC 2251
• Repositório, Protocolo e API
Relembrando

LDAP não é um substituto para banco de dados relacional,
“file system” ou DNS.
Aplicações LDAP podem ser agrupadas em 3 categorias :
   • apps para localizar usuários e recursos na rede
   • apps que gerenciam estes usuários e recursos
   • apps de autenticação e segurança
Vantagens

• Multi-plataforma - aplicações LDAP-aware
• Padrão Aberto
• Opções de fornecedores de solução (comercial, open
source)
• Facilidade de instalação e manutenção
• Replicação é uma tecnologia “built-in”
• Delegação de autoridade e permissão via ACL (Access
Control List) no próprio servidor
Exemplos de utilização

Informações que precisam ser lidas de diferentes locais e são
pouco alteradas :
   • Phone Book
   • Informações de contato dos clientes
   • Informações de infra-estrutura, tais como, mapas NIS,
   email aliases, etc
   • Configurações de pacotes de software
   • Public Certificates e Security keys
Quando utilizar LDAP - checklist
• A informação precisa estar disponível em muitas
plataformas ?
• Os dados serão acessados através de vários computadores
e/ou aplicações?
• Os registros armazenados sofrem poucas mudanças
(poucas vezes no dia)?
• A estrutura dos dados pode ser representada em banco de
dados do tipo “flat”, ou seja, toda a informação de um item
pode ser colocado em um único registro?
• Obs: qualquer informação do tipo fichário é forte
candidata.
Limitações

• Não substitui Banco de Dados Relacionais (heavy
updates, processamento transacional, geração de relatórios,
SQL, two phase commit)
• Não é um file system, dificultando o armazenamento de
BLOB (binary large objects)
• Não serve como base para uma solução DNS, não
funciona “connectionless” como o DNS.
Estrutura de um diretório LDAP
As informações são armazenadas de forma hierárquica
(como o DNS e estruturas de diretórios de arquivos).
Por quê?
   • Você pode querer obter apenas as informações de um
   ramo da hierarquia
   • Você pode implantar segurança em ramos diferentes da
   árvore
   • Combinado com replicação, você pode projetar sua
   árvore para minimizar a utilização de banda da rede
Estrutura de um diretório LDAP

Como DNS hosts (sol.cnptia.embrapa.br), no LDAP existe o
Distinguished Name (DN) =>
dn:cn=daniel, ou=cnptia, o=embrapa, c=BR


O “top level” do diretório é chamado base DN :
   • o=embrapa, c=BR
   • o=embrapa.br
   • dc=embrapa, dc=BR
Exemplo de uma entry :
    dn: uid=dmartins, ou=cnptia, o=embrapa, c=BR
objectclass: person                 roomnumber: 122G
objectclass: organizationalPerson   ou: cnptiaI
                                    mailRoutingAddress:
objectclass: inetOrgPerson
                                       dmartins@cnptia.embrapa.br
objectclass: foobarPerson           mailhost: sol.cnptia.embrapa.br
uid: fsmith                         userpassword: {crypt}3x1231v76T89N
givenname: Daniel                   uidnumber: 1234
sn: Martins                         gidnumber: 1200
                                    homedirectory: /home/dmartins
cn: Daniel Martins
                                    loginshell: /usr/local/bin/bash
telephonenumber: 19-43672929
Exemplo de uma objectClass
objectclass inetOrgPerson         postOfficeBox,
 requires                         postalAddress,
    objectClass,                  postalCode,
    uid,                          preferredDeliveryMethod,
    cn                            registeredAddress,
 allows                           seeAlso,
    sn,                           st,
    description,                  streetAddress,
    destinationIndicator,         telephoneNumber,
    facsimileTelephoneNumber,     teletexTerminalIdentifier,
    internationaliSDNNumber,      telexNumber,
    l,                            title,
    ou,                           userPassword,
    physicalDeliveryOfficeName,   x121Address
Outro exemplo de objectClass


objectclass strongAuthenticationUser
  requires
    objectClass,
    userCertificate
Projetando uma árvore de Diretórios

• Pensar como uma estrutura de diretórios de arquivos
• A hierarquia permite agrupar dados, que podem vir a ser
  úteis para :
   –   Delegação de autoridade para outros servidores ou sites
   –   Replicação de dados
   –   Segurança e controle de acesso
   –   Escalabilidade
Exemplo de uma árvore LDAP
  Estrtura Interna                                          c=BR

       Sefaz

                                                           o=sp.gov




                                                           o=fazenda
                                                                                                ou=usuarios




            ou=pessoal                         ou=grupos                  ou=regionais             ou=servicos




cn=nakano
                                cn=Delegado                cn=fiscal        cn=DRT5
cn=harumi        ou=terceiros                                                               ou=sede       ou=dr02
                                 cn=Inspetor              cn=sefadm            ...
   ....                                                                                                   ou=dr03
                                cn=Chefe PF            cn=Administrativ                                   ou=dr04
                                                       o                                                  ou=dr05
                                                                                                            ...
                                                                                                          ou=dr16
                cn=consultor1            cn=Adm                                          cn=impressora
                    ....                 Sistemas                                           cn=www
                                                                                               ...
Diretrizes para uma topologia de
                  diretórios
• Evitar modelos que necessitem ser constantemente alterados
(exemplo: evitar seguir um organograma)
• Evitar mover registros LDAP entre “OU”.
• Você tem tipos de dados que são similares em alguns
aspectos, mas diferem no modo como são utilizados? Coloque
em “OU” diferentes, por exemplo : ou=pessoal e ou=terceiros
• Se for replicar dados, considere quebrar “OU” em sub ”OU”,
por exemplo : ou=clientes; quebrar em ou=sudeste,ou=clientes
e ou=nordeste, ou=clientes
Controle de acesso ao diretório LDAP

Podemos colocar ACLs para controlar quem acessa o
servidor LDAP :
   •access to * by * read (acesso de leitura para todos)
   •access to * by self write by anonymous auth by *
   read (usuários podem modificar seus atributos,
   permite autenticação, permite usuários autenticados
   lerem)
Controle de acesso II

• access to attr=userPassword by self write by
anonymous auth by dn=“uid=admin, ou=cnptia,
o=embrapa, c=BR” write by * none
• access to * by self write by dn=“uid=admin,
ou=cnptia, o=embrapa, c=BR” write by * read
Exemplo : Sendmail
A partir da versão 8.10, é possível implementar
roteamento de mensagens via LDAP.
guest@cnptia.embrapa.br poderia ser apenas
guest@embrapa.br
O Sendmail busca na base LDAP se o endereço está
OK (conta ou alias existente), atributos uid e
mailLocalAddress.
Depois o Sendmail pode fazer um forward do email
para o servidor regional correspondente via atributos
mailRoutingAddress ou mailHost.
Exemplo: Apache

Autenticação de usuários, acesso às páginas e recursos
disponíveis. Existe um módulo disponível:
http://www.rudedog.org/auth_ldap/
É preciso compilar o módulo e disponibilizá-lo no Apache,
no arquivo httpd.conf :
# For Unix
LoadModule auth_ldap_module modules/auth_ldap.so
Exemplo: Apache

<Directory /usr/local/projeto/html>
AllowOverride All
order allow,deny
allow from all
Options ExecCGI
AuthName ”Projtoquot;
AuthType Basic
AuthLDAPURL ldap://sol.cnptia.embrapa.br/o=embrapa,
    c=BR?uid?sub?(objectClass=*)
require valid-user # require user guest ou require group
    cn=administradores, ou=cnptia, o=embrapa, c=BR
</Directory>
Exemplo: C++ programming
int LDAPTAMAuth::init(){
strcpy(HOSTNAME,”sol.cnptia.embrapa.brquot;);
strcpy(USERNAME,quot;quot;);
strcpy(PASSWORD,quot;quot;);
strcpy(ROOTNODE,quot;o=embrapa, c=BR”);
if (connect() == 1) return 1;
return 0;
}
int LDAPTAMAuth::connect(){
_ld = (LDAP*) ldap_open(HOSTNAME,LDAP_PORT);
if (_ld == NULL)          return 0;
if(ldap_simple_bind_s(_ld,USERNAME,PASSWORD) !=
LDAP_SUCCESS) return 0;
return 1;}
Exemplo: C++ programming
int LDAPTAMAuth::setattribute(const char *entryDN, const char
*attribute, const char *value){
LDAPMod mod;
LDAPMod *mods[3];
int rc, retorno=1;
char *vals[2];
mod.mod_op = LDAP_MOD_REPLACE;
mod.mod_type = strdup((char *) attribute);
vals[0] = strdup((char *) value); vals[1] = NULL;
mod.mod_values=vals;
mods[0] = &mod;     mods[1] = NULL;
rc = ldap_modify_s(_ld, (char *) entryDN, mods);
if (rc != LDAP_SUCCESS) {
  fprintf(stderr, quot;ldap_modify_s: %snquot;, ldap_err2string(rc));
retorno=0;}
return retorno;}
Conclusão


•Não é uma panacéia
•Modelagem/topologia
•Padrão aberto, ubiquidade de soluções (
servers, clientes, linguagens)
•Complexidade dos ambientes atuais
•Single Sign-On
Bibliografia

• RFC2251 - Lightweight Directory Access Protocol (v3)
• RFC2252 - LDAPv3 Attribute Syntax Definitions
• RFC2253 - UTF-8 Representation of Distinguished Names
• RFC2254 - The String Representation of LDAP Search Filters
• RFC2255 - The LDAP URL Format
• RFC2256 - A Summary of the X.500(96) User Schema for use with
  LDAPv3
• http://www.linc-dev.com/ldapres.html (contém RFCs, fornecedores
  de aplicações, etc.)
• http://www.netscape.com/comprod/server_central/product/directory/i
  ndex.html

Weitere ähnliche Inhalte

Was ist angesagt?

Turbinando Drupal com Redis
Turbinando Drupal com RedisTurbinando Drupal com Redis
Turbinando Drupal com RedisDaniel Santos
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONMarcio Junior Vieira
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDBHugo Souza
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com JavaJugVale
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no androidAlexandre Antunes
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Gabriel Machado
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Mario Guedes
 
FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015Guinther Pauli
 
Personal home pages
Personal home pagesPersonal home pages
Personal home pageswlsilva
 
Mini Curso Web Services com PHP
Mini Curso Web Services com PHPMini Curso Web Services com PHP
Mini Curso Web Services com PHPelliando dias
 

Was ist angesagt? (19)

Servidor DNS
Servidor DNSServidor DNS
Servidor DNS
 
Aula 4 infraestrutura - 14012012
Aula 4   infraestrutura - 14012012Aula 4   infraestrutura - 14012012
Aula 4 infraestrutura - 14012012
 
Servidor dns
Servidor dnsServidor dns
Servidor dns
 
Turbinando Drupal com Redis
Turbinando Drupal com RedisTurbinando Drupal com Redis
Turbinando Drupal com Redis
 
Dns
DnsDns
Dns
 
RESTful com json
RESTful com jsonRESTful com json
RESTful com json
 
Apresentação3
Apresentação3Apresentação3
Apresentação3
 
CouchDB Presentation
CouchDB PresentationCouchDB Presentation
CouchDB Presentation
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 
Artigo couchdb
Artigo couchdbArtigo couchdb
Artigo couchdb
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDB
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no android
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática
 
FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015FireDAC - Embarcadero Conference 2015
FireDAC - Embarcadero Conference 2015
 
Personal home pages
Personal home pagesPersonal home pages
Personal home pages
 
Mini Curso Web Services com PHP
Mini Curso Web Services com PHPMini Curso Web Services com PHP
Mini Curso Web Services com PHP
 

Andere mochten auch

Revisional de Literatura para o ENEM
Revisional de Literatura para o ENEMRevisional de Literatura para o ENEM
Revisional de Literatura para o ENEMma.no.el.ne.ves
 
O que é literatura marginal
O que é literatura marginalO que é literatura marginal
O que é literatura marginalIlca Guimarães
 
Controlador de Domínio Open Source
Controlador de Domínio Open SourceControlador de Domínio Open Source
Controlador de Domínio Open SourceRicardo Pinheiro
 
LITERATURA: ESCOLAS LITERÁRIAS
LITERATURA: ESCOLAS LITERÁRIASLITERATURA: ESCOLAS LITERÁRIAS
LITERATURA: ESCOLAS LITERÁRIASAmelia Barros
 
Servidor de autenticação centralizada com OpenLDAP
Servidor de autenticação centralizada com OpenLDAPServidor de autenticação centralizada com OpenLDAP
Servidor de autenticação centralizada com OpenLDAPThiago Finardi
 

Andere mochten auch (8)

Revisional de Literatura para o ENEM
Revisional de Literatura para o ENEMRevisional de Literatura para o ENEM
Revisional de Literatura para o ENEM
 
O que é literatura marginal
O que é literatura marginalO que é literatura marginal
O que é literatura marginal
 
Controlador de Domínio Open Source
Controlador de Domínio Open SourceControlador de Domínio Open Source
Controlador de Domínio Open Source
 
Teoria da literatura
Teoria da literaturaTeoria da literatura
Teoria da literatura
 
LITERATURA: ESCOLAS LITERÁRIAS
LITERATURA: ESCOLAS LITERÁRIASLITERATURA: ESCOLAS LITERÁRIAS
LITERATURA: ESCOLAS LITERÁRIAS
 
Modernismo
ModernismoModernismo
Modernismo
 
Servidor de autenticação centralizada com OpenLDAP
Servidor de autenticação centralizada com OpenLDAPServidor de autenticação centralizada com OpenLDAP
Servidor de autenticação centralizada com OpenLDAP
 
O negro na literatura brasileira
O negro na literatura brasileiraO negro na literatura brasileira
O negro na literatura brasileira
 

Ähnlich wie LDAP: Usos e Aplicações

Alta disponibilidade com bancos de dados relacionais no Azure
Alta disponibilidade com bancos de dados relacionais no AzureAlta disponibilidade com bancos de dados relacionais no Azure
Alta disponibilidade com bancos de dados relacionais no AzureRubens Guimarães - MTAC MVP
 
Utilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioUtilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioCarlos Melo
 
Fluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaFluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaCésar Araújo
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareFelipe
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanosCaike Souza
 
Utilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioUtilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioCarlos Melo
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHPAugusto das Neves
 
Desenvolvimento em .Net - Boas Praticas De Desenvolvimento
Desenvolvimento em .Net - Boas Praticas De DesenvolvimentoDesenvolvimento em .Net - Boas Praticas De Desenvolvimento
Desenvolvimento em .Net - Boas Praticas De DesenvolvimentoVitor Silva
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBCZabbix BR
 

Ähnlich wie LDAP: Usos e Aplicações (20)

Workshop_OpenLDAP
Workshop_OpenLDAPWorkshop_OpenLDAP
Workshop_OpenLDAP
 
Alta disponibilidade com bancos de dados relacionais no Azure
Alta disponibilidade com bancos de dados relacionais no AzureAlta disponibilidade com bancos de dados relacionais no Azure
Alta disponibilidade com bancos de dados relacionais no Azure
 
Utilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioUtilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primário
 
Fluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaFluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibana
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
Aula DFD - Revisão
Aula DFD - RevisãoAula DFD - Revisão
Aula DFD - Revisão
 
Bd02 banco de dados
Bd02 banco de dadosBd02 banco de dados
Bd02 banco de dados
 
Aula 9 active diretory - 06092012
Aula 9   active diretory - 06092012Aula 9   active diretory - 06092012
Aula 9 active diretory - 06092012
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanos
 
Utilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioUtilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primário
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP
 
Python e bancos NoSQL
Python e bancos NoSQLPython e bancos NoSQL
Python e bancos NoSQL
 
PHP(I-Bim).ppt
PHP(I-Bim).pptPHP(I-Bim).ppt
PHP(I-Bim).ppt
 
Desenvolvimento em .Net - Boas Praticas De Desenvolvimento
Desenvolvimento em .Net - Boas Praticas De DesenvolvimentoDesenvolvimento em .Net - Boas Praticas De Desenvolvimento
Desenvolvimento em .Net - Boas Praticas De Desenvolvimento
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Doctrine for Dummies
Doctrine for DummiesDoctrine for Dummies
Doctrine for Dummies
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
 

Mehr von elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

Mehr von elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 

LDAP: Usos e Aplicações

  • 1. LDAP: Usos e Aplicações Daniel Novais Martins CNPTIA/Embrapa VI Seminário de Capacitação Interna dnovais@correionet.com.br
  • 2. LDAP: Usos e Aplicações • Relembrando • Vantagens/Limitações • Elementos de uma solução LDAP • Exemplos : Sendmail, Apache, aplicação em C • Conclusão
  • 3. Relembrando Lightweight Directory Access Protocol => baseado no padrão X.500 • X.500 simplificado e flexível • Implementado sobre TCP/IP (totalmente integrado à Internet) • Padrão que pode ser encontrado na RFC 1777/RFC 2251 • Repositório, Protocolo e API
  • 4. Relembrando LDAP não é um substituto para banco de dados relacional, “file system” ou DNS. Aplicações LDAP podem ser agrupadas em 3 categorias : • apps para localizar usuários e recursos na rede • apps que gerenciam estes usuários e recursos • apps de autenticação e segurança
  • 5. Vantagens • Multi-plataforma - aplicações LDAP-aware • Padrão Aberto • Opções de fornecedores de solução (comercial, open source) • Facilidade de instalação e manutenção • Replicação é uma tecnologia “built-in” • Delegação de autoridade e permissão via ACL (Access Control List) no próprio servidor
  • 6. Exemplos de utilização Informações que precisam ser lidas de diferentes locais e são pouco alteradas : • Phone Book • Informações de contato dos clientes • Informações de infra-estrutura, tais como, mapas NIS, email aliases, etc • Configurações de pacotes de software • Public Certificates e Security keys
  • 7. Quando utilizar LDAP - checklist • A informação precisa estar disponível em muitas plataformas ? • Os dados serão acessados através de vários computadores e/ou aplicações? • Os registros armazenados sofrem poucas mudanças (poucas vezes no dia)? • A estrutura dos dados pode ser representada em banco de dados do tipo “flat”, ou seja, toda a informação de um item pode ser colocado em um único registro? • Obs: qualquer informação do tipo fichário é forte candidata.
  • 8. Limitações • Não substitui Banco de Dados Relacionais (heavy updates, processamento transacional, geração de relatórios, SQL, two phase commit) • Não é um file system, dificultando o armazenamento de BLOB (binary large objects) • Não serve como base para uma solução DNS, não funciona “connectionless” como o DNS.
  • 9. Estrutura de um diretório LDAP As informações são armazenadas de forma hierárquica (como o DNS e estruturas de diretórios de arquivos). Por quê? • Você pode querer obter apenas as informações de um ramo da hierarquia • Você pode implantar segurança em ramos diferentes da árvore • Combinado com replicação, você pode projetar sua árvore para minimizar a utilização de banda da rede
  • 10. Estrutura de um diretório LDAP Como DNS hosts (sol.cnptia.embrapa.br), no LDAP existe o Distinguished Name (DN) => dn:cn=daniel, ou=cnptia, o=embrapa, c=BR O “top level” do diretório é chamado base DN : • o=embrapa, c=BR • o=embrapa.br • dc=embrapa, dc=BR
  • 11. Exemplo de uma entry : dn: uid=dmartins, ou=cnptia, o=embrapa, c=BR objectclass: person roomnumber: 122G objectclass: organizationalPerson ou: cnptiaI mailRoutingAddress: objectclass: inetOrgPerson dmartins@cnptia.embrapa.br objectclass: foobarPerson mailhost: sol.cnptia.embrapa.br uid: fsmith userpassword: {crypt}3x1231v76T89N givenname: Daniel uidnumber: 1234 sn: Martins gidnumber: 1200 homedirectory: /home/dmartins cn: Daniel Martins loginshell: /usr/local/bin/bash telephonenumber: 19-43672929
  • 12. Exemplo de uma objectClass objectclass inetOrgPerson postOfficeBox, requires postalAddress, objectClass, postalCode, uid, preferredDeliveryMethod, cn registeredAddress, allows seeAlso, sn, st, description, streetAddress, destinationIndicator, telephoneNumber, facsimileTelephoneNumber, teletexTerminalIdentifier, internationaliSDNNumber, telexNumber, l, title, ou, userPassword, physicalDeliveryOfficeName, x121Address
  • 13. Outro exemplo de objectClass objectclass strongAuthenticationUser requires objectClass, userCertificate
  • 14. Projetando uma árvore de Diretórios • Pensar como uma estrutura de diretórios de arquivos • A hierarquia permite agrupar dados, que podem vir a ser úteis para : – Delegação de autoridade para outros servidores ou sites – Replicação de dados – Segurança e controle de acesso – Escalabilidade
  • 15. Exemplo de uma árvore LDAP Estrtura Interna c=BR Sefaz o=sp.gov o=fazenda ou=usuarios ou=pessoal ou=grupos ou=regionais ou=servicos cn=nakano cn=Delegado cn=fiscal cn=DRT5 cn=harumi ou=terceiros ou=sede ou=dr02 cn=Inspetor cn=sefadm ... .... ou=dr03 cn=Chefe PF cn=Administrativ ou=dr04 o ou=dr05 ... ou=dr16 cn=consultor1 cn=Adm cn=impressora .... Sistemas cn=www ...
  • 16. Diretrizes para uma topologia de diretórios • Evitar modelos que necessitem ser constantemente alterados (exemplo: evitar seguir um organograma) • Evitar mover registros LDAP entre “OU”. • Você tem tipos de dados que são similares em alguns aspectos, mas diferem no modo como são utilizados? Coloque em “OU” diferentes, por exemplo : ou=pessoal e ou=terceiros • Se for replicar dados, considere quebrar “OU” em sub ”OU”, por exemplo : ou=clientes; quebrar em ou=sudeste,ou=clientes e ou=nordeste, ou=clientes
  • 17. Controle de acesso ao diretório LDAP Podemos colocar ACLs para controlar quem acessa o servidor LDAP : •access to * by * read (acesso de leitura para todos) •access to * by self write by anonymous auth by * read (usuários podem modificar seus atributos, permite autenticação, permite usuários autenticados lerem)
  • 18. Controle de acesso II • access to attr=userPassword by self write by anonymous auth by dn=“uid=admin, ou=cnptia, o=embrapa, c=BR” write by * none • access to * by self write by dn=“uid=admin, ou=cnptia, o=embrapa, c=BR” write by * read
  • 19. Exemplo : Sendmail A partir da versão 8.10, é possível implementar roteamento de mensagens via LDAP. guest@cnptia.embrapa.br poderia ser apenas guest@embrapa.br O Sendmail busca na base LDAP se o endereço está OK (conta ou alias existente), atributos uid e mailLocalAddress. Depois o Sendmail pode fazer um forward do email para o servidor regional correspondente via atributos mailRoutingAddress ou mailHost.
  • 20. Exemplo: Apache Autenticação de usuários, acesso às páginas e recursos disponíveis. Existe um módulo disponível: http://www.rudedog.org/auth_ldap/ É preciso compilar o módulo e disponibilizá-lo no Apache, no arquivo httpd.conf : # For Unix LoadModule auth_ldap_module modules/auth_ldap.so
  • 21. Exemplo: Apache <Directory /usr/local/projeto/html> AllowOverride All order allow,deny allow from all Options ExecCGI AuthName ”Projtoquot; AuthType Basic AuthLDAPURL ldap://sol.cnptia.embrapa.br/o=embrapa, c=BR?uid?sub?(objectClass=*) require valid-user # require user guest ou require group cn=administradores, ou=cnptia, o=embrapa, c=BR </Directory>
  • 22. Exemplo: C++ programming int LDAPTAMAuth::init(){ strcpy(HOSTNAME,”sol.cnptia.embrapa.brquot;); strcpy(USERNAME,quot;quot;); strcpy(PASSWORD,quot;quot;); strcpy(ROOTNODE,quot;o=embrapa, c=BR”); if (connect() == 1) return 1; return 0; } int LDAPTAMAuth::connect(){ _ld = (LDAP*) ldap_open(HOSTNAME,LDAP_PORT); if (_ld == NULL) return 0; if(ldap_simple_bind_s(_ld,USERNAME,PASSWORD) != LDAP_SUCCESS) return 0; return 1;}
  • 23. Exemplo: C++ programming int LDAPTAMAuth::setattribute(const char *entryDN, const char *attribute, const char *value){ LDAPMod mod; LDAPMod *mods[3]; int rc, retorno=1; char *vals[2]; mod.mod_op = LDAP_MOD_REPLACE; mod.mod_type = strdup((char *) attribute); vals[0] = strdup((char *) value); vals[1] = NULL; mod.mod_values=vals; mods[0] = &mod; mods[1] = NULL; rc = ldap_modify_s(_ld, (char *) entryDN, mods); if (rc != LDAP_SUCCESS) { fprintf(stderr, quot;ldap_modify_s: %snquot;, ldap_err2string(rc)); retorno=0;} return retorno;}
  • 24. Conclusão •Não é uma panacéia •Modelagem/topologia •Padrão aberto, ubiquidade de soluções ( servers, clientes, linguagens) •Complexidade dos ambientes atuais •Single Sign-On
  • 25. Bibliografia • RFC2251 - Lightweight Directory Access Protocol (v3) • RFC2252 - LDAPv3 Attribute Syntax Definitions • RFC2253 - UTF-8 Representation of Distinguished Names • RFC2254 - The String Representation of LDAP Search Filters • RFC2255 - The LDAP URL Format • RFC2256 - A Summary of the X.500(96) User Schema for use with LDAPv3 • http://www.linc-dev.com/ldapres.html (contém RFCs, fornecedores de aplicações, etc.) • http://www.netscape.com/comprod/server_central/product/directory/i ndex.html