quinta-feira, 4 de setembro de 2014

Exemplo de uso do Ldap - Windows Active Directory

Baseado no pré-requisito de se ter um modelo padrão para acessar e armazenar
informações, com o ADS e a padronização feita pelo protocolo LDAP, a Microsoft definiu
como as informações devem ser formatadas. Com isso, foi possível fazer com que diversos
sistemas distintos na rede pudessem autenticar-se na base de dados do ADS ou até mesmo
buscarem informações armazenadas em diretórios. (KING, 2000)

Com o ADS, cada objeto em um diretório possui um nome único para referenciá-
lo, pois utiliza nomes no padrão X.500 para representar cada um dos objetos que ele contém.
Como já visto, em ambientes X.500, o nome completo ou distinto (DN) de qualquer objeto
representa o caminho completo para o topo da estrutura da árvore de diretórios, conforme
pode ser observado
Essa estrutura hierárquica do LDAP possibilitou ao sistema operacional Windows
e ao ADS trabalharem com uma base de dados global, não sendo mais necessário possuir
diversos domínios em uma empresa. Como exemplo,

Esse exemplo mostra que a empresa KingTech possui duas filiais: Reno e Tampa.
Cada uma delas possui diversos departamentos (no caso, Consulting, Education e Sales). A integração LDAP + ADS possibilitou a existência de um domínio único representado pela organização (o - organization) KingTech, com duas unidades organizacionais (ou -organization unit), Reno e Tampa. Assim, temos as seguintes representações para cada uma das filiais:
1. Tampa.KingTech
2. Reno.KingTech
Com essa estrutura centralizada e organizada hierarquicamente, não haverá mais a
complexidade de vários domínios para uma única empresa, passando a existir apenas um domínio central (no caso KingTech) e unidades organizacionais ligadas a ele (no caso, Reno e Tampa). Nesse caso os usuários estariam ligados a organização central, podendo ainda pertencer a uma ou várias unidades organizacionais.







fonte: TCC de BRENO DA SILVA AMARAL

OpenLdap em Centos 6.3



Vamos demonstrar como instalar um servidor de openldap em um Centos para cetralizarmos os acessos.

Primeiramente vamos desabilitar nosso firewall para que não esteja nada barrando, lembrando que só estou fazendo isso pois é um ambiente de testes.

# system-config-firewall-tui

Vamos agora instalar o openLdap

# yum -y install openldap-servers openldap-clients

Após a instalação vamos realizar a configuração do OpenLDAP.

Vamos ativar o Log

# mkdir /var/log/slapd
# chmod 755 /var/log/slapd/
# chown ldap:ldap /var/log/slapd/

Em seguida precisamos realizar um ajuste no arquivo do rsyslog.

# vim /etc/rsyslog.conf

Inclua a linha abaixo no arquivo.

[...]
local4.*                        /var/log/slapd/slapd.log
[...]

Em seguida reinicie o serviço.

# service rsyslog restart

Agora vamos realizar a alteração conforme nosso domínio.

# cp -Rfa /etc/openldap/slapd.conf.bkp --- //Vamos criar um backup para garantir
# vim /etc/openldap/slapd.conf

Criando os certificados.

# cd /etc/pki/tls/certs
# make slapd.pem

Na criação do cerfitifaco, será necessário responder a perguntas como qual país, qual cidade, qual organização entre outras.

Após a criação precisaremos ajustar a permissão

# chmod 640 slapd.pem
# chown :ldap slapd.pem
# ln -s /etc/pki/tls/certs/slapd.pem /etc/openldap/certs/slapd.pem

Gerando a senha de gerenciamento do OpenLDAP.

#slappasswd
New password: senha
Re-enter new password: senha
{SSHA}mHW4UnE06j/vZVLkuldssdXOAu2CiN89

Ao gerar a senha, ele mostrará a hash da sua senha, guarde-a, pois usaremos ela em uma configuração posterior.

Copiando os arquivos de exemplo para ajustar na configuração.

# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

Atualizando o arquivo 'slapd.conf'.

Todas configurações abaixo serão feitas em slapd.conf.

#vim /etc/openldap/slapd.conf

Alterar as linhas de origem do caminho do certificado.
De:
TLSCACertificatePath /etc/openldap/certs
TLSCertificateFile "\"OpenLDAP Server\""
TLSCertificateKeyFile /etc/openldap/certs/password

