417 - openldap

Upload: glaubert

Post on 13-Jul-2015

284 views

Category:

Documents


1 download

TRANSCRIPT

OpenLDAP - Implementando Servidor de Autenticao Centralizada

Diego Alencar Alves de Lima [email protected]

Conceitos

Servio de Diretrio

Armazena, organiza e fornece acesso informaes

Diretrios vs DBMSs

Fortemente otimizados para leituras Dados podem ser redundantes

LDAP

Protocolo

Lightweight Directory Access Protocol Conjunto de critrios, mecanismos e mtodos TCP/IP Multiplataforma

Vantagens da Utilizao

Padro aberto API bem definida Maior velocidade de consulta que um Banco de Dados relacional Esquemas padronizados para dados Consolidao de informaes Replicvel e distribuvel

Estrutura

EstruturaBase

Container

Objeto

ObjectClasses (definio de atributos) Atributo: Valor

Schemas

Conjunto de ObjectClasses Definem os campos que podem ser utilizados em um objeto Contm atributos obrigatrios e opcionais Ex: Usurio de sistema (posixAccount)

ObjectClass posixAccountobjectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' DESC 'Abstraction of an account with POSIX attributes' SUP top AUXILIARY MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) MAY ( userPassword $ loginShell $ gecos $ description ) )

OID Nmero nico de identificao do objeto: Object Identifier Nome do objeto Descrio do objeto Herana do objeto Atributos obrigatrios (MUST) Atributos opcionais (MAY)

Atributo homeDirectoryattributetype ( 1.3.6.1.1.1.1.3 NAME 'homeDirectory' DESC 'The absolute path to the home directory' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )

OID Nmero nico de identificao do objeto: Object Identifier Nome do objeto Descrio do objeto Regra para comparao em buscas efetuadas no atributo Sintaxe vlida (tipo de dados que pode ser armazenado)

Registros em uma base LDAP

No h dois registros iguais em um mesmo diretrio Registros podem ser similares e conterem os mesmos atributos Unicidade garantida atravs do DN (Distinguished Name)

Exemplo de Registrocn=Diego Alencar Alves de Lima,ou=Usuarios,dc=4linux,dc=com,dc=br

Base (raiz) do diretrio, definida pelo Domain Component (DC) N da rvore do tipo Unidade Organizacional (Organization Unit, OU) N da rvore do tipo Nome Comum (Common Name, CN)

Objeto Finaldn: cn=Anahuac de Paula Gil,ou=Usuarios,dc=4linux,dc=com,dc=br uid: anahuac sn: anahuac objectClass: top objectClass: person objectClass: qmailUser homeDirectory: /home/anahuac userPassword:: asdasdfjeqfhASfjk= cn: Anahuac de Paula Gil mail: [email protected]

Dica: Atributos que possuem 2 : (::) tem seu valor armazenado codificados em base64.

Resumo

A base LDAP hierrquica e muito mais semelhante ao sistema de arquivos que a um banco de dados relacional A base LDAP armazena recursos O LDAP define um conjunto de objetos e atributos para o armazenamento Esse conjunto chamado de schema Um objeto chamado de ObjectClass e composto por atributos Atributos so definioes de campo Cada registro nico em uma base LDAP

Instalao

Preparao do Servidor

Configurar pr-requisitos

/etc/hostname /etc/hosts

Definir estratgia de Instalao

Pacotes pr-compilados Compilao dos cdigos-fonte

Pacotes X Compilao

Pacotes

Facilidade de manuteno Atualizaes de segurana Correes de bugs Conformidade com padres da distribuio Flexibilidade na escolha de recursos Verses mais novas Recursos extras Administrao manual Bugs e falhas de segurana: Responsibilidade do administrador

Compilao do cdigo-fonte

Utilizando pacotes prcompilados

Instalar o servidor

aptitude install slapd Fornecer senha 12345 para usuario admin A base inicial ser criada automaticamente

Verificar se o servidor est escutando na porta 389

telnet localhost 389

Instalao a partir do cdigo fonte

Instalar os pacotes com as dependncias Baixar o fonte do site oficial Descompactar os arquivos Gerar o makefile conforme o desejado

Instalar qualquer dependencia que esteja faltando

Gerar as dependencias para compilao Compilar o cdigo Instalar os arquivos compilados

Configuraes/etc/ldap/slapd.conf

Principal arquivo de configurao do DSA Organizado em sees

/etc/ldap/ldap.conf

Configuraes das ferramentas cliente para acesso base LDAP

