Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
TPICOS ABORDADOS
ANATOMIA DE SCHEMAS
OPENLDAP TUNNING
Anatomia de Schemas
Anatomia de schemas
Schemas so arquivos texto compostos de vrios atributos e objectclasses
As objectclasses nos schemas dizem quais os atributos DEVEM e quais os atributos PODEM ter uma entrada
Cada atributo e cada objectclass tem um nmero identificador conhecido como Object Identifier - OID
Anatomia de schemas - 2
OIDs so fornecidos pela IANA - http://www.iana.org/cgibin/enterprise.pl
Schemas definem quais os tipos de comparaes sero feitas com atributos(Case Sensitive e Case Insensitive)
Anatomia de schemas
MATCHING RULES
Anatomia de schemas
MATCHING RULES
So as regras que determinam as comparaes dos valores de atributos
- Case Sensitive: Sensvel a letras maisculas e minsculas(LINUX diferente de linux) Exemplo: CaseExactMatch - Case Insensitive: No sensvel a letras maisculas e minsculas(LINUX igual a linux) Exemplo: CaseIgnoreMatch
Anatomia de schemas
MATCHING RULES - continuao
Comparaes podem ser feitas de acordo com o valor do atributo:
Anatomia de schemas
SINTAXES
Anatomia de schemas
SINTAXES
Determinam como os valores dos atributos sero representados; OID 1.3.6.1.4.1.1466.115.121.1.5 1.3.6.1.4.1.1466.115.121.1.7 1.3.6.1.4.1.1466.115.121.1.27 DESC. BER/DER data Booleano Inteiro
DADO
Anatomia de schemas
ATRIBUTO
Anatomia de schemas
ATRIBUTO
Atributos so componentes responsveis por armazenar valores numa base;
attributetype ( 2.5.4.5 NAME 'serialNumber' DESC 'RFC2256: serial number of the entity' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{64} )
Anatomia de schemas
ATRIBUTO Desmembrando parte 1
OID Alias do atributo Descrio textual attributetype ( 2.5.4.5 NAME 'serialNumber' DESC 'RFC2256: serial number of the entity' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{64} ) Tipo Matching Rule Sintaxe do OID Tamanho / Valor nico / Multi-valores
Anatomia de schemas
ATRIBUTO Desmembrando parte 2
O parmetro DESC oferece informaes descritivas sobre o atributo, alm de referenciar uma RFC, que no caso a 2258. Consultando a RFC, no item 5.6 temos o prprio atributo:
5.6. serialNumber This attribute contains the serial number of a device. ( 2.5.4.5 NAME 'serialNumber' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{64} )
Anatomia de schemas
ATRIBUTO Desmembrando parte 3
insistindo....
Temos a indicao da utilizao de um mtodo de comparao atravs da diretiva EQUALITY. caseIgnoreMatch indica que maisculas e minsculas tero valor igual.
Outro mtodo de comparao na busca: SUBSTRing. Tambm ignora maisculas e minsculas, igualando-as;
A diretiva SYNTAX referece ao tipo de dado armazenado. Ento, pesquisando a RFC 4517 que descreve isso temos:
1.3.6.1.4.1.1466.115.121.1.44 = PrintableString (O que isso??) A definio no LDAP de PrintableString: ( 1.3.6.1.4.1.1466.115.121.1.44 DESC 'Printable String' )
Anatomia de schemas
ATRIBUTO Desmembrando parte 4
Continuando a investigar mais sobre o tipo de syntax conhecido como PrintableString na RFC 4517(livre-traduo):
O valor da syntax Printable String uma string de um ou mais caracteres do alfabeto latino, nmeros, pontuao especificados pela regra PrintableCharacter. PrintableCharacter = ALPHA / DIGIT / SQUOTE / LPAREN / RPAREN / PLUS / COMMA / HYPHEN / DOT / EQUALS / E se voc ainda est curioso sobre as regras acima... leia a RFC 4512.
Anatomia de schemas
ATRIBUTO Desmembrando parte 5
E chegando ao final!
O ltimo campo da diretiva SYNTAX define qual o tamanho do campo e configuraes diversas sobre o valor;
attributetype ( <OID do atributo> [ "NAME" <nome do atrituto> ] [ "DESC" <descrio do atributo> ] [ "OBSOLETE" ] [ "SUP" <OID do atributo ancestral> ] [ "EQUALITY" <regra de comparao> [ "ORDERING" <regra de comparao> [ "SUBSTR" <regra de comparao> ] [ "SYNTAX" <OID da SYNTAX> ] [ "SINGLE-VALUE" ] [ "COLLECTIVE" ] [ "NO-USER-MODIFICATION" whsp ] [ "USAGE" whsp AttributeUsage ] ")"
Anatomia de schemas
OBJECTCLASSES
Anatomia de schemas
OBJECTCLASSES
objectclass ( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' DESC 'RFC2798: Internet Organizational Person' SUP organizationalPerson STRUCTURAL MAY (audio $ businessCategory $ carLicense $ departmentNumber $ displayName $ employeeNumber $ employeeType $ givenName $ homePhone $ homePostalAddress $ initials $ jpegPhoto $ labeledURI $ mail $ manager $ mobile $ o $ pager $ photo $ roomNumber $ secretary $ uid $ userCertificate $ x500uniqueIdentifier $ preferredLanguage $ userSMIMECertificate $ userPKCS12 )
Anatomia de schemas
OBJECTCLASS - InetOrgPerson
Possuem um nmero identificador: OID; Possuem nome; Possuem descrio informativa e referncia a RFCs;
Existe a herana entre objectclasses, onde uma pode herdar os atributos obrigatrios de outra;
So separadas em 3 tipos: STRUCTRAL, AUXILIARY e ABSTRACT; Possuem um conjunto de atributos que uma entrada DEVE ter; Possuem um conjunto de atributos que uma entrada PODE ter;
Anatomia de schemas
OBJECTCLASSES Descrio RFC 2798
Seo 1: Cenrio e uso A object class inetOrgPerson uma object class de uso geral e que possui atributos sobre pessoas. Os atributos armazenam o que exigido para acomodar informaes tpicas na implementao de servios de internet e intranets;
Anatomia de schemas
OBJECTCLASSES Heranas
A diretiva SUP indica que a referida object class herda atributos de outra object class;
No exemplo, indicada a object class organizationalPerson seguindo(core.schema): objectclass ( 2.5.6.7 NAME 'organizationalPerson' DESC 'RFC2256: an organizational person' SUP person STRUCTURAL Seguindo.... objectclass ( 2.5.6.6 NAME 'person' DESC 'RFC2256: a person' SUP top STRUCTURAL MUST ( sn $ cn )
Anatomia de schemas
OBJECTCLASSES Tipos
STRUCTURAL: So objectclasses bsicas para cada objeto; Exemplo: person
ABSTRACT: So utilizadas para definir o modelo bsico de dados do LDAP Exemplo: top
Anatomia de schemas
OBJECTCLASSES Relaes de Atributos
MUST: Atributos que so obrigatrios quando uma object class referenciada numa entrada na base, ou quando existem heranas em outras objectclass;
MUST ( sn $ cn ) MAY: Atributos que so opcionais quando uma object class referenciada na base;
Backend SQL
O backend SQL no para ser utilizado para criar primeira poro da rvore LDAP, mas sim dados relacionais, utilizando MySQL, PostgreSQL;
O overhead feito pelo ODBC e o mapeamento do modelo de dados relacional para o modelo de dados LDAP que deve ser feito pela prpria database relacional, o que limita a performance do back-sql;.
Backend SQL
Configurao Compilao
Deve ser atribuda a opo enable-sql junto com o script configure do pacote fonte do OpenLDAP;
O suporte OpenLDAP SQL requer que as bibliotecas iODBC ou as bibliotecas unixODBC estejam instaladas no sistema;
Backend SQL
Conceitos de mapeamento
O back-sql utiliza um conjunto de tabelas na prpria database relacional para armazenar informao em qual tabela e campos correspondem a um determinado atributo LDAP e quais chaves correspondem a um determinado objeto LDAP;
O conceito de mapeamento requer inmeros joins numa tabela, ento indexar campos chave essencial para uma melhor performance;
Backend SQL
Insero de dados no banco
O pacote fonte do OpenLDAP possui um diretrio com o nome de rdbm_depends que contm inmeros scripts sql para preencher a database relacional;
Backend SQL
Mapeamento de ObjectClasses
tabela: ldap_oc_mappings CREATE SEQUENCE ldap_oc_mappings_id_seq; CREATE TABLE ldap_oc_mappings ( id int4 NOT NULL PRIMARY KEY DEFAULT nextval ('ldap_oc_mappings_id_seq'), objectclass name varchar(64) NOT NULL, keytbl varchar(64) NOT NULL, keycol varchar(64) NOT NULL, create_proc varchar(255), chave(inteiro delete_proc varchar(255), Stored procedure para expect_return int NOT NULL remover objetos das ); tabelas RDBM baseado na chave(valor inteiro)
Backend SQL
Mapeamento de Atributos
tabela: ldap_attr_mappings CREATE SEQUENCE ldap_attr_mappings_id_seq; id da objectclass CREATE TABLE ldap_attr_mappings correspondente na tabela ( ldap_oc_mappings id int4 NOT NULL PRIMARY KEY default nextval('ldap_attr_mappings_id_seq'), atributo oc_map_id int4 NOT NULL, expresso para o name varchar(255) NOT NULL, select(tabela.ca sel_expr varchar(255) NOT NULL, mpo) sel_expr_u varchar(255), lista de tabelas from_tbls varchar(255) NOT NULL, envolvidas numa join_where varchar(255), consulta
Expresso utilizada para joins diversos separadas por vrgula
Backend SQL
Mapeamento de Atributos
tabela: ldap_attr_mappings add_proc varchar(255), delete_proc varchar(255), Store Procedure para apagar o objeto e o seu id. param_order int NOT NULL, expect_return int NOT NULL, FOREIGN KEY (oc_map_id) REFERENCES ldap_oc_mappings(id) );
Store Procedure para adicionar um valor para esse atributo dando um id de objeto e um id.
Backend SQL
Mapeamento de dn
tabela: ldap_entries CREATE SEQUENCE ldap_entries_id_seq; dn Virtual CREATE TABLE ldap_entries ( id da object class em ldap_oc_mappingsr id int4 NOT NULL PRIMARY KEY DEFAULT nextval('ldap_entries_id_seq'), id de referncia do parent para dn varchar(255) NOT NULL UNIQUE, fazer o mapeamento correto do -- dn_ru varchar(255), objeto. Raiz da base: 0 oc_map_id int4 NOT NULL, parent int NOT NULL, Valor inteiro para mapear o objeto a dn keyval int NOT NULL, atual UNIQUE (oc_map_id,keyval), FOREIGN KEY (oc_map_id) REFERENCES ldap_oc_mappings (id) );
Backend SQL
Mapeamento de ObjectClasses
tabela: ldap_entry_objclasses CREATE TABLE ldap_entry_objclasses ( entry_id int4 NOT NULL, nome da object class oc_name varchar(64), FOREIGN KEY (entry_id) REFERENCES ldap_entries(id) );
id do objeto virtual da tabela ldap_entries
O campo oc_map_id da tabela ldap_entries permite o mapeamento de apenas 1 object class, mas essa tabela trabalha para que mais objectclasses sejam utilizadas em um objeto.
Password Policies
Password Policies
O OpenLDAP deve ser compilado para que o overlay funcione. Na configurao da compilao(./configure) deve ser habilitado o password policy com o enable-ppolicy;
Password Policies
Exemplo de entrada na base:
dn: cn=gabriel,ou=usuarios,ou=policies,dc=tchelinux,dc=org objectClass: pwdPolicy objectClass: top objectClass: device cn: gabriel pwdAttribute: userPassword pwdMaxAge: 7516800 pwdExpireWarning: 432000 pwdInHistory: 6 pwdCheckQuality: 1 pwdMinLength: 8 pwdMaxFailure: 4 pwdLockout: TRUE pwdLockoutDuration: 1920 pwdGraceAuthNLimit: 0 pwdFailureCountInterval: 0 pwdMustChange: TRUE pwdAllowUserChange: TRUE pwdSafeModify: TRUE
Dicas
Dicas
Use e abuse de ndices; Preste ateno na configurao do banco(DB_CONFIG); Use replicao sempre! Mantenha sempre o backup atualizado; Um bom planejamento fundamental;
O OpenLDAP possui inmeras funcionalidades, portanto, existem inmeras formas da implementao do servio de diretrio;
Para uma boa performance, use filesystem journalized e mantenha o journal em outra partio;
MUITO OBRIGADO!!!
gabriel@gabrielstein.org