Para:
TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
TLSCertificateFile /etc/pki/tls/certs/slapd.pem
TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem

Agora vamos usar a hash gerada anterior aqui:

Busque por 'rootpw' e add a senha que geramos com o comando 'slappasswd'.

[...]
rootpw                  {SSHA}mHW4UnE06j/vZVLkuldssdXOAu2CiN89
[...]

Realize as alterações de 'dc=my-domain' para o seu dominio. Exatamente essas linhas

 by dn.exact="cn=Manager,dc=ldapufs,dc=com,dc=br" read
suffix          "dc=ldapufs,dc=com"
checkpoint      1024 15
rootdn          "cn=Manager,dc=ldapufs,dc=com,dc=br"

Pronto terminamos aqui o slapd.conf.

Agora vamos habilitar o SSL sobre o LDAP.

#vim /etc/sysconfig/ldap

Procure pela linha abaixo e altere de 'no' para 'yes' para ativar o SSL.

[...]
SLAPD_LDAPS=yes
[...]

Atualizando o arquivo de configuração do Ldap.

#vim /etc/openldap/ldap.conf

Ajuste as configurações conforme abaixo.
BASE dc=tidahora,dc=com,dc=br
URI ldap://localhost
TLS_REQCERT never      
TLS_CACERTDIR   /etc/openldap/certs

Criando a estrutura inicial do LDAP.

# vim /root/root.ldif

dn: dc=ldapufs,dc=com,dc=br
dc: ldapufs
objectClass: dcObject
objectClass: organizationalUnit
ou: ldapufs.com.br

dn: ou=people,dc=ldapufs,dc=com,dc=br
ou: people
objectClass: organizationalUnit

dn: ou=groups,dc=ldapufs,dc=com,dc=br
ou: groups
objectClass: organizationalUnit

Executando um 'teste'.

# rm -rf /etc/openldap/slapd.d/*
# slapadd -v -n 2 -l /root/root.ldif

Saída do comando acima:

added: "dc=ldapufs,dc=com,dc=br" (00000001)
added: "ou=people,dc=ldapufs,dc=com,dc=br" (00000002)
added: "ou=groups,dc=ldapufs,dc=com,dc=br" (00000003)
_#################### 100.00% eta   none elapsed            none fast!        
Closing DB...

//Caso o comando acima nao funcione, basta criar 3 arquivos cada um com uma estrofe. e criaremos o ldapufs, people e o groups separadamente.


Ajustando a permissão da estrutura de diretórios do LDAP.

# chown -R ldap:ldap /var/lib/ldap
# chown -R ldap:ldap /etc/openldap/slapd.d

Testando as configurações do LDAP.

# rm -rf /etc/openldap/slapd.d/*
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
# chown -R ldap:ldap /etc/openldap/slapd.d

Ajustando a inicialização do Serviço.
# chkconfig --level 235 slapd on
# /etc/init.d/slapd start

Testando LDAP.

# ldapsearch -x -ZZ -h localhost
# ldapsearch -x -H ldaps://localhost

Um pequeno ajuste a ser realizado no arquivo '/etc/nsswitch.conf'.

#vim /etc/nsswitch.conf

Procure pela linha onde contém 'hosts' e realize a alteração conforme abaixo.

hosts:      ldap files dns


Pronto, agora seu servidor estará apto a receber configurações e conexões de acesso.
Existe o phpldapadmin, que é uma ótima ferramente de gerencia do OpenLdap. Em breve posto sobre ela.


Diferença entre LDAP e Active Directory

Muitas pessoas tem dúvidas entre a diferença entre LDAP e Active Directory, muito por causa do OpenLdap, uma versão opensource do Active Directory.

Então vamos lá.

O Active Directory é um sistema baseado em banco de dados que fornece autenticação, diretório, a política, e outros serviços em um ambiente Windows. Active Directory é construído emcima de LDAP, como HTTP é construído em cima de TCP.

LDAP (Lightweight Directory Access Protocol) é um protocolo de aplicação para consultar e modificar itens de prestadores de serviços de diretório como o Active Directory, que suporta uma forma de LDAP.

Ou seja, não podemos fazer quaisquer comparações significativas.

Agora, podemos comparar o Active Directory da Microsoft, como OpenLdap, pois ambos foram feitos emcima do protocolo LDAP, e são bastante usados para unificar redes heterogêneas.

quarta-feira, 27 de agosto de 2014

Estrutura do diretorio LDAP

