You are on page 1of 40

EXTREME LDAP

POR GABRIEL STEIN

TPICOS ABORDADOS

ANATOMIA DE SCHEMAS

TRABALHANDO COM BACKEND SQL

BOTANDO ORDEM NA CASA: PASSWORD POLICIES

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

Comparaes podem ser feitas de acordo com a caixa das letras:

- 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:

- Booleanos Exemplo: booleanMatch - Inteiros Exemplo: integerMatch

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

Binary Boolean Integer

Anatomia de schemas

ATRIBUTO

Anatomia de schemas
ATRIBUTO
Atributos so componentes responsveis por armazenar valores numa base;

Podem ser herdados de uma objectclass desde que sejam obrigatrios

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

Qualificador do Tipo de Matching

Anatomia de schemas
ATRIBUTO Desmembrando parte 2

No slide anterior, constatamos:


O OID da ObjectClass 2.5.4.5. Esse nmero identifica unicamente o atributo; O nome do atributo que pode ser utilizado em uma entrada serialNumber;

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, de forma incansvel....

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.

E o valor que est entre chaves na diretiva SYNTAX??

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;

Um esqueleto de montagem de atributo:

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

AUXILIARY: So objectclasses aditivas, complementam as objectclasses STRUCTURAL; Exemplo: pilotObject

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;

MAY (audio $ businessCategory $ carLicense $ departmentNumber $ displayName $ employeeNumber)

Trabalhando com Backend SQL

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;

As chaves na database devem ser inteiros(o que o padro)

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;

Existem verses desses scripts sql para MySQL, PostgreSQL, Oracle...

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

Possibilita fazer um controle de senha dos usurios da base;

Permite controlar o vencimento da senha, tamanho mnimo, histrico, qualidade da senha;

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;

Aps a compilao, deve ser referido o schema ppolicy.schema no slapd.conf;


Outra configurao slapd.conf:

overlay ppolicy ppolicy_default "cn=default,ou=Policies,dc=tchelinux,dc=org"

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;

Criptografia de dados!! Log separado ==> (syslog.conf) diretiva local4.* -/var/log/ldap.log

Para uma boa performance, use filesystem journalized e mantenha o journal em outra partio;

MUITO OBRIGADO!!!

gabriel@gabrielstein.org

You might also like