417 - OpenLdap
Transcript of 417 - OpenLdap
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