Enquanto procurava sobre como autenticar o ubuntu via LDAP achei um explicacão interessante sobre  a organizaćão do diretorio LDAP

Organisational structure for GenFic, a Fictional Gentoo company

dc:         com
             |
dc:        genfic         ## (Organisation)
          /      \
ou:   People   servers    ## (Organisational Units)
      /    \     ..
uid: ..   John            ## (OU-specific data)

notem que existem mais de um nivel de 'dc' o que indica a possibilidade de subgrupos.

dn: uid=john,ou=Professor,ou=People,dc=example,dc=com



fonte:
http://wiki.gentoo.org/wiki/Centralized_authentication_using_OpenLDAP#I_don.27t_get_it._What_is_a_directory.3F

terça-feira, 26 de agosto de 2014

Proposta de Estudo de Caso.

Estamos pensando em um demonstrar a configuracao de um servidor de LDAP que irá validar o login de varios serviços.

Eis a estrutra proposta:
1-Sprint:
Configuração do OpenLdap em um servidor Linux.
Instalação do phpLDAPadmin (UI para manutenção da base LDAP).
Serviço de Shell autenticando-se com LDAP
Instancia do PostgreSQL autenticando-se com LDAP ( De acordo com permisão ou não do usuario)

2- Sprint ( De acordo com tempo disponivel para desenvolvimento)
-Login do Windows no openLDAP
-Instalação do mod_authnz_ldap - Apache.

A partir do primeiro sprint será possivel demonstrar como o LDAP pode ser utilizado para gerenciar usuarios e seus niveis de acesso. Mantendo um ponto de cadastro unico.

quarta-feira, 20 de agosto de 2014

OpenLDAP - continuação...


Como já falado em outro post, o OpenLDAP é um software livre de código aberto que implementa o protocolo LDAP. Ele é um serviço de diretório baseado no padrão X.500.

O OpenLDAP é independente de sistema operativo. Várias distribuições Linux incluem o pacote do OpenLDAP. O software também corre nos sistemas operativos BSD, AIX, HP-UX, Mac OS X, Solaris, Microsoft Windows (2000, XP, 2003, 2008, Vista, win7 e win 8) ez/OS.

Possui basicamente 2 arquivos de configuração, que são, respectivamente:
  • slapd.conf - configuração do daemon;
  • ldap.conf - configuração para acesso dos clientes à base;
O OpenLDAP possui os arquivos padrões chamados de schemas. Sungaila (2008) afirma que “um esquema é um conjunto de regras que define atributos, classes de objetos, e controles indicando onde cada dado pode ser armazenado”. Já Malère (2008) explica um schema como sendo uma estrutura de objetos que especifica a lista total de atributos permitidos e necessários para uma entrada de dados no serviço de diretório. Os schemas permitem manter a consistência dos dados. Uma importante característica desses arquivos é serem extensíveis e assim pode-se adicionar mais atributos ou classes em função das necessidades. Para usar um schema é necessário incluí-lo no arquivo de configuração slapd.conf. Os schemas definem:
  • quais as classes de objetos (object classes) podem ser inseridas num diretório;
  • quais os atributos de uma determinada classe de objetos;
  • os valores possíveis para os atributos;
Se um objeto (entrada), não obedecer às regras do schema, este não pode ser inserido no diretório. Portanto cada entrada estará condicionada a uma hierarquia de armazenamento dos dados na base LDAP. Isto é especificado através do Distinguished Name (DN).

O DN é usado para identificar uma entrada de forma não ambígua num serviço de diretório. Esse atributo é composto por uma seqüência de Relative Distinguished Name (RDN) e cada RDN corresponde a um ramo na árvore do diretório, desde a raiz até a entrada à qual o DN faz referência. Um DN é formado por uma série de RD´s separados por vírgulas. Por exemplo:

dn: uid=rodrigo,ou=usuarios,dc=wikipedia,dc=org 

A inserção dos dados na base LDAP será feita por meio de arquivos ldif (LDAP Data Interchange Format), um arquivo de texto comum que pode ser criado ou alterado com editores de texto convencionais, obedecendo-se apenas, o schema do diretório. As funções do arquivo ldif são:
  • importar dados para o diretório;
  • alterar objetos existentes;
  • criar o backup do diretório;
  • replicação do diretório;
A seguir, um exemplo de arquivo ldif: 

dn: uid=cleber,ou=aluno,dc=escola dc=br 
objectClass: top 
objectClass: organizationPerson 
objectClass: mailUser 
uid: cleber