/var/lib/ldap/DB_CONFIG

Configuraes da base de dados

Ferramentas de Gerenciamento

Comandos slapDevem ser executados com a base parada!

Acessam diretamente a base do LDAP, sem utilizar as interfaces fornecidas pelo DSA Especficos para serem utilizados com o OpenLDAP

Comandos slap

Slaptest

Testa a integridade do arquivo slapd.conf Acusa erros de configurao Sintaxe: slaptest

Slapcat

Exporta a base (faz um Dump) Sintaxe: slapcat -l base.ldif

Comandos slap

Slapadd

Adiciona informaes de um arquivo LDIF na base. til para popular inicialmente a base/restaurar backups Sintaxe: slapadd -l arquivo.ldif

Comandos slap

Slappasswd

Gera hash de senhas Suporta os seguintes algoritmos de criptografia:

{CRYPT} {MD5} {SMD5} {SSHA} {SHA}

Sintaxe: slappasswd -h {MD5} -s senha

Comandos slap

Slapindex

Efetua a re-indexao da base LDAP Utilizado para acelerar o acesso aos dados

Comandos ldap

Utilizados com a base LDAP ativa Como clientes LDAP, podem acessar outros DSAs que seguem o padro e no so especficos do OpenLDAP

Comandos ldap

Opes comuns

-h -p -x -ZZ -D -w

host no qual se conectar porta na qual se conectar autenticao simples autenticao TLS DN com o qual se autenticar senha do DN

Comandos ldap

Ldapsearch

Efetua buscas na base LDAP Opes extras:

-b -s -L

base de busca escopo da pesquisa restringe as informaoes exibidas

Exemplo:ldapsearch -h localhost -p 389 -x -D cn=admin,dc=4linux,dc=com,dc=br -w 12345 -b ou=Usuarios,dc=4linux,dc=com,dc=br -LLL

Comandos ldap

Filtros

Possibilitam refinar a busca Aceitam operadores lgicos

& | ! == ~= =

condicional e; condicional ou; condicional no; igual; igualdade aproximada; menor que; maior que

Aceitam operadores comparativos

Comandos ldap

ldapsearch -h localhost -x -b dc=4linux,dc=com,dc=br -LLL '(objectClass=posixAccount)' ldapsearch -h localhost -x -b dc=4linux,dc=com,dc=br -LLL '(cn=*Lima)' cn ldapsearch -h localhost -x -b dc=4linux,dc=com,dc=br -LLL '(cn~=dieog lma)' ldapsearch -h localhost -x -b dc=4linux,dc=com,dc=br -LLL '(|(&(cn~=dieog lma)(uidNumber=2000))(|(givenName=Roberto) (uidNumber=1000)))'

Comandos ldap

Analisando um filtro complexo(|

( ) (

&(cn~=dieog lma)(uidNumber=2000) |(givenName=Roberto)(uidNumber=1000)

)

)

Comandos ldap

Que tipo de filtro voc utilizaria para...

Consultar um endereo de email? Procurar um usurio pelo seu uidNumber? Buscar um sn digitado por um usurio? Procurar usuarios que tem nome Diego? Procurar usurios que esto na localidade So Paulo?

Comandos ldap

ldapadd

Adiciona objetos ao LDAP Semelhante ao slapadd Necessita de autenticao na maioria das situaes

Exemplo:

ldapadd -h localhost -p 389 -x -D cn=admin,dc=4linux,dc=com,dc=br -w senha -f group.ldif

Comandos ldap

ldapmodify

Permite fazer alteraes em atributos de objetos existentes Suporta trs formas de alterao:

add replace delete

Adiciona atributos Substitui atributos Exclui atributos

Forma do LDIF: dn: [dn completo do objeto] ao: [atributo] atributo: [valor]

Comandos ldap

ldapdelete

Permite remover um objeto completo

Exemplo:ldapdelete -h localhost -p 389 -x -D cn=admin,dc=4linux,dc=com,dc=br -w senha cn="Marcos Lima",ou=Usuarios,dc=4linux,dc=com,dc=br

Comandos ldap

ldapmodrdn

Permite renomear um DN Normalmente utilizado com o parametro -r para evitar a duplicao do atributo CN

Exemplo:

ldapmodrdn -h localhost -p 389 -x -D cn=admin,dc=4linux,dc=com,dc=br -w senha -r -f alter_user5.ldif

Clientes LDAP

Clientes Web