Fonte: http://pt.wikipedia.org/wiki/OpenLDAP

quinta-feira, 14 de agosto de 2014

LDAP for Dummies

Vamos dar um passo pra trás na nossa introdução ao LDAP,
Afinal a unica coisa que realmente especifica o que LDAP faz é o "D" o "LAP" são apenas adjetivos. Protocolo Leve de Acesso, não quer dizer muita coisa por si só.

Enfim, "D" de Directory-Diretório, O que isso significa para no nosso meio? (Dica: não é uma lista amarela)

Para computação um serviço de diretorio é um sistema que organiza e armazena pares de valores. Assim a partir de uma chave, poderiamos recuperar dados atuais sobre a mesma.

um exemplo:
Luke: Pessoa
Luke: Tel=xxxxx
Luke: Cargo=Menbro1
Bob: Cachorro
Bob: Cor=marrom
Bob: dono=Luke

Assim um sistema de computador que precise por exemplo me enviar um SMS para avisar que meu cachorro pode simplesmente perguntar ao servidor LDAP qual o meu numero de telefone atual.

Outra coisa que veremos no futuro é como o servićo de diretorios vai nos ajudar a estabelecer um Login unico a serviços

quarta-feira, 13 de agosto de 2014

O LDAP na prática: OpenLDAP

É cada vez mais difícil encontrar servidores X.500, em virtude do LDAP possuir custo menor de hardware, é mais fácil de se implementado e possui melhor eficiência de funcionamento. Com o modelo OSI enterrado, a utilização de um servidor X.500 adaptado ao invés de um servidor LDAP passa a ser uma displicência do administrador da rede, pois para quem já conhece o funcionamento de X.500, é muito fácil qualificar-se para o uso do LDAP.

Para que o LDAP seja funcional, ele tem que ser integrado com o software servidor de serviços de diretórios (slapd), além de outros softwares que atribuem aos servidores de diretórios diversas funções como, softwares de autenticação de usuário, banco de dados, chaves criptográficas e os demais protocolos de comunicação.

Com o objetivo de facilitar o uso do LDAP, a Universidade de Michigan, nos Estados Unidos, desenvolveu inicialmente o OpenLDAP, que por ser um software livre, traz consigo todas as vantagens que um software livre possui, como a rápida ampliação de recursos e correção de bugs. O OpenLDAP é a implementação do LDAP sendo que ele adiciona os recursos necessários para sua utilização. A suíte é composta pelos softwares: 
  • Slapd - stand-alone LDAP daemon (servidor); 
  • Slurpd - stand-alone LDAP update replication daemon; 
  • Syncrepl – Replicação de base é mais flexível e tem mais recursos que o slurpd, mas só funciona nas versões mais novas do OpenLDAP; 
  • Bibliotecas de implementação do protocolo LDAP; 
  • Utilitários, ferramentas e amostras clientes. 
Segundo Trigo (2007), as principais características do OpenLDAP são:
  • Suporte a IPv4 e IPv6; 
  • Autenticação (Cryrus Sasl-Kerberos V, GSSAPI, Digst-MD5); 
  • Controle de acessos; 
  • Escolha entre bancos de dados (LDBM e o BerkeleyDB); 
  • Capacidade de atender a múltiplos bancos ao mesmo tempo; 
  • Alta performance em múltiplas chamadas; 
  • Replicação de base (TRIGO,2007, p. 30). 
Conclui-se que o OpenLDAP é um pacote de softwares que trabalha vinculado com o LDAP, e que juntos oferecem um serviço de diretório prático e seguro, com várias funcionalidades como autenticação de usuário e armazenamento de informações, facilidade de backup, funcionamento em redes TCP/IP versão 4 e 6 entre outros.


Fonte: http://www.teleco.com.br/tutoriais/tutorialldap1/pagina_4.asp

quinta-feira, 7 de agosto de 2014

Breve histórico sobre LDAP

A norma abrangente X.500, finalizado em 1988, é um padrão de protocolos de serviços de diretórios, utilizados em redes de computadores, e foi elaborado para trabalhar sobre modelo OSI e incorporado ao pacote de protocolos ISO/IEC 9594. Designado para dar suporte ao padrão X.400, que define a troca de mensagens eletrônicas entre os usuários da rede local, a função do X.500 é prover serviços de diretórios para rede, centralizando a base de dados dos usuários da rede em um servidor X.500. Dentro desse padrão, o cliente acessa o servidor através do protocolo de acesso Directory ( DAP ), que é pilha de protocolos OSI base.