Phpldapadmin Luma GQ Jxplorer Ldapvi Shelldap

Interface Grfica

Linha de Comando

Gerenciamento de Logs

Gerenciamento de Logs

Iniciar o OpenLDAP com nivel 256 de debug:slapd -d 256

Abrir um segundo terminal e realizar uma pesquisa. Reinicie agora com nivel 32 e realize a consulta novamente.

Gerenciamento de Logs

Os logs do LDAP sao gerenciados atravs do log geral do sistema Mensagens podem ser gravadas em um arquivo separado. Exemplo: local4.*

/var/log/slapd.log

ndices

Melhoram a performance de leitura Reduzem a velocidade de gravao Utilizam memria adicional

ndices

Tipos de indexao

pres Utilizado para buscas de presena eq Utilizado em comparaes de equalidade sub Utilizado em buscas de substring approx Utilizado em buscas aproximadas

ndices

Exemplo:

index objectClass,uid index userPassword index sn,givenName

eq eq,pres approx,sub,eq

ndices

Que tipo de ndice voc utilizaria?

Consultar um endereo de email Procurar um usurio pelo seu uidNumber Buscar um sn digitado por um usurio Procurar usuarios que tem nome Jose

ACLs

Controle de acesso Segurana de atributos Delegao de tarefas Sintaxe:access to [ by [ ] [ ] ]+

ACLs

Entidades mais comuns

* Users Self

Todos Usurios autenticados Dono do objeto

Anonymous Usuarios no autenticados

Entidades mais especficas

dn. Usuarios dentro do escopo da DN dn.[] Usuarios determinados por uma expresso regular

ACLs

Nveis de acesso

None Auth Compare Search Read Write

Sem acesso Pode se autenticar Pode efetuar comparaoes Pode utilizar filtros Pode ler resultados de pesquisas Pode modificar e renomear

ACLsEscopos

to dn.base=ou=usuarios,dc=dominiodc=dominio cn=admin,dc=dominio ou=usuarios,dc=dominio uid=diego,ou=usuarios,dc=dominio cn=agenda,uid=diego,ou=usuarios,dc=dominio uid=fulano,ou=usuarios,dc=dominio

ACLsEscopos

to dn.one=ou=usuarios,dc=dominiodc=dominio cn=admin,dc=dominio ou=usuarios,dc=dominio uid=diego,ou=usuarios,dc=dominio cn=agenda,uid=diego,ou=usuarios,dc=dominio uid=fulano,ou=usuarios,dc=dominio

ACLsEscopos

to dn.subtree=ou=usuarios,dc=dominiodc=dominio cn=admin,dc=dominio ou=usuarios,dc=dominio uid=diego,ou=usuarios,dc=dominio cn=agenda,uid=diego,ou=usuarios,dc=dominio uid=fulano,ou=usuarios,dc=dominio

ACLsEscopos

to dn.children=ou=usuarios,dc=dominiodc=dominio cn=admin,dc=dominio ou=usuarios,dc=dominio uid=diego,ou=usuarios,dc=dominio cn=agenda,uid=diego,ou=usuarios,dc=dominio uid=fulano,ou=usuarios,dc=dominio

ACLsaccess to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=4linux,dc=com,dc=br" write by anonymous auth by self write by * none

ACLs

access to dn.base="" by * read

ACLsaccess to * by dn="cn=admin,dc=4linux,dc=com,dc=br" write by * read

ACLsaccess to dn.subtree="ou=Restrito,dc=4linux,dc=com,dc=br by self write by dn.children="dc=4linux,dc=com,dc=br" search by anonymous auth

ACLs

Exerccios

Proteja o diretrio contra leitura por usurios no autenticados Permita que somente o dono de um atributo possa ler e altera-lo Permita que somente seu usuario (um usurio criado por voc) leia um ou=Confidencial

Backups

Formas de realizar o backup

Ldapsearch Forma recomendada Utiliza a interface LDAP Gera um arquivo LDIF Slapcat

No necessita de senha do administrador No recomendada, mas aceita a partir do OpenLDAP 2.2 para BDB e HDB* Cpia do diretrio da base COM A BASE FECHADA*

Dependende de arquitetura e implementao

* http://www.openldap.org/faq/data/cache/287.html

Backups

Usando o ldapsearchldapsearch -x -D cn=admin,dc=4linux,dc=com,dc=br -w senha -b dc=4linux,dc=com,dc=br -LLL > backup.ldif

Usando o slapcatslapcat > backup.ldif

Backups