O protocolo de acesso a diretórios DAP (Directory Access Protocol) faz parte das especificações do padrão X.500, e foi desenvolvido para trabalhar junto a todas as camadas do modelo OSI, com o objetivo definir o acesso de usuários aos serviços de diretórios que seu padrão provia.






Assim como o OSI, o X.500 e, conseqüentemente o DAP, foram feitos antes do advento da internet e originalmente não foram preparados para trabalhar com o TCP/IP, visto que segundo Trigo (2007), a aplicação do mesmo além de ser de difícil implementação, gerava aplicações complexas e lentas. Além do mais o estilo da organização da árvore de diretórios do X.500 não foi preparado para a utilização de diretórios distribuídos.Quando se trata de redes, tudo gira em torno dos protocolos. A Internet, o e-mail, as intranets, a transferência de arquivos, os acessos a diretórios e outros serviços providos pela pilha TCP/IP são todas operações baseadas em protocolos, tais como: HTTP, FTP, UDP, TCP, IP, POP, SMTP.
A grande vantagem da utilização de protocolos se resume na compatibilidade que eles oferecerem tanto entre hardwares como entre softwares de diversos fabricantes, o que os tornaram compatíveis entre si. 
Com a disseminação da Internet, o TCP/IP passou a ser usado como um padrão internacional. O sucesso foi tanto que os protocolos do X.500 foram adaptados para que as redes TCP/IP pudessem trabalhar com os servidores X.500. Posteriormente percebeu-se a necessidade da criação de protocolos que se encaixassem melhor com as suas características.
O LDAP foi criado como uma alternativa ao DAP, para prover acesso aos serviços de diretórios do X.500 pelos protocolos da pilha TCP/IP. O LDAP é mais fácil de ser implementado do que o DAP, além de exigir menos recursos da rede e de memória. Ele foi desenvolvido, e não adaptado como o DAP, para aplicações TCP/IP, obtendo, portanto, maior desempenho. Por esses motivos recebeu o nomeLightweight Directory Access Protocol (protocolo leve de acesso a diretórios).
Posteriormente foram criados servidores de diretórios voltados para o TCP/IP e o LDAP. O Slapd (stand-alone LDAP daemon - servidor) foi escolhido como a melhor opção e consolidado. Com sua utilização, passa-se a colocar em prática um software provedor de serviços de diretórios específicos para o TCP/IP e o LDAP, deixando de lado o X.500 que é uma mera adaptação de um padrão desenvolvido para o modelo OSI. Com isso há um ganho em performance e funcionalidades e melhor integração com o LDAP.
Assim sendo o LDAP passou a ser a melhor forma de se obter o acesso a serviços de diretórios e foi padronizado em julho de 1993 no RFC 1487 da IETF (Internet Engineering Task Force – Força-Tarefa de Engenharia da Internet).
As primeiras implementações do LDAP foram soluções de gateway, eles mediavam entre clientes LDAP e servidores X.500. Em 1995, a Universidade de Michigan apresentou o primeiro servidor LDAP nativa. Em 1996, o Netscape seguiu com o primeiro servidor LDAP comercial (Netscape Directory Server, fundação de vários servidores LDAP posteriores). Outros exemplos (entre muitos outros) incluem o Microsoft Active Directory e Novell eDirectory. A figura abaixo mostra o desenvolvimento de protocolos de diretório do X.500/DAP para LDAP.




Fonte: http://www.teleco.com.br/tutoriais/tutorialldap1/pagina_3.asp            https://directory.apache.org/apacheds/basic-ug/1.2-some-background.html

terça-feira, 29 de julho de 2014

Estrutura do Trabalho:


-Breve historico.
Comentarios sobre a RFC e a Timeline do LADP

-Funcionamento
Explicação tecnica do protocolo
Exemplos de uso (comandos e respostas)
Estrutura do diretorio.

-Implementações e Ferramentas (Linux, Windows  e Mac OSX)
http://www.ldapadmin.org/ para Windows
slapd and ldap-utils para Linux ( Debian,Ubuntu)

- Exemplo prático (Estudo de Caso 04)
À definir. ( Testes com Single-Sign-On?)

Notas:
implementaçao do LADP em Linux:
https://help.ubuntu.com/lts/serverguide/openldap-server.html