Scripts de backup

#! /bin/bash ADMIN_MAIL="" LDAP_PASS="senha" TODAY=`date +%Y%m%d` ldapsearch -x -D cn=admin,dc=4linux,dc=com,dc=br \ -w $LDAP_PASS \ -b dc=4linux,dc=com,dc=br \ -LLL > /tmp/$TODAY-backup.ldif cd /tmp tar -zcvf $TODAY-backup.tar.gz $TODAY-backup.ldif echo "Backup da base LDAP" | nail -s "Backup de $TODAY" \ -a /tmp/$TODAY-backup.tar.gz $ADMIN_MAIL

Backups

Passos para a Restaurao de Backups

Parar a base Remover a base antiga Iniciar o OpenLDAP para a criao da base vazia Parar o OpenLDAP novamente Para LDIFs: Restaurar o LDIF utilizando-se slapadd Para arquivos: copiar os arquivos de backup da base Reindexar a base Conferir as permisses Iniciar o DSA

Backups

Ferramenta db_recovery

Efetua a restaurao de certos tipos de corrupo da base Ferramenta de ltimo caso Deve ser utilizada a ferramenta da mesma verso da base Berkeley DB Sintaxe:db4.2_recover -c -v -h /var/lib/ldap

Recuperao de Senha do Admin

Parmetro do slapd.conf:rootdn "cn=admin,dc=4linux,dc=com,dc=br" rootpw 123456

Pode ser definida de forma criptografada utilizando-se o slappasswd Aps a configurao, reiniciar o DSA e alterar a senha do admin utilizando ldapmodify

Protege os dados do servidor

Suporte a Criptografia

Garante a identidade do servidor (certificados) Tipos suportados:

SSL

Segurana da camada de transporte Implementada na camada de aplicao Exige uma porta diferente Implementada na camada de transporte Reutiliza a porta j existente

TLS

Ativao do TLS

Instalar o OpenSSL Criar uma agncia certificadora (CA) Gerar uma chave de assinatura Criar o certificado do servidor Assinar o certificado com a chave de assinatura do CA Copiar os certificados assinados Ajustar o slapd.conf para utilizar os certificados

Ativao do TLS nos Clientes

Copiar o certificado do CA para o cliente Ajustar o arquivo /etc/ldap/ldap.conf Utilizar o parmetro -ZZ nos comandos ldap

Tcnicas disponveis no OpenLDAP

Replicao

Slurpd

Descontinuada na verso 2.4 No confivel em grandes volumes Sensvel a erros No tolera longos perodos sem replicao Daemon independente Introduzida na verso 2.3 Mdulo do LDAP Suporta dois mtodos de replicao: pushbased e pull-based

Syncrepl

Replicao

Configurando o servidor Mestre

Parar o OpenLDAP Incluir o modulo syncprov no slapd.conf Incluir o overlay e configuraes do syncprov Configurar ACLs para permitir o usuario cn=Replicator Inicie o servidor

Replicao

Configurando o servidor Secundrio (Slave)

Parar o OpenLDAP Incluir diretiva syncrepl Configure a diretiva rootdn Remova a base antiga Inicie o servidor

Integrando Servios

Servidor Apache

Pode utilizar a base LDAP para proteger reas do site

Servidor Apache

Instalar o apacheaptitude install apache2

Ativar o mdulo de suporte ao LDAPa2enmod authnz_ldap

Criar um virtualhost com acesso autenticado12.3.apache_vhost

Servidor Apache

Copiar a configurao do vhost para /etc/apache2/conf.d Criar o diretrio do vhost e um index.html Reiniciar o Apache Alterar a linha require valid-user conforme o desejado

Servidor Apache

Diretivas vlidas do mod_auth_ldap:

require user Diego Lima [para cn=] require user diego.lima [para uid=] require ldap-group cn=Web,ou=Grupos,dc=4linux,dc=com,dc=br [groupOfUniqueNames] require dn cn=Diego Lima,ou=Usuarios,dc=4linux,dc=com,dc=br require ldap-attribute title=acessoweb

Mais informaes: http://httpd.apache.org/docs/2.0/mod/mod_auth_ldap.html

Servidor Proxy Squid

Instalar o Squidaptitude install squid

Testar a autenticao via plugin do squid:/usr/lib/squid/ldap_auth -b ou=Usuarios,dc=4linux,dc=com,dc=br -v3 -f '(uid=fulano1)' -h ldap__.4linux.com.br -ZZ

Testar a autenticao por grupos:/usr/lib/squid/squid_ldap_group -d -b ou=Grupos,dc=4linux,dc=com,dc=br -B ou=Usuarios,dc=4linux,dc=com,dc=br -f '(&(memberuid=fulano1) (cn=fulano1))' -h ldap__.4linux.com.br -ZZ

Configurar o squid.conf para utilizar a atenticao via LDAPauth_param basic program /usr/lib/squid/ldap_auth -b ou=Usuarios,dc=4linux,dc=com,dc=br -v3 -f (uid=%s) -h ldap__.4linux.com.br -ZZ auth_param basic children 5 auth_param basic realm Squid Curso de LDAP auth_param basic credentialsttl 3 hours auth_param basic casesensitive off external_acl_type grupo_no_LDAP %LOGIN /usr/lib/squid/squid_ldap_group -d -b ou=Grupos,dc=4linux,dc=com,dc=br -B ou=Usuarios,dc=4linux,dc=com,dc=br -f "(&(memberuid=%u)(cn= %g))" -h ldap__.4linux.com.br -ZZ

Servidor Proxy Squid

Servidor Proxy Squid

Criar ACLsacl Gdiretoria external grupo_no_LDAP diretores acl pedeSenha proxy_auth REQUIRED acl minhaRede src 192.168.200.0/255.255.255.0

http_access allow Gdiretoria http_access allow pedeSenha http_access allow minhaRede

NSS e PAM

Instalar o NSS

aptitude install libnss-ldap Informar o DN e senha do admin

Remover o nscd Configurar o /etc/nsswitch.conf Configurar o /etc/libnss-ldap.conf Listar as entradas de passwd

getent passwd

NSS e PAM

Instalar o libpam-ldap

aptitude install libpam-ldap Editar o arquivo /etc/pam.d/common-account Editar o arquivo /etc/pam.d/common-auth Editar o arquivo /etc/pam.d/common-password Editar o arquivo /etc/pam.d/common-session Verificar o arquivo /etc/pam_ldap.conf

Configurar o PAM

VSFTP e ProFTP

Instalar o vsftp

aptitude install vsftpd

Edite o arquivo /etc/vsftpd.conf Reinicie o vsftp Teste o ftp conectando-se a sua maquina:

ftp debianXX.brasilia.caixa

Instalar o ProFTP

VSFTP e ProFTP

aptitude install proftpd-ldap proftpd-doc

Editar o arquivo /etc/proftpd/proftpd.conf e configurar o ldap Reiniciar o proftpd /etc/init.d/proftpd restart Se conectar no servidor

Servidor Postfix

Instalar o Postfix como internet site Copiar o qmailuser.schema para /etc/ldap/schema e adiciona-lo no slapd.conf Adicionar os atributos de email nos usurios Configurar o postfix para utilizar LDAP (/etc/postfix/main.cf) Testar o funcionamento

Servidor POP/IMAP com Cyrus

Instalar suporte a SASL

aptitude install sasl2-bin

Editar o arquivo /etc/default/saslauthd Crie o arquivo /etc/saslauthd.conf Reinicie o saslauthd Utilize o comando testsaslauthd para testar o SASL

Servidor POP/IMAP com Cyrus

Instalar o Cyrus

aptitude install cyrus21-pop3d cyrus21imapd cyrus21-admin

Editar o arquivo /etc/imapd.conf Reiniciar o Cyrus

Servidor POP/IMAP com Cyrus

Editar o arquivo /etc/postfix/main.cf para entregar mensagens para o Cyrus Reinicie o Cyrus e o Postfix Criar usurio Cyrus na base LDAP Testar o funcionamento

Instalar o Samba

Samba

aptitude install samba smbclient smbldap-tools samba-doc acl

Instalar o schema do Samba no OpenLDAP Copie o arquivo samba.schema Adicione uma diretiva include no slapd.conf Configure indexao dos atributos

Restrinja o acesso aos atributos sambaLMPassword e sambaNTPassword para somente permitir autenticao

Samba

Pare o OpenLDAP e reindexe a base Inicie novamente o OpenLDAP Faa backup do arquivo /etc/samba/smb.conf e copie o arquivo de configurao exemplo Informe ao Samba a senha do usurio admin do OpenLDAP Crie um arquivo de usurios do samba Reinicie o Samba

Samba

Anote a identificao do domnio

net getlocalsid

Configure o smbldap-tools Popule a base utilizando smbldap-populate Efetue os testes de funcionamento