Differences

This shows you the differences between two versions of the page.

Link to this comparison view

openldap_com_replicacao_tls_debian_squeeze_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== OpenLDAP com Replicação + TLS + Debian Squeeze ======
  
 +
 +**O que é LDAP?**
 +
 +LDAP (Lightweight Directory Access Protocol) é um protocolo padrão inicialmente projetado para o acesso a serviços de diretório X.500. O LDAP é a versão reduzida de um protocolo chamado DAP (Directory Access Protocol). A principal função do DAP era a de estabelecer,​ de forma padrão, regras de comunicação de acesso com um diretório baseado no padrão X.500, mas por ser complexo permitiu o surgimento do LDAP que implementa apenas as operações básicas do DAP: Bind, Read, List, Search, Compare, Modify, Add, Delete e ModifyRDN.
 +
 +Esta introdução é importante para que saibamos exatamente o que é um serviço de diretório. Aqueles que já têm claro este conceito podem, com segurança, ignorar o próximo parágrafo.
 +
 +Um serviço de diretório contém informações em forma de entradas. Um bom exemplo poderia ser uma lista telefônica,​ que contém entradas: nomes de pessoas, nomes de empresas, etc. Cada entrada contém uma série de dados que, de maneira formal, chamamos de atributos. Estes dados podem ser o nome da empresa, telefone, endereço, etc. Uma lista telefônica destaca-se por ser um guia no qual podemos realizar consultas com freqüência,​ ao qual poucas vezes, porém, iremos adicionar novas entradas. Vale a pena destacar também que, muitas vezes, poderemos fazer consultas nesta lista por ordem alfabética,​ pelo tipo de empresa, por endereço. Em poucas palavras, um diretório é uma base de dados contendo diferentes tipos de informações (a lista telefônica foi apenas um exemplo) e oferece uma versatilidade muito grande na hora de buscar a informação desejada.
 +
 +Então, para que serve o LDAP? O LDAP é simplesmente um protocolo encarregado por definir a maneira através da qual se realizam as pesquisas em uma base de dados de "​entradas"​ (como o exemplo mencionado anteriormente). Protocolo é um conjunto de regras que devem ser seguidas na hora de se criar uma aplicação que siga um padrão, no caso, o padrão LDAP.
 +
 +Anteriormente falamos sobre X.500. Este é um protocolo que era utilizado antigamente de forma bastante ampla como serviço de diretório. Inicialmente o LDAP foi criado somente para servir de interface entre os clientes que queriam fazer consultas ao servidor X.500. Isto foi decorrente das deficiências que este protocolo tinha e de sua extrema lentidão. Mais adiante concluiu-se que, como a maioria das consultas chegava normalmente através da interface LDAP, seria muito mais vantajoso utilizar o LDAP como um serviço independente de diretório sem a necessidade de se utilizar o X.500.
 +
 +**O que é OpenLDAP?**
 +
 +Agora que já sabemos o que é LDAP, veremos o que é OpenLDAP. OpenLDAP é simplesmente um projeto colaborativo livre e totalmente funcional que centraliza a criação de uma série de ferramentas que implementam o protocolo LDAP. Pode ser um servidor LDAP ou qualquer ferramenta onde o cliente possa acessar ou gerenciar a informação através deste servidor.
 +
 +O servidor LDAP nada mais é que um pedaço de software encarregado de gerenciar de forma interna a informação,​ porém não é responsável por armazená-la. Isto ocorre porque o protocolo LDAP não é designado para o armazenamento,​ mas sim para a gestão da informação armazenada. Ou seja, o protocolo não define a forma de armazenar esta informação,​ como, por exemplo, a informação dos telefones de uma lista telefônica. Ele simplesmente é capaz de gerenciá-la,​ não importando aonde esta estiver armazenada.
 +
 +Vejamos um exemplo:
 +
 +{{:​imagem_ldap_pt.png?​|}}
 +
 +O cliente faz uma consulta qualquer no diretório LDAP, que gerencia esta consulta devolvendo a informação solicitada, buscada na base de dados. Isto é feito de uma forma bastante simples, pois o cliente somente precisa saber como fazer a consulta. O servidor encarrega-se de buscar estes dados na base de dados correta.
 +
 +**O que é Active Directory?​**
 +
 +Active Directory é uma outra implementação do protocolo LDAP, sob a responsabilidade da Microsoft. Isto somente é possível porque o protocolo LDAP é um padrão aberto, permitindo que cada um o implemente da sua maneira. Existem muitas outras implementações,​ mas neste handbook nosso foco será nas mais conhecidas: OpenLDAP e Active Directory.
 +
 +A implementação do Active Directory é um bom exemplo do potencial do protocolo LDAP, não se limitando somente ao funcionamento definido pelo protocolo, mas estendendo-o com a criação de novas funcionalidades,​ o que o torna um sistema muito mais amplo que um simples serviço de diretórios. O Active Directory implementa, além do protocolo LDAP, outras funcionalidades como o DNS (Domain Name System) e o protocolo de autenticação Kerberos.
 +
 +O Active Directory é utilizado como base de dados centralizada de informações necessárias para a operação de uma rede distribuída de computadores. Para poder operar como servidor central de uma rede distribuída,​ é necessário que armazene informações de usuários e suas permissões,​ grupos, máquinas existentes na rede, recursos comuns, seja de disco ou físicos, como impressoras e outros periféricos. Além disto, deve possuir um sistema de autenticação. ​
 +
 +**Conclusão**
 +
 +O LDAP trata-se de um protocolo aberto, rápido e eficaz que nos permite criar ferramentas de servidores ou de clientes compartilhando um mesmo padrão e facilitando a interoperabilidade em ambientes heterogêneos com diferentes máquinas, sistemas operacionais ou implementações do mesmo. Desta forma, um servidor OpenLDAP pode ser capaz de interoperar com clientes ou ferramentas de gestão desenvolvidas por outros fabricantes,​ como Microsoft, Novell, etc. Entretanto, com ferramentas livres desenvolvidas pelo projeto OpenLDAP é possível interoperar com um servidor Active Directory, inclusive chegando a integrar uma máquina em Linux dentro de um domínio gerenciado por Active Directory.
 +
 + Ideia principal deste how to é mostrar como podemos centralizar a autenticação de nossos servidores Linux na rede de uma forma fácil, controlando os nosso usuário e grupos com um frontend web. 
 +
 +Temos que fazer alguns ajustes nos dois servidores LDAP 
 +  - Nome LDAP master: ldap1
 +  - Domínio: douglasqsantos.com.br
 +  - IP: 10.0.0.25
 +  - Nome LDAP slave: ldap2
 +  - Domínio: douglasqsantos.com.br
 +  - IP: 10.0.0.26
 +
 +Prepare o seu sistema com o seguinte script http://​wiki.douglasqsantos.com.br/​doku.php/​confinicialsqueeze_en para que não falte nenhum pacote ou configuração.
 +
 +Sempre quanto terminar a edição de algum arquivo .ldif no vim sempre pressione F7 para ele remover os espaços nos finais de linha que sempre da merda ;)
 +
 +Vamos acertar o arquivo /etc/hosts nos dois servidores
 +<sxh bash>
 +vim /etc/hosts
 +127.0.0.1 ​      ​localhost
 +10.0.0.25 ​      ​ldap1.douglasqsantos.com.br ​      ldap1
 +10.0.0.26 ​      ​ldap2.douglasqsantos.com.br ​      ldap2
 +</​sxh>​
 +
 + Vamos ajustar o nome do servidor ldap1 em /​etc/​hostname
 +<sxh bash>
 +vim /​etc/​hostname
 +ldap1
 +</​sxh>​
 +
 + Vamos ajustar o nome do servidor ldap2 em /​etc/​hostname ​
 +<sxh bash>
 +vim /​etc/​hostname
 +ldap2
 +</​sxh>​
 +
 + Vamos desabilitar o IPV6 nos dois servidores
 +<sxh bash>
 +echo "​net.ipv6.conf.all.disable_ipv6=1"​ >> /​etc/​sysctl.conf
 +</​sxh>​
 +
 + Agora vamos reiniciar os dois servidores ​
 +<sxh bash>
 +reboot
 +</​sxh>​
 +
 + Agora vamos atuailizar os repositórios e fazer um upgrade do sistema nos dois servidores
 +<sxh bash>
 +aptitude update && aptitude dist-upgrade -y
 +</​sxh>​
 +
 + Agora vamos instalar os pacotes necessários para o LDAP no servidor master pois no servidor slave vamos ter que aplicar patch no ldap, aqui vai ser necessário informar uma senha para o admin do LDAP 
 +<sxh bash>
 +aptitude install slapd ldap-utils -y
 +</​sxh>​
 +
 + Agora vamos verificar se o LDAP está respondendo ​
 +<sxh bash>
 +nmap -sS localhost -T4
 +
 +Starting Nmap 5.00 ( http://​nmap.org ) at 2011-11-03 09:30 BRST
 +Interesting ports on localhost (127.0.0.1):​
 +Not shown: 996 closed ports
 +PORT    STATE SERVICE
 +22/​tcp ​ open  ssh
 +25/​tcp ​ open  smtp
 +111/tcp open  rpcbind
 +389/tcp open  ldap
 +
 +Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
 +</​sxh>​
 +
 + Vamos agora verificar a base do LDAP 
 +<sxh bash>
 +slapcat ​
 +dn: dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ dcObject
 +objectClass:​ organization
 +o: douglasqsantos.com.br
 +dc: douglas
 +structuralObjectClass:​ organization
 +entryUUID: c48f6bc0-9a5a-1030-93a1-df576de48c91
 +creatorsName:​ cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +createTimestamp:​ 20111103112859Z
 +entryCSN: 20111103112859.257910Z#​000000#​000#​000000
 +modifiersName:​ cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +modifyTimestamp:​ 20111103112859Z
 +
 +dn: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: admin
 +description:​ LDAP administrator
 +userPassword::​ e1NTSEF9WHYxbmxYMndxZ3h3VmFMVGU3cXRWL0pidG9NZjZYaUw=
 +structuralObjectClass:​ organizationalRole
 +entryUUID: c48facde-9a5a-1030-93a2-df576de48c91
 +creatorsName:​ cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +createTimestamp:​ 20111103112859Z
 +entryCSN: 20111103112859.259582Z#​000000#​000#​000000
 +modifiersName:​ cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +modifyTimestamp:​ 20111103112859Z
 +</​sxh>​
 +
 + Agora vamos ajustar o arquivo do cliente LDAP para o servidor Master pois ele vai ser cliente também ​
 +<sxh bash>
 +vim /​etc/​ldap/​ldap.conf
 +BASE dc=douglasqsantos,​dc=com,​dc=br
 +URI ldap://​ldap1.douglasqsantos.com.br/​
 +</​sxh>​
 +
 + Agora vamos consultar a configuração da base LDAP 
 +<sxh bash>
 +slapcat -b cn=config
 +</​sxh>​
 +
 + Agora vamos consultar os objetos da raiz do nosso LDAP master ​
 +<sxh bash>
 +ldapsearch -LLLQY EXTERNAL -H ldapi:// -b cn=config "​(|(cn=config)(olcDatabase={1}hdb))"​
 +dn: cn=config
 +objectClass:​ olcGlobal
 +cn: config
 +olcArgsFile:​ /​var/​run/​slapd/​slapd.args
 +olcLogLevel:​ none
 +olcPidFile: /​var/​run/​slapd/​slapd.pid
 +olcToolThreads:​ 1
 +
 +dn: olcDatabase={1}hdb,​cn=config
 +objectClass:​ olcDatabaseConfig
 +objectClass:​ olcHdbConfig
 +olcDatabase:​ {1}hdb
 +olcDbDirectory:​ /​var/​lib/​ldap
 +olcSuffix: dc=douglasqsantos,​dc=com,​dc=br
 +olcAccess: {0}to attrs=userPassword,​shadowLastChange by self write by anonymou
 + s auth by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ write by * none
 +olcAccess: {1}to dn.base=""​ by * read
 +olcAccess: {2}to * by self write by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ wri
 + te by * read
 +olcLastMod: TRUE
 +olcRootDN: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +olcRootPW: {SSHA}Xv1nlX2wqgxwVaLTe7qtV/​JbtoMf6XiL
 +olcDbCheckpoint:​ 512 30
 +olcDbConfig:​ {0}set_cachesize 0 2097152 0
 +olcDbConfig:​ {1}set_lk_max_objects 1500
 +olcDbConfig:​ {2}set_lk_max_locks 1500
 +olcDbConfig:​ {3}set_lk_max_lockers 1500
 +olcDbIndex: objectClass eq
 +</​sxh>​
 +
 + ​Opções que foram passadas para o comando ​
 +  --LLL       print responses in LDIF format without comments and version
 +  --Q         use SASL Quiet mode
 +  --Y mech    SASL mechanism
 +  --H URI     LDAP Uniform Resource Identifier(s)
 +  --b basedn ​ base dn for search
 +
 +
 +**OBS:** Os arquivos .ldif não podem conter espaços no final das linhas senão vamos encontrar erros como o ex:
 +<sxh bash>
 +Enter LDAP Password: ​
 +ldapadd: attributeDescription "​dn":​ (possible missing newline after line 7, entry "​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br"?​)
 +ldapadd: attributeDescription "​dn":​ (possible missing newline after line 8, entry "​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br"?​)
 +adding new entry "​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br"​
 +ldap_add: Type or value exists (20)
 +  additional info: objectClass:​ value #0 provided more than once
 +</​sxh>​
 +
 + Agora vamos modificar a nossa base do LDAP, para adicionar índices de pesquisa e mudar o status do log, vamos fazer este processo no servidor Master ​
 +<sxh bash>
 +vim ~/​olc-mod1.ldif
 +# 1.
 +dn: cn=config
 +changetype: modify
 +replace: olcLogLevel
 +olcLogLevel:​ stats
 +
 +# 2.1.
 +dn: olcDatabase={1}hdb,​cn=config
 +changetype: modify
 +add: olcDbIndex
 +olcDbIndex: uid eq
 +-
 +# 2.2.
 +add: olcDbIndex
 +olcDbIndex: cn eq
 +-
 +# 2.3.
 +add: olcDbIndex
 +olcDbIndex: ou eq
 +-
 +# 2.4.
 +add: olcDbIndex
 +olcDbIndex: dc eq
 +</​sxh>​
 +
 + Agora vamos importar a nossa configuração ​
 +<sxh bash>
 +ldapmodify -QY EXTERNAL -H ldapi:// -f ~/​olc-mod1.ldif
 +modifying entry "​cn=config"​
 +
 +modifying entry "​olcDatabase={1}hdb,​cn=config"​
 +</​sxh>​
 +
 + Agora vamos criar as OUs para o nosso LDAP 
 +<sxh bash>
 +vim ~/tree.ldif
 +dn: ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Usuarios
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Grupos
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Maquinas,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Maquinas
 +objectClass:​ organizationalUnit
 +</​sxh>​
 +
 + Agora vamos importar as nossas OUs 
 +<sxh bash>
 +ldapadd -cxWD cn=admin,​dc=douglasqsantos,​dc=com,​dc=br -f ~/tree.ldif
 +Enter LDAP Password: ​
 +adding new entry "​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br"​
 +
 +adding new entry "​ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br"​
 +
 +adding new entry "​ou=Maquinas,​dc=douglasqsantos,​dc=com,​dc=br"​
 +</​sxh>​
 +
 + Agora vamos listar a nossa base do LDAP 
 +<sxh bash>
 + ​ldapsearch -xLLL
 +dn: dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ dcObject
 +objectClass:​ organization
 +o: douglasqsantos.com.br
 +dc: douglas
 +
 +dn: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: admin
 +description:​ LDAP administrator
 +
 +dn: ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Usuarios
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Grupos
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Maquinas,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Maquinas
 +objectClass:​ organizationalUnit
 +</​sxh>​
 +
 + Se caso na consulta aparecer algo como 
 +<sxh bash>
 +ldapsearch -xLLL
 +No such object (32)
 +</​sxh>​
 +
 + ​Verifique a configuração do arquivo /​etc/​ldap/​ldap.conf pois é ali que ele vai ser referênciar para efetuar a busca 
 +
 + Agora vamos criar um grupo e uma conta de usuário em nossa base LDAP 
 +
 +<sxh bash>
 +vim ~/​douglas.ldif
 +dn: cn=ti-admin,​ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +cn: ti-admin
 +gidNumber: 20000
 +objectClass:​ top
 +objectClass:​ posixGroup
 +
 +dn: uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +uid: douglas
 +uidNumber: 20000
 +gidNumber: 20000
 +cn: Douglas
 +sn: Santos
 +objectClass:​ top
 +objectClass:​ person
 +objectClass:​ posixAccount
 +objectClass:​ shadowAccount
 +loginShell: /bin/bash
 +homeDirectory:​ /​home/​douglas
 +userPassword:​ {SSHA}aRCGttw+TMW0wp252fJrxUd4Bptta1M4
 +</​sxh>​
 +
 + O valor do parametro userPassword foi gerado da seguinte forma 
 +<sxh bash>
 +slappasswd -s 123
 +{SSHA}aRCGttw+TMW0wp252fJrxUd4Bptta1M4
 +</​sxh>​
 +
 + Agora vamos importar o nosso grupo e usuário para o LDAP 
 +<sxh bash>
 +ldapadd -cxWD cn=admin,​dc=douglasqsantos,​dc=com,​dc=br -f ~/​douglas.ldif
 +Enter LDAP Password: ​
 +adding new entry "​cn=ti-admin,​ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br"​
 +
 +adding new entry "​uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br"​
 +</​sxh>​
 +
 + Agora vamos consultar o nosso grupo ti-admin ​
 +<sxh bash>
 +ldapsearch -xLLL '​(cn=ti-admin)'​
 +dn: cn=ti-admin,​ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +cn: ti-admin
 +gidNumber: 20000
 +objectClass:​ top
 +objectClass:​ posixGroup
 +</​sxh>​
 +
 + Agora vamos consultar o nosso usuário ​
 +<sxh bash>
 +ldapsearch -xLLL '​(uid=douglas)'​
 +dn: uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +uid: douglas
 +uidNumber: 20000
 +gidNumber: 20000
 +cn: Douglas
 +sn: Santos
 +objectClass:​ top
 +objectClass:​ person
 +objectClass:​ posixAccount
 +objectClass:​ shadowAccount
 +loginShell: /bin/bash
 +homeDirectory:​ /​home/​douglas
 +</​sxh>​
 +
 + Agora vamos efetuar um teste de autenticação ​
 +<sxh bash>
 +ldapwhoami -xD uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br -w 123
 +dn:​uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +</​sxh>​
 +
 + Vamos verificar com qual usuários estamos logados no sistema ​
 +<sxh bash>
 +ldapwhoami -x
 +anonymous
 +</​sxh>​
 +
 + Agora vamos tirar a consulta anonima da nossa base LDAP 
 +
 +<sxh bash>
 +vi ~/​pesquisador.ldif
 +dn: cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ organizationalRole
 +objectClass:​ simpleSecurityObject
 +cn: pesquisador
 +userPassword:​ {SSHA}1hSWab/​6wI3sWYXEouYP1sX1XsFsAEBx
 +</​sxh>​
 +
 +O valor do parametro userPassword foi gerado da seguinte forma 
 +<sxh bash>
 +slappasswd -s 123
 +{SSHA}1hSWab/​6wI3sWYXEouYP1sX1XsFsAEBx
 +</​sxh>​
 +
 + Vamos fazer a importação do pesquisador ​
 +<sxh bash>
 +ldapadd -x -a -W -D '​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br'​ -f ~/​pesquisador.ldif
 +Enter LDAP Password: ​
 +adding new entry "​cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br"​
 +</​sxh>​
 +
 + Agora temos que acertar as acls do nosso LDAP 
 +<sxh bash>
 +vim  ~/​consultas.ldif
 +# 1.1.0.
 +dn: olcDatabase={1}hdb,​cn=config
 +changetype: modify
 +delete: olcAccess
 +
 +# 1.1.1.
 +dn: olcDatabase={1}hdb,​cn=config
 +changetype: modify
 +add: olcAccess
 +olcAccess: {0}to attrs=userPassword,​shadowLastChange
 +  by self write
 +  by anonymous auth
 +  by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ write
 +  by dn="​cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br"​ read
 +  by * none
 +-
 +# 1.1.2.
 +add: olcAccess
 +olcAccess: {1}to dn.base=""​ by * none
 +-
 +# 1.1.3
 +add: olcAccess
 +olcAccess: {2}to *
 +  by self write
 +  by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br" ​ write
 +  by dn="​cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br"​ read
 +  by users read
 +  by * none
 +</​sxh>​
 +
 + Agora vamos importar as nossas modificações ​
 +<sxh bash>
 +ldapmodify -cQY EXTERNAL -H ldapi:/// -f ~/​consultas.ldif
 +modifying entry "​olcDatabase={1}hdb,​cn=config"​
 +
 +modifying entry "​olcDatabase={1}hdb,​cn=config"​
 +</​sxh>​
 +
 + Agora vamos testar essa modifivação ​
 +<sxh bash>
 +ldapsearch -xLLL
 +No such object (32)
 +</​sxh>​
 +
 + Como pode ser notado pesquisa anonima não funciona mais agora vamos ver como efetuamos uma consulta ​
 +<sxh bash>
 +ldapsearch -xLLL -D cn=admin,​dc=douglasqsantos,​dc=com,​dc=br -W
 +Enter LDAP Password: ​
 +dn: dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ dcObject
 +objectClass:​ organization
 +o: douglasqsantos.com.br
 +dc: douglas
 +
 +dn: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: admin
 +description:​ LDAP administrator
 +userPassword::​ e1NTSEF9WHYxbmxYMndxZ3h3VmFMVGU3cXRWL0pidG9NZjZYaUw=
 +
 +dn: ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Usuarios
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Grupos
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Maquinas,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Maquinas
 +objectClass:​ organizationalUnit
 +
 +dn: cn=ti-admin,​ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +cn: ti-admin
 +gidNumber: 20000
 +objectClass:​ top
 +objectClass:​ posixGroup
 +
 +dn: uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +uid: douglas
 +uidNumber: 20000
 +gidNumber: 20000
 +cn: Douglas
 +sn: Santos
 +objectClass:​ top
 +objectClass:​ person
 +objectClass:​ posixAccount
 +objectClass:​ shadowAccount
 +loginShell: /bin/bash
 +homeDirectory:​ /​home/​douglas
 +userPassword::​ e1NTSEF9YVJDR3R0dytUTVcwd3AyNTJmSnJ4VWQ0QnB0dGExTTQ=
 +
 +dn: cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ organizationalRole
 +objectClass:​ simpleSecurityObject
 +cn: pesquisador
 +userPassword::​ e1NTSEF9MWhTV2FiLzZ3STNzV1lYRW91WVAxc1gxWHNGc0FFQng=
 +</​sxh>​
 +
 + Agora vamos consultar com o usuario pesquisador que criamos ​
 +<sxh bash>
 +ldapsearch -xLLL -D cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br -W
 +Enter LDAP Password: ​
 +dn: dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ dcObject
 +objectClass:​ organization
 +o: douglasqsantos.com.br
 +dc: douglas
 +
 +dn: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: admin
 +description:​ LDAP administrator
 +userPassword::​ e1NTSEF9WHYxbmxYMndxZ3h3VmFMVGU3cXRWL0pidG9NZjZYaUw=
 +
 +dn: ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Usuarios
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Grupos
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Maquinas,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Maquinas
 +objectClass:​ organizationalUnit
 +
 +dn: cn=ti-admin,​ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +cn: ti-admin
 +gidNumber: 20000
 +objectClass:​ top
 +objectClass:​ posixGroup
 +
 +dn: uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +uid: douglas
 +uidNumber: 20000
 +gidNumber: 20000
 +cn: Douglas
 +sn: Santos
 +objectClass:​ top
 +objectClass:​ person
 +objectClass:​ posixAccount
 +objectClass:​ shadowAccount
 +loginShell: /bin/bash
 +homeDirectory:​ /​home/​douglas
 +userPassword::​ e1NTSEF9YVJDR3R0dytUTVcwd3AyNTJmSnJ4VWQ0QnB0dGExTTQ=
 +
 +dn: cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ organizationalRole
 +objectClass:​ simpleSecurityObject
 +cn: pesquisador
 +userPassword::​ e1NTSEF9MWhTV2FiLzZ3STNzV1lYRW91WVAxc1gxWHNGc0FFQng=
 +</​sxh>​
 +
 + Agora vamos consultar com um usuário normal ​
 +<sxh bash>
 +ldapsearch -xLLL -D uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br -W
 +Enter LDAP Password: ​
 +dn: dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ dcObject
 +objectClass:​ organization
 +o: douglasqsantos.com.br
 +dc: douglas
 +
 +dn: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: admin
 +description:​ LDAP administrator
 +
 +dn: ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Usuarios
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Grupos
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Maquinas,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Maquinas
 +objectClass:​ organizationalUnit
 +
 +dn: cn=ti-admin,​ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +cn: ti-admin
 +gidNumber: 20000
 +objectClass:​ top
 +objectClass:​ posixGroup
 +
 +dn: uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +uid: douglas
 +uidNumber: 20000
 +gidNumber: 20000
 +cn: Douglas
 +sn: Santos
 +objectClass:​ top
 +objectClass:​ person
 +objectClass:​ posixAccount
 +objectClass:​ shadowAccount
 +loginShell: /bin/bash
 +homeDirectory:​ /​home/​douglas
 +userPassword::​ e1NTSEF9YVJDR3R0dytUTVcwd3AyNTJmSnJ4VWQ0QnB0dGExTTQ=
 +
 +dn: cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ organizationalRole
 +objectClass:​ simpleSecurityObject
 +cn: pesquisador
 +</​sxh>​
 +
 + Como pode ser notado o usuário somente consegue visualizar a sua propria senha 
 +
 + Agora vamos configurar o servidor LDAP Master para trabalhar como cliente é a mesma configuração para qualquer outro cliente por enquanto ​
 +
 +Vamos acertar algumas variáveis do ambiente ​
 +<sxh bash>
 +export DEBIAN_PRIORITY=critical
 +export DEBIAN_FRONTEND=noninteractive
 +</​sxh>​
 +
 + Agora vamos instalar os pacotes para o cliente LDAP 
 +<sxh bash>
 +aptitude install libnss-ldap libpam-ldap ldap-utils -y
 +</​sxh>​
 +
 + Agora vamos voltar as variáveis ao normal ​
 +<sxh bash>
 +unset DEBIAN_PRIORITY
 +unset DEBIAN_FRONTEND
 +</​sxh>​
 +
 + Agora vamos acertar alguns arquivos de configuração ​
 +
 +Vamos fazer backup do arquivo nsswitch.conf que controla aonde vai ser consultado os usuários senha e grupos ​
 +<sxh bash>
 +cp /​etc/​nsswitch.conf{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos modificar ele 
 +<sxh bash>
 +vim /​etc/​nsswitch.conf
 +passwd: ​        ​compat ldap
 +group: ​         compat ldap
 +shadow: ​        ​compat ldap
 +
 +hosts: ​         files dns
 +networks: ​      files
 +
 +protocols: ​     db files
 +services: ​      db files
 +ethers: ​        db files
 +rpc:            db files
 +
 +netgroup: ​      ldap
 +</​sxh>​
 +
 + Agora vamos acertar os arquivos de controle do ldap 
 +
 + Vamos fazer backup do libnss-ldap.conf ​
 +<sxh bash>
 +cp /​etc/​libnss-ldap.conf{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos ajudar a sua configuração deixe ele como abaixo
 +<sxh bash>
 +vim /​etc/​libnss-ldap.conf
 +#qual base do ldap vai ser consultada
 +base dc=douglasqsantos,​dc=com,​dc=br
 +#qual o caminho para o servidor LDAP
 +uri ldap://​ldap1.douglasqsantos.com.br/​
 +#qual versão do protocolo que vamos estar utilizando
 +ldap_version 3
 +#usuário que vai ser utilizado para efetuar as consultas na base LDAP
 +binddn cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +#senha para o usuário poder efetuar as consultas
 +bindpw 123
 +</​sxh>​
 +
 + Agora vamos acertar o arquivo de controle entre a PAM e o LDAP  ​
 +
 + Vamos fazer backup dele 
 +<sxh bash>
 +cp /​etc/​pam_ldap.conf{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos alterar ele deixe ele como abaixo ​
 +<sxh bash>
 +vim /​etc/​pam_ldap.conf
 +#qual base do ldap que vai ser consultada
 +base dc=douglasqsantos,​dc=com,​dc=br
 +#qual o caminho para o servidor ldap
 +uri ldap://​ldap1.douglasqsantos.com.br/​
 +#qual o a versão do protocolo que vai ser utilizada
 +ldap_version 3
 +#qual o tipo de criptografia utilizada pela pam
 +pam_password crypt
 +#usuário que vai efetuar as pesquisas na base LDAP
 +binddn cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +#senha o usuário que vai efetuar as pesquisas
 +bindpw 123
 +</​sxh>​
 +
 + Agora vamos acertar a configuração da PAM 
 +
 + Vamos fazer backup dos arquivos primeiro ​
 +<sxh bash>
 +cp -Rfa /​etc/​pam.d{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos acertar o arquivo de controle de sessão deixe o arquivo como abaixo ​
 +<sxh bash>
 +vim /​etc/​pam.d/​common-session
 +session [default=1] ​                    ​pam_permit.so
 +session requisite ​                      ​pam_deny.so
 +session required ​                       pam_permit.so
 +session required ​                       pam_unix.so
 +session optional ​                       pam_ldap.so
 +session optional pam_mkhomedir.so skel=/​etc/​skel umask=077
 +</​sxh>​
 +
 + Vamos acertar o arquivo de controle de senha deixe o arquivo como abaixo ​
 +<sxh bash>
 +vim /​etc/​pam.d/​common-password
 +password ​       [success=2 default=ignore] ​     pam_unix.so obscure sha512
 +password ​       [success=1 user_unknown=ignore default=die] ​    ​pam_ldap.so try_first_pass
 +password ​       requisite ​                      ​pam_deny.so
 +password ​       required ​                       pam_permit.so
 +</​sxh>​
 +
 + Vamos acertar agora o arquivo de controle do ssh deixe ele como abaixo ​
 +<sxh bash>
 +vim /​etc/​pam.d/​sshd
 +auth       ​required ​    ​pam_env.so # [1]
 +auth       ​required ​    ​pam_env.so envfile=/​etc/​default/​locale
 +@include common-auth
 +account ​   required ​    ​pam_nologin.so
 +#A linha abaixo para limitarmos o acesso ao ssh dessa maquina somente aos usuarios do grupo ti-admin ou root
 +account ​   sufficient ​  ​pam_succeed_if.so user ingroup root
 +account ​   requisite ​   pam_succeed_if.so user ingroup ti-admin
 +@include common-account
 +@include common-session
 +session ​   optional ​    ​pam_motd.so # [1]
 +session ​   optional ​    ​pam_mail.so standard noenv # [1]
 +session ​   required ​    ​pam_limits.so
 +@include common-password
 +</​sxh>​
 +
 + Agora vamos acertar o arquivo de login 
 +<sxh bash>
 +vim /​etc/​pam.d/​login
 +auth       ​optional ​  ​pam_faildelay.so ​ delay=3000000
 +auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so
 +auth       ​requisite ​ pam_nologin.so
 +#A linha abaixo para limitarmos o acesso ao ssh dessa maquina somente aos usuarios do grupo ti-admin ou root
 +account ​   sufficient ​  ​pam_succeed_if.so user ingroup root
 +account ​   requisite ​   pam_succeed_if.so user ingroup ti-admin
 +session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
 +session ​      ​required ​  ​pam_env.so readenv=1
 +session ​      ​required ​  ​pam_env.so readenv=1 envfile=/​etc/​default/​locale
 +@include ​  ​common-auth
 +auth       ​optional ​  ​pam_group.so
 +session ​   required ​  ​pam_limits.so
 +session ​   optional ​  ​pam_lastlog.so
 +session ​   optional ​  ​pam_motd.so
 +session ​   optional ​  ​pam_mail.so standard
 +@include common-account
 +@include common-session
 +@include common-password
 +session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
 +</​sxh>​
 +
 + Como pode ser notado estou limitando o acesso somente do root ou do grupo ti-admin para efetuar login ou acesso ao ssh ao servidor LDAP 
 +
 + Agora vamos reiniciar o serviço nscd 
 +<sxh bash>
 +/​etc/​init.d/​nscd restart
 +</​sxh>​
 +
 + Agora vamos testar a consulta em nossa base novamente ​
 +<sxh bash>
 +ldapsearch -xLLL -D cn=admin,​dc=douglasqsantos,​dc=com,​dc=br -W
 +Enter LDAP Password: ​
 +dn: dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ dcObject
 +objectClass:​ organization
 +o: douglasqsantos.com.br
 +dc: douglas
 +
 +dn: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: admin
 +description:​ LDAP administrator
 +userPassword::​ e1NTSEF9WHYxbmxYMndxZ3h3VmFMVGU3cXRWL0pidG9NZjZYaUw=
 +
 +dn: ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Usuarios
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Grupos
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Maquinas,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Maquinas
 +objectClass:​ organizationalUnit
 +
 +dn: cn=ti-admin,​ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +cn: ti-admin
 +gidNumber: 20000
 +objectClass:​ top
 +objectClass:​ posixGroup
 +
 +dn: uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +uid: douglas
 +uidNumber: 20000
 +gidNumber: 20000
 +cn: Douglas
 +sn: Santos
 +objectClass:​ top
 +objectClass:​ person
 +objectClass:​ posixAccount
 +objectClass:​ shadowAccount
 +loginShell: /bin/bash
 +homeDirectory:​ /​home/​douglas
 +userPassword::​ e1NTSEF9YVJDR3R0dytUTVcwd3AyNTJmSnJ4VWQ0QnB0dGExTTQ=
 +
 +dn: cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ organizationalRole
 +objectClass:​ simpleSecurityObject
 +cn: pesquisador
 +userPassword::​ e1NTSEF9MWhTV2FiLzZ3STNzV1lYRW91WVAxc1gxWHNGc0FFQng=
 +</​sxh>​
 +
 + Agora vamos adicionar o usuário douglas ao grupo sudo 
 +<sxh bash>
 +gpasswd -a douglas sudo
 +</​sxh>​
 +
 + Agora vamos logar com ele para efetuar um teste 
 +<sxh bash>
 +su - douglas
 +Criando o diretório '/​home/​douglas'​.
 +</​sxh>​
 +
 + Como pode ser notado o sistema achou o nosso usuário na base e já criou o diretório home 
 +
 + Agora vamos ver se é o usuário certo agora 
 +<sxh bash>
 +whoami ​
 +douglas
 +</​sxh>​
 +
 + Agora vamos testar o sudo 
 +<sxh bash>
 +[10:53:57] douglas@ldap1 [~] $ sudo su -
 +
 +We trust you have received the usual lecture from the local System
 +Administrator. It usually boils down to these three things:
 +
 +    #1) Respect the privacy of others.
 +    #2) Think before you type.
 +    #3) With great power comes great responsibility.
 +
 +[sudo] password for douglas: ​
 +[10:54:00] root@ldap1 [~] # 
 +</​sxh>​
 +
 + O usuário esta ok 
 +
 + Agora vamos configurar o Ldap-Account-Manager para podermos gerenciar o nosso LDAP pela Web 
 +
 + Vamos instalar alguns pacotes necessário ​
 +<sxh bash>
 +aptitude install ldap-account-manager php5-ldap php5-gd php-fpdf libjs-jquery libjs-jquery-ui debconf php5-mcrypt ldap-account-manager-lamdaemon -y
 +</​sxh>​
 +
 + Agora vamos acertar a configuração do lam 
 +<sxh bash>
 +vim /​usr/​share/​ldap-account-manager/​config/​lam.conf
 +[...]
 +serverURL: ldap://​ldap1.douglasqsantos.com.br
 +[...]
 +admins: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +[...]
 +treesuffix: dc=douglasqsantos,​dc=com,​dc=br
 +[...]
 +defaultLanguage:​ pt_BR.utf8:​UTF-8:​Português (Brasil)
 +[...]
 +types: suffix_user:​ ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +[...]
 +types: suffix_group:​ ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +[...]
 +types: suffix_host:​ ou=Maquinas,​dc=douglasqsantos,​dc=com,​dc=br
 +[...]
 +types: suffix_smbDomain:​ dc=douglasqsantos,​dc=com,​dc=br
 +</​sxh>​
 +
 + Agora para acessar o LAM http://​ip_servidor/​lam ​ informe a senha do admin e se divirta ​
 +
 +
 +**Opcional:​** Agora vamos acertar o LAM para trabalhar com HTTPS 
 +
 + Vamos gerar as chaves para o https 
 +
 + Vamos preparar o diretório para receber as chaves ​
 +<sxh bash>
 +mkdir -p /​etc/​ssl/​apache
 +cd /​etc/​ssl/​apache
 +</​sxh>​
 +
 + Agora vamos gerar a key 
 +<sxh bash>
 +openssl genrsa -des3 -out server.key 1024
 +Generating RSA private key, 1024 bit long modulus
 +..++++++
 +.++++++
 +e is 65537 (0x10001)
 +Enter pass phrase for server.key:
 +Verifying - Enter pass phrase for server.key:
 +</​sxh>​
 +
 + Agora vamos gerar o csr 
 +<sxh bash>
 +openssl req -new -key server.key -out server.csr
 +Enter pass phrase for server.key:
 +You are about to be asked to enter information that will be incorporated
 +into your certificate request.
 +What you are about to enter is what is called a Distinguished Name or a DN.
 +There are quite a few fields but you can leave some blank
 +For some fields there will be a default value,
 +If you enter '​.',​ the field will be left blank.
 +-----
 +Country Name (2 letter code) [AU]:BR
 +State or Province Name (full name) [Some-State]:​Parana
 +Locality Name (eg, city) []:Curitiba
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:​Douglas
 +Organizational Unit Name (eg, section) []:Douglas
 +Common Name (eg, YOUR name) []:​ldap1.douglasqsantos.com.br
 +Email Address []:​douglas@douglasqsantos.com.br
 +
 +Please enter the following '​extra'​ attributes
 +to be sent with your certificate request
 +A challenge password []:
 +An optional company name []:Douglas
 +</​sxh>​
 +
 + Agora vamos assinar o nosso certificado ​
 +<sxh bash>
 +openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
 +Signature ok
 +subject=/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=Douglas/​CN=ldap1.douglasqsantos.com.br/​emailAddress=douglas@douglasqsantos.com.br
 +Getting Private key
 +Enter pass phrase for server.key:
 +</​sxh>​
 +
 + Agora vamos acertar as permissões das chave 
 +<sxh bash>
 +chmod 0400 server.*
 +cp server.key server.key.orig
 +</​sxh>​
 +
 + Agora vamos tirar a senha do certificado ​
 +<sxh bash>
 +openssl rsa -in server.key.orig -out server.key
 +Enter pass phrase for server.key.orig:​
 +writing RSA key
 +</​sxh>​
 +
 +Agora vamos acertar as permissões novamente ​
 +<sxh bash>
 +chmod 0400 /​etc/​ssl/​apache/​*
 +</​sxh>​
 +
 + Agora vamos acertar o virtual host para o LAM 
 +<sxh apache>
 +vim /​etc/​apache2/​sites-available/​lam
 +<​VirtualHost *:443>
 +        ServerAdmin webmaster@douglasqsantos.com.br
 +        ServerName lam.douglasqsantos.com.br
 +        DocumentRoot "/​usr/​share/​ldap-account-manager"​
 +        <​Directory /​usr/​share/​ldap-account-manager>​
 +                  Options +FollowSymLinks
 +                  AllowOverride All
 +                  Order allow,deny
 +                  Allow from all
 +                  DirectoryIndex index.html
 +        </​Directory>​
 +
 +        <​Directory /​var/​lib/​ldap-account-manager/​tmp>​
 +                  Options -Indexes
 +        </​Directory>​
 +
 +        <​Directory /​var/​lib/​ldap-account-manager/​sess>​
 +                  Options -Indexes
 +                  Order allow,deny
 +                  Deny from all
 +        </​Directory>​
 +
 +        <​Directory /​var/​lib/​ldap-account-manager/​config>​
 +                  Options -Indexes
 +                  Order allow,deny
 +                  Deny from all
 +        </​Directory>​
 +
 +        <​Directory /​usr/​share/​ldap-account-manager/​lib>​
 +                  Options -Indexes
 +                  Order allow,deny
 +                  Deny from all
 +        </​Directory>​
 +
 +        <​Directory /​usr/​share/​ldap-account-manager/​help>​
 +                  Options -Indexes
 +                  Order allow,deny
 +                  Deny from all
 +        </​Directory>​
 +        <​Directory /​usr/​share/​ldap-account-manager/​locale>​
 +                  Options -Indexes
 +                  Order allow,deny
 +                  Deny from all
 +        </​Directory>​
 +
 +         <​IfModule mod_php5.c>​
 +         ​AddType application/​x-httpd-php .php
 +                 ​php_flag expose_php Off
 +                 ​php_flag allow_url_fopen Off
 +                 ​php_flag allow_url_include Off
 +                 ​php_flag magic_quotes_gpc Off
 +                 ​php_flag register_globals Off
 +                 ​php_flag disable_functions show_source
 +                 ​php_flag disable_functions system
 +                 ​php_flag disable_functions shell_exec
 +                 ​php_flag disable_functions passthru
 +                 ​php_flag disable_functions exec
 +                 ​php_flag disable_functions popen
 +                 ​php_flag disable_functions proc_open
 +                 ​php_flag disable_functions symlink
 +         </​IfModule>​
 +        CustomLog /​var/​log/​apache2/​lam.access.log combined
 +        ErrorLog /​var/​log/​apache2/​lam.error.log
 +        LogLevel warn
 +        SSLEngine on
 +        SSLCipherSuite ALL:​!ADH:​!EXPORT56:​RC4+RSA:​+HIGH:​+MEDIUM:​+LOW:​+SSLv2:​+EXP:​+eNULL
 +        SSLCertificateFile "/​etc/​ssl/​apache/​server.crt"​
 +        SSLCertificateKeyFile "/​etc/​ssl/​apache/​server.key"​
 +        <​FilesMatch "​\.(cgi|shtml|phtml|php)$">​
 +                 ​SSLOptions +StdEnvVars
 +        </​FilesMatch>​
 +                 ​BrowserMatch "​.*MSIE.*"​ \
 +                 ​nokeepalive ssl-unclean-shutdown \
 +                 ​downgrade-1.0 force-response-1.0
 +        ServerSignature Off
 +</​VirtualHost>​
 +</​sxh>​
 +
 + Agora vamos configurar a porta que o nosso virtual host vai estar escutando ​
 +<sxh bash>
 +vim /​etc/​apache2/​ports.conf
 +[...]
 +NameVirtualHost *:443
 +#​NameVirtualHost *:80
 +#Listen 80
 +</​sxh>​
 +
 +Vamos carregar agora o módulo ssl para o apache ​
 +<sxh bash>
 +a2enmod ssl
 +</​sxh>​
 +
 + Agora vamos desabilitar os dois sites padrões do apache ​
 +<sxh bash>
 +a2dissite default
 +a2dissite default-ssl
 +</​sxh>​
 +
 +Agora vamos habilitar o site do lam 
 +<sxh bash>
 +a2ensite lam
 +</​sxh>​
 +
 + Agora vamos reiniciar o apache ​
 +<sxh bash>
 +/​etc/​init.d/​apache2 restart
 +</​sxh>​
 +
 + ​Senão foi adicionada uma entrada no DNS pode ser utilizado a configuração do /etc/hosts no cliente ​
 +<sxh bash>
 +[...]
 +ip_servidor ​  ​lam.douglasqsantos.com.br lam
 +</​sxh>​
 +
 + Agora podemos acessar o nosso lam em https://​lam.douglasqsantos.com.br ​
 +
 + O nosso LDAP até o momento não esta trabalhando com TLS agora vamos habilitar ​
 +
 + Vamos instalar o gnutls-bin para gerarmos as chaves ​
 +<sxh bash>
 +apt-get install gnutls-bin -y
 +</​sxh>​
 +
 + Agora vamos preparar o diretório para receber as chaves do TLS 
 +<sxh bash>
 +mkdir /​etc/​ldap/​certs
 +cd /​etc/​ldap/​certs
 +</​sxh>​
 +
 +Agora vamos gerar a chave ca 
 +<sxh bash>
 +certtool --generate-privkey --outfile ca.key
 +Generating a 2048 bit RSA private key...
 +</​sxh>​
 +
 + Agora vamos auto assinar a nossa chave 
 +<sxh bash>
 +certtool --generate-self-signed --load-privkey ca.key --outfile ca.pem
 +Generating a self signed certificate...
 +Please enter the details of the certificate'​s distinguished name. Just press enter to ignore a field.
 +Country name (2 chars): BR
 +Organization name: Douglas
 +Organizational unit name: Douglas
 +Locality name: Curitiba
 +State or province name: Parana
 +Common name: ldap1.douglasqsantos.com.br
 +UID: 
 +This field should not be used in new certificates.
 +E-mail: douglas@douglasqsantos.com.br
 +Enter the certificate'​s serial number in decimal (default: 1320328622): ​
 +
 +
 +Activation/​Expiration time.
 +3650
 +
 +
 +Extensions.
 +Does the certificate belong to an authority? (y/N): n
 +Is this a TLS web client certificate?​ (y/N): n
 +Is this also a TLS web server certificate?​ (y/N): n
 +Enter the e-mail of the subject of the certificate: ​
 +Will the certificate be used for signing (required for TLS)? (y/N): n
 +Will the certificate be used for encryption (not required for TLS)? (y/N): n
 +Enter the URI of the CRL distribution point: ​
 +X.509 Certificate Information:​
 +  Version: 3
 +  Serial Number (hex): 4eb29dae
 +  Validity:
 +    Not Before: Thu Nov 03 13:57:04 UTC 2011
 +    Not After: Sun Oct 31 13:57:14 UTC 2021
 +  Subject: C=BR,​O=Douglas,​OU=Douglas,​L=Curitiba,​ST=Parana,​CN=ldap1.douglasqsantos.com.br,​EMAIL=douglas@douglasqsantos.com.br
 +  Subject Public Key Algorithm: RSA
 +    Modulus (bits 2048):
 +      de:​c0:​84:​03:​97:​a5:​60:​4c:​89:​6b:​1e:​69:​e2:​2b:​24:​9a
 +      26:​87:​79:​51:​6c:​86:​29:​44:​73:​49:​f4:​d3:​c0:​82:​79:​24
 +      d9:​cb:​b4:​73:​f9:​eb:​2f:​08:​f5:​0e:​88:​1e:​84:​0b:​41:​9f
 +      68:​fb:​52:​06:​04:​f4:​89:​b2:​e1:​7a:​fe:​b6:​6f:​83:​9a:​b3
 +      e8:​ca:​5f:​89:​d8:​15:​34:​03:​58:​38:​81:​50:​1c:​42:​6f:​0d
 +      29:​42:​76:​18:​e7:​ed:​fa:​2d:​af:​71:​48:​bf:​53:​fe:​02:​fb
 +      a3:​45:​c2:​6a:​61:​ee:​b5:​17:​9d:​bc:​d5:​ce:​45:​9a:​50:​7b
 +      5e:​e6:​de:​c1:​ce:​f6:​cf:​cb:​2a:​8d:​00:​60:​85:​d5:​fa:​cd
 +      00:​05:​06:​a6:​8a:​4d:​a2:​58:​76:​fd:​29:​f9:​9f:​4d:​d0:​44
 +      77:​fa:​a8:​f6:​91:​db:​83:​d0:​47:​d2:​75:​8d:​7c:​0d:​b2:​f3
 +      63:​37:​6a:​f1:​d7:​74:​4f:​a8:​bd:​13:​a1:​ac:​f3:​c0:​9c:​4b
 +      2c:​4c:​9e:​97:​6c:​b7:​c8:​c7:​7e:​5a:​28:​2b:​0e:​1e:​e7:​4f
 +      13:​fe:​e9:​59:​df:​60:​25:​5b:​91:​cd:​d1:​8c:​5b:​1d:​46:​ac
 +      d3:​52:​1d:​aa:​03:​ee:​35:​f5:​61:​80:​30:​a7:​c4:​c7:​ea:​3d
 +      6b:​44:​cf:​b5:​05:​0c:​08:​d9:​84:​cd:​01:​21:​2f:​f5:​04:​02
 +      31:​e8:​1f:​95:​51:​e3:​a8:​19:​82:​aa:​45:​be:​4e:​e1:​32:​6b
 +    Exponent (bits 24):
 +      01:00:01
 +  Extensions:
 +    Basic Constraints (critical):
 +      Certificate Authority (CA): FALSE
 +    Subject Key Identifier (not critical):
 +      c7356a56c8bb335e0cf3dd23632c91b3aa4c1c9b
 +Other Information:​
 +  Public Key Id:
 +    c7356a56c8bb335e0cf3dd23632c91b3aa4c1c9b
 +
 +Is the above information ok? (Y/N): y
 +
 +
 +Signing certificate...
 +</​sxh>​
 +
 + Agora vamos criar um CA para assinar a chave para o nosso servidor ​
 +<sxh bash>
 +certtool --generate-privkey --outfile server.key
 +Generating a 2048 bit RSA private key...
 +</​sxh>​
 +
 + Agora vamos gerar o certificado dessa chave 
 +<sxh bash>
 +certtool --generate-certificate --load-privkey server.key --outfile server.pem --load-ca-certificate ca.pem --load-ca-privkey ca.key
 +Generating a signed certificate...
 +Please enter the details of the certificate'​s distinguished name. Just press enter to ignore a field.
 +Country name (2 chars): BR
 +Organization name: Douglas
 +Organizational unit name: Douglas
 +Locality name: Curitiba
 +State or province name: Parana
 +Common name: ldap1.douglasqsantos.com.br
 +UID: 
 +This field should not be used in new certificates.
 +E-mail: douglas@douglasqsantos.com.br
 +Enter the certificate'​s serial number in decimal (default: 1320328847): ​
 +
 +
 +Activation/​Expiration time.
 +The certificate will expire in (days): 3650
 +
 +
 +Extensions.
 +Does the certificate belong to an authority? (y/N): n
 +Is this a TLS web client certificate?​ (y/N): n
 +Is this also a TLS web server certificate?​ (y/N): n
 +Enter the e-mail of the subject of the certificate:​ n
 +Will the certificate be used for signing (required for TLS)? (y/N): n
 +Will the certificate be used for encryption (not required for TLS)? (y/N): n
 +X.509 Certificate Information:​
 +  Version: 3
 +  Serial Number (hex): 4eb29e8f
 +  Validity:
 +    Not Before: Thu Nov 03 14:00:48 UTC 2011
 +    Not After: Sun Oct 31 14:00:52 UTC 2021
 +  Subject: C=BR,​O=Douglas,​OU=Douglas,​L=Curitiba,​ST=Parana,​CN=ldap1.douglasqsantos.com.br,​EMAIL=douglas@douglasqsantos.com.br
 +  Subject Public Key Algorithm: RSA
 +    Modulus (bits 2048):
 +      a9:​6a:​8f:​54:​42:​31:​0a:​2c:​dc:​77:​11:​1a:​63:​59:​cc:​2b
 +      da:​d4:​61:​bf:​2d:​4f:​7b:​20:​bb:​8f:​d4:​ea:​e7:​cd:​e6:​1f
 +      cb:​f4:​9d:​04:​28:​84:​7d:​0f:​24:​b3:​7a:​82:​0c:​af:​5d:​b9
 +      aa:​d5:​6b:​5b:​61:​43:​ee:​f6:​40:​bf:​f4:​e9:​49:​ae:​e6:​fe
 +      7a:​81:​b6:​d9:​a7:​c9:​3c:​a0:​68:​bb:​0c:​2f:​ba:​50:​58:​8e
 +      cd:​49:​fe:​76:​cb:​ab:​b9:​57:​2d:​ce:​4c:​c5:​81:​b9:​ef:​18
 +      a1:​73:​c9:​9a:​29:​7b:​9c:​0b:​7a:​01:​da:​20:​2f:​08:​8b:​5d
 +      37:​d3:​50:​1d:​a9:​09:​f2:​bb:​be:​82:​85:​d9:​2c:​59:​59:​3b
 +      46:​30:​1d:​48:​4a:​42:​bc:​3b:​47:​da:​f3:​01:​d8:​e5:​ef:​6b
 +      71:​f2:​dc:​5a:​56:​12:​f1:​3f:​d0:​9d:​87:​31:​b4:​46:​81:​bb
 +      19:​9a:​f7:​6c:​94:​6e:​62:​d1:​22:​30:​eb:​88:​6c:​c0:​a9:​ae
 +      1d:​a7:​e5:​c6:​b1:​37:​4c:​4a:​6c:​31:​e9:​16:​9a:​44:​63:​64
 +      93:​52:​8d:​dd:​9b:​9d:​78:​36:​45:​83:​1a:​8e:​98:​04:​07:​93
 +      24:​c2:​a5:​7d:​e8:​7a:​fe:​e2:​f1:​d9:​26:​f3:​37:​6f:​da:​38
 +      3b:​2d:​b7:​2d:​00:​45:​92:​c5:​71:​09:​21:​eb:​6c:​01:​85:​ea
 +      73:​5e:​e1:​f2:​0d:​57:​80:​9d:​f3:​e7:​3c:​9a:​06:​d3:​40:​b1
 +    Exponent (bits 24):
 +      01:00:01
 +  Extensions:
 +    Basic Constraints (critical):
 +      Certificate Authority (CA): FALSE
 +    Subject Alternative Name (not critical):
 +      RFC822name: n
 +    Subject Key Identifier (not critical):
 +      fd2eba740dba64fdfbb132aafe3796668bd2347e
 +    Authority Key Identifier (not critical):
 +      c7356a56c8bb335e0cf3dd23632c91b3aa4c1c9b
 +Other Information:​
 +  Public Key Id:
 +    fd2eba740dba64fdfbb132aafe3796668bd2347e
 +
 +Is the above information ok? (Y/N): y
 +
 +
 +Signing certificate...
 +</​sxh>​
 +
 + Agora vamos acertar as permissões das chaves ​
 +<sxh bash>
 +chmod 600 /​etc/​ldap/​certs/​*
 +chown openldap:​openldap /​etc/​ldap/​certs/​*
 +</​sxh>​
 +
 + Agora vamos criar o arquivo para que o LDAP reconheça as chaves e trabalhe com TLS 
 +<sxh bash>
 +vim ~/​tls_ldap.ldif
 +dn: cn=config
 +add: olcTLSCACertificateFile
 +olcTLSCACertificateFile:​ /​etc/​ldap/​certs/​ca.pem
 +-
 +add: olcTLSCertificateFile
 +olcTLSCertificateFile:​ /​etc/​ldap/​certs/​server.pem
 +-
 +add: olcTLSCertificateKeyFile
 +olcTLSCertificateKeyFile:​ /​etc/​ldap/​certs/​server.key
 +</​sxh>​
 +
 + Agora vamos importar as chaves ​
 +<sxh bash>
 +ldapmodify -QY EXTERNAL -H ldapi:// -f ~/​tls_ldap.ldif
 +modifying entry "​cn=config"​
 +</​sxh>​
 +
 + Agora vamos acertar o arquivo de inicialização do LDAP 
 +<sxh bash>
 +vim /​etc/​default/​slapd
 +[...]
 +SLAPD_SERVICES="​ldap:///​ ldaps:/// ldapi:///"​
 +</​sxh>​
 +
 + Agora vamos acertar a perte cliente para que possamos utilizar a conexão com TLS 
 +
 + Vamos fazer backup ​
 +<sxh bash>
 +cp -Rfa /​etc/​ldap/​ldap.conf{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos editar o arquivo ​
 +<sxh bash>
 +vim /​etc/​ldap/​ldap.conf
 +BASE dc=douglasqsantos,​dc=com,​dc=br
 +URI ldaps://​ldap1.douglasqsantos.com.br/​
 +TLS_CACERT /​etc/​ldap/​certs/​ca.pem
 +TLS_REQCERT allow
 +</​sxh>​
 +
 +Agora acertar o arquivo de controle da pam, mas primeiro vamos fazer backup do arquivo de configuração ​
 +<sxh bash>
 +cp /​etc/​pam_ldap.conf{,​.bkp2}
 +</​sxh>​
 +
 + Vamos modificar o arquivo ​
 +<sxh bash>
 +vim /​etc/​pam_ldap.conf
 +base dc=douglasqsantos,​dc=com,​dc=br
 +uri ldaps://​ldap1.douglasqsantos.com.br/​
 +ldap_version 3
 +binddn cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +bindpw 123
 +pam_password crypt
 +ssl on
 +sslpath /​etc/​ldap/​certs
 +</​sxh>​
 +
 +Vamos fazer o backup do arquivo ​
 +<sxh bash>
 +cp /​etc/​libnss-ldap.conf{,​.bkp2}
 +</​sxh>​
 +
 + Agora vamos acertar o arquivo ​
 +<sxh bash>
 +vim /​etc/​libnss-ldap.conf
 +base dc=douglasqsantos,​dc=com,​dc=br
 +uri ldaps://​ldap1.douglasqsantos.com.br/​
 +ldap_version 3
 +binddn cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +bindpw 123
 +ssl on
 +sslpath /​etc/​ldap/​certs
 +</​sxh>​
 +
 + Agora vamos reiniciar os serviços necessários ​
 +<sxh bash>
 +/​etc/​init.d/​slapd restart
 +/​etc/​init.d/​nscd restart
 +</​sxh>​
 +
 + Agora vamos verificar os serviços rodando em nosso servidor ​
 +<sxh bash>
 +nmap -sS localhost -T4
 +
 +Starting Nmap 5.00 ( http://​nmap.org ) at 2011-11-03 12:24 BRST
 +Interesting ports on localhost (127.0.0.1):​
 +Not shown: 994 closed ports
 +PORT    STATE SERVICE
 +22/​tcp ​ open  ssh
 +25/​tcp ​ open  smtp
 +111/tcp open  rpcbind
 +389/tcp open  ldap
 +443/tcp open  https
 +636/tcp open  ldapssl
 +
 +Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
 +</​sxh>​
 +
 + Vamos agora efetuar uma consulta em nossa base LDAP 
 +<sxh bash>
 +ldapsearch -xLLL -D cn=admin,​dc=douglasqsantos,​dc=com,​dc=br -W 
 +Enter LDAP Password: ​
 +dn: dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ dcObject
 +objectClass:​ organization
 +o: douglasqsantos.com.br
 +dc: douglas
 +
 +dn: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: admin
 +description:​ LDAP administrator
 +userPassword::​ e1NTSEF9WHYxbmxYMndxZ3h3VmFMVGU3cXRWL0pidG9NZjZYaUw=
 +
 +dn: ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Usuarios
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Grupos
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Maquinas,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Maquinas
 +objectClass:​ organizationalUnit
 +
 +dn: cn=ti-admin,​ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +cn: ti-admin
 +gidNumber: 20000
 +objectClass:​ top
 +objectClass:​ posixGroup
 +
 +dn: uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +uid: douglas
 +uidNumber: 20000
 +gidNumber: 20000
 +cn: Douglas
 +sn: Santos
 +objectClass:​ top
 +objectClass:​ person
 +objectClass:​ posixAccount
 +objectClass:​ shadowAccount
 +loginShell: /bin/bash
 +homeDirectory:​ /​home/​douglas
 +userPassword::​ e1NTSEF9YVJDR3R0dytUTVcwd3AyNTJmSnJ4VWQ0QnB0dGExTTQ=
 +
 +dn: cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ organizationalRole
 +objectClass:​ simpleSecurityObject
 +cn: pesquisador
 +userPassword::​ e1NTSEF9MWhTV2FiLzZ3STNzV1lYRW91WVAxc1gxWHNGc0FFQng=
 +</​sxh>​
 +
 + Agora vamos ver o que apareceu em nossos logs 
 +<sxh bash>
 +Nov  3 12:27:11 ldap1 slapd[3549]:​ conn=1005 fd=20 ACCEPT from IP=10.0.0.25:​49168 (IP=0.0.0.0:​636)
 +Nov  3 12:27:11 ldap1 slapd[3549]:​ conn=1005 fd=20 TLS established tls_ssf=128 ssf=128
 +Nov  3 12:27:11 ldap1 slapd[3549]:​ conn=1005 op=0 BIND dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ method=128
 +Nov  3 12:27:11 ldap1 slapd[3549]:​ conn=1005 op=0 BIND dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ mech=SIMPLE ssf=0
 +Nov  3 12:27:11 ldap1 slapd[3549]:​ conn=1005 op=0 RESULT tag=97 err=0 text=
 +Nov  3 12:27:11 ldap1 slapd[3549]:​ conn=1005 op=1 SRCH base="​dc=douglasqsantos,​dc=com,​dc=br"​ scope=2 deref=0 filter="​(objectClass=*)"​
 +Nov  3 12:27:11 ldap1 slapd[3549]:​ conn=1005 op=1 SEARCH RESULT tag=101 err=0 nentries=8 text=
 +Nov  3 12:27:11 ldap1 slapd[3549]:​ conn=1005 op=2 UNBIND
 +Nov  3 12:27:11 ldap1 slapd[3549]:​ conn=1005 fd=20 closed
 +</​sxh>​
 +
 + Como pode ser notado a nossa consulta foi feita na porta 636 com tls então estamos com o ldap OK. 
 +
 +
 + Agora vamos configurar o servidor LDAP slave 
 +
 + Agora vamos configurar um cliente qualquer não sendo o nosso servidor LDAP slave para trabalhar utilizando a autenticação no LDAP utilizando TLS 
 +
 + Vamos acertar as variáveis do ambiente ​
 +
 + Nós vamos ter que compilar o ldap com um patch para ele trabalhar corretamente com a replicação ​
 +
 + Vamos instalar alguns pacotes necessários ​
 +<sxh bash>
 +aptitude install dpkg-dev devscripts -y
 +</​sxh>​
 +
 + Vamos agora acessar o /usr/src e obter o nosso ldap 
 +<sxh bash>
 +cd /usr/src
 +apt-get source openldap
 +</​sxh>​
 +
 + Agora vamos instalar as dependências para o nosso LDAP 
 +<sxh bash>
 +apt-get build-dep openldap -y
 +</​sxh>​
 +
 + Agora vamos obter os patchs e vamos aplicar eles 
 +<sxh bash>
 +wget -c ftp://​ftp.openldap.org/​incoming/​pierangelo-masarati-2010-04-29-chain.1.patch
 +patch openldap-2.4.23/​servers/​slapd/​back-ldap/​chain.c < pierangelo-masarati-2010-04-29-chain.1.patch
 +patching file openldap-2.4.23/​servers/​slapd/​back-ldap/​chain.c
 +Hunk #1 succeeded at 1137 (offset -3 lines).
 +Hunk #2 succeeded at 1148 (offset -3 lines).
 +</​sxh>​
 +
 + Agora vamos mudar o suffix do nosso pacote ​
 +<sxh bash>
 +cd openldap-2.4.23/​
 +dch -l patched '​Including a patch by Pierangelo Masarati, 2010-04-29.'​
 +debuild -us -uc 
 +</​sxh>​
 +
 +
 + Após a compilação vamos ter alguns pacotes ​
 +<sxh bash>
 +cd ..
 +ldap-utils_2.4.23-7patched1_i386.deb
 +libldap-2.4-2-dbg_2.4.23-7patched1_i386.deb
 +libldap-2.4-2_2.4.23-7patched1_i386.deb
 +libldap2-dev_2.4.23-7patched1_i386.deb
 +slapd-dbg_2.4.23-7patched1_i386.deb
 +slapd-smbk5pwd_2.4.23-7patched1_i386.deb
 +slapd_2.4.23-7patched1_i386.deb
 +</​sxh>​
 +
 + Agora vamos instalar os pacotes ​
 +<sxh bash>
 +dpkg -i libldap-2.4-2_2.4.23-7.2patched1_amd64.deb
 +dpkg -i ldap-utils_2.4.23-7.2patched1_amd64.deb
 +aptitude install libltdl7 libperl5.10 libslp1 unixodbc -y
 +dpkg -i slapd_2.4.23-7.2patched1_amd64.deb
 +</​sxh>​
 +
 + Aqui informe uma senha qualquer para o adm pois como vamos fazer a replicação a senha do adm vai ser a mesma do master ​
 +
 + Caso não apareça a tela pedindo a senha vamos reconfigurar o ldap 
 +<sxh bash>
 +dpkg-reconfigure slapd
 +#responda da seguinte forma
 +1) Não
 +2) douglasqsantos.com.br
 +3) douglasqsantos.com.br
 +4) senha
 +5) senha
 +6) hdb
 +7) Sim
 +8) Sim
 +9) Não
 +</​sxh>​
 + Agora vamos verificar se a porta do LDAP esta escutando ​
 +<sxh bash>
 +nmap -p 389 -T4 localhost
 +
 +Starting Nmap 5.00 ( http://​nmap.org ) at 2011-11-03 13:47 BRST
 +Interesting ports on localhost (127.0.0.1):​
 +PORT    STATE SERVICE
 +389/tcp open  ldap
 +
 +Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
 +</​sxh>​
 +
 +<sxh bash>
 +export DEBIAN_PRIORITY=critical
 +export DEBIAN_FRONTEND=noninteractive
 +</​sxh>​
 +
 + Agora vamos instalar os pacotes para o servidor LDAP slave ser cliente ​
 +<sxh bash>
 +aptitude install libnss-ldap libpam-ldap ldap-utils -y
 +</​sxh>​
 +
 + Agora vamos voltar o valor das variáveis ​
 +<sxh bash>
 +unset DEBIAN_PRIORITY
 +unset DEBIAN_FRONTEND
 +</​sxh>​
 +
 + Agora vamos acertar o TLS para o LDAP 
 +
 +Vamos instalar o pacote necessário ​
 +<sxh bash>
 +apt-get install gnutls-bin -y
 +</​sxh>​
 +
 + Agora vamos copiar as chaves ca do master para o slave 
 +<sxh bash>
 +mkdir /​etc/​ldap/​certs
 +scp ldap1.douglasqsantos.com.br:/​etc/​ldap/​certs/​ca.* /​etc/​ldap/​certs/​
 +</​sxh>​
 +
 +
 + Agora vamos criar um CA para assinar a chave para o nosso servidor ​
 +<sxh bash>
 +cd /​etc/​ldap/​certs
 +certtool --generate-privkey --outfile server.key
 +Generating a 2048 bit RSA private key...
 +</​sxh>​
 +
 + Agora vamos gerar o certificado dessa chave 
 +<sxh bash>
 +certtool --generate-certificate --load-privkey server.key --outfile server.pem --load-ca-certificate ca.pem --load-ca-privkey ca.key
 +Generating a signed certificate...
 +Please enter the details of the certificate'​s distinguished name. Just press enter to ignore a field.
 +Country name (2 chars): BR
 +Organization name: Douglas
 +Organizational unit name: Douglas
 +Locality name: Curitiba
 +State or province name: Parana
 +Common name: ldap2.douglasqsantos.com.br
 +UID: 
 +This field should not be used in new certificates.
 +E-mail: douglas@douglasqsantos.com.br
 +Enter the certificate'​s serial number in decimal (default: 1320335664): ​
 +
 +
 +Activation/​Expiration time.
 +The certificate will expire in (days): 3650
 +
 +
 +Extensions.
 +Does the certificate belong to an authority? (y/N): n
 +Is this a TLS web client certificate?​ (y/N): n
 +Is this also a TLS web server certificate?​ (y/N): n
 +Enter the e-mail of the subject of the certificate: ​
 +Will the certificate be used for signing (required for TLS)? (y/N): n
 +Will the certificate be used for encryption (not required for TLS)? (y/N): n
 +X.509 Certificate Information:​
 +  Version: 3
 +  Serial Number (hex): 4eb2b930
 +  Validity:
 +    Not Before: Thu Nov 03 15:54:25 UTC 2011
 +    Not After: Sun Oct 31 15:54:28 UTC 2021
 +  Subject: C=BR,​O=Douglas,​OU=Douglas,​L=Curitiba,​ST=Parana,​CN=ldap2.douglasqsantos.com.br,​EMAIL=douglas@douglasqsantos.com.br
 +  Subject Public Key Algorithm: RSA
 +    Modulus (bits 2048):
 +      ce:​76:​44:​db:​74:​d3:​d8:​f5:​1b:​64:​cb:​20:​f1:​36:​73:​01
 +      d2:​80:​71:​f5:​28:​12:​cc:​9d:​31:​30:​b7:​1b:​12:​d7:​a2:​b4
 +      0d:​fa:​aa:​7f:​22:​a5:​84:​11:​88:​9b:​2a:​9e:​e0:​d3:​e2:​96
 +      18:​7b:​70:​e8:​26:​b4:​7f:​6f:​6b:​49:​0d:​2d:​9a:​cd:​ea:​6e
 +      f4:​6f:​c2:​53:​10:​b6:​55:​2c:​0e:​7a:​e4:​99:​1c:​00:​15:​8e
 +      16:​d4:​d1:​80:​b7:​c5:​62:​9b:​ae:​37:​6a:​9f:​c0:​bd:​89:​3e
 +      3b:​6c:​a1:​b6:​c8:​69:​ec:​9c:​4e:​99:​a1:​50:​72:​71:​99:​09
 +      2b:​12:​aa:​f5:​7a:​0c:​70:​65:​85:​11:​27:​4a:​c8:​42:​12:​22
 +      84:​39:​6c:​9c:​59:​55:​16:​26:​92:​41:​87:​9f:​b0:​0b:​c2:​21
 +      6d:​6f:​7c:​af:​6a:​f1:​6a:​07:​65:​f3:​f1:​ff:​e4:​92:​f7:​af
 +      24:​0c:​4f:​6b:​9e:​af:​18:​fd:​67:​ed:​5f:​68:​5f:​11:​07:​06
 +      e9:​93:​54:​8a:​f0:​94:​53:​83:​0c:​b6:​e5:​6f:​38:​44:​f8:​10
 +      31:​30:​cc:​19:​15:​fd:​ca:​db:​1c:​11:​dd:​d0:​df:​79:​6e:​20
 +      97:​d4:​30:​9e:​71:​92:​38:​9d:​95:​b0:​a7:​82:​d2:​f8:​13:​be
 +      c3:​2a:​87:​d7:​6f:​79:​c6:​61:​44:​44:​8e:​b5:​77:​8a:​fc:​5b
 +      08:​50:​66:​f6:​b8:​17:​66:​27:​ed:​8c:​93:​d1:​2e:​a5:​b4:​93
 +    Exponent (bits 24):
 +      01:00:01
 +  Extensions:
 +    Basic Constraints (critical):
 +      Certificate Authority (CA): FALSE
 +    Subject Key Identifier (not critical):
 +      4e0267d96b11684cb19c25565b6f6403cf2383da
 +    Authority Key Identifier (not critical):
 +      c7356a56c8bb335e0cf3dd23632c91b3aa4c1c9b
 +Other Information:​
 +  Public Key Id:
 +    4e0267d96b11684cb19c25565b6f6403cf2383da
 +
 +Is the above information ok? (Y/N): y
 +
 +
 +Signing certificate...
 +</​sxh>​
 +
 + Agora vamos acertar as permissões das chaves ​
 +<sxh bash>
 +chmod 600 /​etc/​ldap/​certs/​*
 +chown openldap:​openldap /​etc/​ldap/​certs/​*
 +</​sxh>​
 +
 + Agora vamos criar o arquivo para que o LDAP reconheça as chaves e trabalhe com TLS 
 +<sxh bash>
 +vim ~/​tls_ldap.ldif
 +dn: cn=config
 +add: olcTLSCACertificateFile
 +olcTLSCACertificateFile:​ /​etc/​ldap/​certs/​ca.pem
 +-
 +add: olcTLSCertificateFile
 +olcTLSCertificateFile:​ /​etc/​ldap/​certs/​server.pem
 +-
 +add: olcTLSCertificateKeyFile
 +olcTLSCertificateKeyFile:​ /​etc/​ldap/​certs/​server.key
 +</​sxh>​
 +
 + Agora vamos importar as chaves ​
 +<sxh bash>
 +ldapmodify -QY EXTERNAL -H ldapi:// -f ~/​tls_ldap.ldif
 +modifying entry "​cn=config"​
 +</​sxh>​
 +
 + Agora vamos acertar o arquivo de inicialização do LDAP 
 +<sxh bash>
 +vim /​etc/​default/​slapd
 +[...]
 +SLAPD_SERVICES="​ldap:///​ ldaps:/// ldapi:///"​
 +</​sxh>​
 +
 + Agora vamos acertar a perte cliente para que possamos utilizar a conexão com TLS 
 +
 + Vamos fazer backup ​
 +<sxh bash>
 +cp -Rfa /​etc/​ldap/​ldap.conf{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos editar o arquivo ​
 +<sxh bash>
 +vim /​etc/​ldap/​ldap.conf
 +BASE dc=douglasqsantos,​dc=com,​dc=br
 +URI ldaps://​ldap2.douglasqsantos.com.br/​
 +TLS_CACERT /​etc/​ldap/​certs/​ca.pem
 +TLS_REQCERT allow
 +</​sxh>​
 +
 +Agora acertar o arquivo de controle da pam, mas primeiro vamos fazer backup do arquivo de configuração ​
 +<sxh bash>
 +cp /​etc/​pam_ldap.conf{,​.bkp}
 +</​sxh>​
 +
 + Vamos modificar o arquivo ​
 +<sxh bash>
 +vim /​etc/​pam_ldap.conf
 +base dc=douglasqsantos,​dc=com,​dc=br
 +uri ldaps://​ldap2.douglasqsantos.com.br/​
 +ldap_version 3
 +binddn cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +bindpw 123
 +pam_password crypt
 +ssl on
 +sslpath /​etc/​ldap/​certs
 +</​sxh>​
 +
 +Vamos fazer o backup do arquivo ​
 +<sxh bash>
 +cp /​etc/​libnss-ldap.conf{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos acertar o arquivo ​
 +<sxh bash>
 +vim /​etc/​libnss-ldap.conf
 +base dc=douglasqsantos,​dc=com,​dc=br
 +uri ldaps://​ldap2.douglasqsantos.com.br/​
 +ldap_version 3
 +binddn cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +bindpw 123
 +ssl on
 +sslpath /​etc/​ldap/​certs
 +</​sxh>​
 +
 +Vamos fazer backup do arquivo nsswitch.conf que controla aonde vai ser consultado os usuários senha e grupos ​
 +<sxh bash>
 +cp /​etc/​nsswitch.conf{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos modificar ele 
 +<sxh bash>
 +vim /​etc/​nsswitch.conf
 +passwd: ​        ​compat ldap
 +group: ​         compat ldap
 +shadow: ​        ​compat ldap
 +
 +hosts: ​         files dns
 +networks: ​      files
 +
 +protocols: ​     db files
 +services: ​      db files
 +ethers: ​        db files
 +rpc:            db files
 +
 +netgroup: ​      ldap
 +</​sxh>​
 +
 + Agora vamos acertar a configuração da PAM 
 +
 + Vamos fazer backup dos arquivos primeiro ​
 +<sxh bash>
 +cp -Rfa /​etc/​pam.d{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos acertar o arquivo de controle de sessão deixe o arquivo como abaixo ​
 +<sxh bash>
 +vim /​etc/​pam.d/​common-session
 +session [default=1] ​                    ​pam_permit.so
 +session requisite ​                      ​pam_deny.so
 +session required ​                       pam_permit.so
 +session required ​                       pam_unix.so
 +session optional ​                       pam_ldap.so
 +session optional pam_mkhomedir.so skel=/​etc/​skel umask=077
 +</​sxh>​
 +
 + Vamos acertar o arquivo de controle de senha deixe o arquivo como abaixo ​
 +<sxh bash>
 +vim /​etc/​pam.d/​common-password
 +password ​       [success=2 default=ignore] ​     pam_unix.so obscure sha512
 +password ​       [success=1 user_unknown=ignore default=die] ​    ​pam_ldap.so try_first_pass
 +password ​       requisite ​                      ​pam_deny.so
 +password ​       required ​                       pam_permit.so
 +</​sxh>​
 +
 + Vamos acertar agora o arquivo de controle do ssh deixe ele como abaixo ​
 +<sxh bash>
 +vim /​etc/​pam.d/​sshd
 +auth       ​required ​    ​pam_env.so # [1]
 +auth       ​required ​    ​pam_env.so envfile=/​etc/​default/​locale
 +@include common-auth
 +account ​   required ​    ​pam_nologin.so
 +#A linha abaixo para limitarmos o acesso ao ssh dessa maquina somente aos usuarios do grupo ti-admin ou root
 +account ​   sufficient ​  ​pam_succeed_if.so user ingroup root
 +account ​   requisite ​   pam_succeed_if.so user ingroup ti-admin
 +@include common-account
 +@include common-session
 +session ​   optional ​    ​pam_motd.so # [1]
 +session ​   optional ​    ​pam_mail.so standard noenv # [1]
 +session ​   required ​    ​pam_limits.so
 +@include common-password
 +</​sxh>​
 +
 + Agora vamos acertar o arquivo de login 
 +<sxh bash>
 +vim /​etc/​pam.d/​login
 +auth       ​optional ​  ​pam_faildelay.so ​ delay=3000000
 +auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so
 +auth       ​requisite ​ pam_nologin.so
 +#A linha abaixo para limitarmos o acesso ao ssh dessa maquina somente aos usuarios do grupo ti-admin ou root
 +account ​   sufficient ​  ​pam_succeed_if.so user ingroup root
 +account ​   requisite ​   pam_succeed_if.so user ingroup ti-admin
 +session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
 +session ​      ​required ​  ​pam_env.so readenv=1
 +session ​      ​required ​  ​pam_env.so readenv=1 envfile=/​etc/​default/​locale
 +@include ​  ​common-auth
 +auth       ​optional ​  ​pam_group.so
 +session ​   required ​  ​pam_limits.so
 +session ​   optional ​  ​pam_lastlog.so
 +session ​   optional ​  ​pam_motd.so
 +session ​   optional ​  ​pam_mail.so standard
 +@include common-account
 +@include common-session
 +@include common-password
 +session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
 +</​sxh>​
 +
 + Como pode ser notado estou limitando o acesso somente do root ou do grupo ti-admin para efetuar login ou acesso ao ssh ao servidor LDAP 
 +
 + Agora vamos reiniciar os serviços necessários ​
 +<sxh bash>
 +/​etc/​init.d/​slapd restart
 +/​etc/​init.d/​nscd restart
 +</​sxh>​
 +
 + Agora vamos verificar os serviços rodando em nosso servidor ​
 +<sxh bash>
 +nmap -sS -p 389,636 localhost -T4
 +
 +Starting Nmap 5.00 ( http://​nmap.org ) at 2011-11-03 15:37 BRST
 +Interesting ports on localhost (127.0.0.1):​
 +PORT    STATE SERVICE
 +389/tcp open  ldap
 +636/tcp open  ldapssl
 +
 +Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
 +</​sxh>​
 +
 + Agora no servidor MASTER temos que criar uma entrada para o replicador ​
 +<sxh bash>
 +vim ~/​replicador.ldif
 +dn: cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: replicador
 +description:​ Replicador para LDAP
 +userPassword:​ {SSHA}A7i24ok7aP8qPbMHGOV8vI7g/​HaSslph
 +</​sxh>​
 +
 +O valor do paramêtro userPassword foi gerado da seguinte forma 
 +<sxh bash>
 +slappasswd -s 123
 +{SSHA}A7i24ok7aP8qPbMHGOV8vI7g/​HaSslph
 +</​sxh>​
 +
 + Agora vamos importar o nosso replicador para a base LDAP no servidor master ​
 +<sxh bash>
 +ldapadd -cxWD cn=admin,​dc=douglasqsantos,​dc=com,​dc=br -f /​root/​replicador.ldif
 +Enter LDAP Password: ​
 +adding new entry "​cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br"​
 +</​sxh>​
 +
 +Agora vamos verificar as opções de sincronismo no servidor LDAP 
 +<sxh bash>
 +ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=config "​(|(olcDatabase={1}hdb)(cn=module{0})(olcOverlay={0}syncprov))"​
 +dn: cn=module{0},​cn=config
 +objectClass:​ olcModuleList
 +cn: module{0}
 +olcModulePath:​ /​usr/​lib/​ldap
 +olcModuleLoad:​ {0}back_hdb
 +
 +dn: olcDatabase={1}hdb,​cn=config
 +objectClass:​ olcDatabaseConfig
 +objectClass:​ olcHdbConfig
 +olcDatabase:​ {1}hdb
 +olcDbDirectory:​ /​var/​lib/​ldap
 +olcSuffix: dc=douglasqsantos,​dc=com,​dc=br
 +olcAccess: {0}to attrs=userPassword,​shadowLastChange by self write by anonymou
 + s auth by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ write by dn="​cn=pesquisador,​
 + ​dc=douglasqsantos,​dc=com,​dc=br"​ read by * none
 +olcAccess: {1}to dn.base=""​ by * none
 +olcAccess: {2}to * by self write by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br" ​ wr
 + ite by dn="​cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br"​ read by users read by * n
 + one
 +olcLastMod: TRUE
 +olcRootDN: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +olcRootPW: {SSHA}Xv1nlX2wqgxwVaLTe7qtV/​JbtoMf6XiL
 +olcDbCheckpoint:​ 512 30
 +olcDbConfig:​ {0}set_cachesize 0 2097152 0
 +olcDbConfig:​ {1}set_lk_max_objects 1500
 +olcDbConfig:​ {2}set_lk_max_locks 1500
 +olcDbConfig:​ {3}set_lk_max_lockers 1500
 +olcDbIndex: objectClass eq
 +olcDbIndex: uid eq
 +olcDbIndex: cn eq
 +olcDbIndex: ou eq
 +olcDbIndex: dc eq
 +</​sxh>​
 +
 +
 + Ainda no servidor master vamos fazer mais alguns ajustes ​
 +<sxh bash>
 +vim ~/​olc-mod2.ldif
 +# 1.1.1.
 +dn: olcDatabase={1}hdb,​cn=config
 +changetype: modify
 +delete: olcAccess
 +olcAccess: {0}to attrs=userPassword,​shadowLastChange
 +  by self write
 +  by anonymous auth
 +  by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ write
 +  by dn="​cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br"​ read
 +  by * none
 +-
 +# 1.1.2.
 +add: olcAccess
 +olcAccess: {0}to attrs=userPassword,​shadowLastChange
 +  by self write
 +  by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ write
 +  by dn="​cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br"​ read
 +  by dn="​cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br"​ read
 +  by anonymous auth
 +  by * none
 +-
 +# 1.2.
 +add: olcDbIndex
 +olcDbIndex: entryUUID eq
 +-
 +# 1.3.
 +add: olcDbIndex
 +olcDbIndex: entryCSN eq
 +
 +# 2.
 +dn: cn=module{0},​cn=config
 +changetype: modify
 +add: olcModuleLoad
 +olcModuleLoad:​ {1}syncprov
 +
 +# 3.
 +dn: olcOverlay=syncprov,​olcDatabase={1}hdb,​cn=config
 +changetype: add
 +objectClass:​ olcOverlayConfig
 +objectClass:​ olcSyncProvConfig
 +olcOverlay: {0}syncprov
 +olcSpCheckpoint:​ 100 10
 +olcSpSessionlog:​ 100
 +</​sxh>​
 +
 + Agora vamos importar as novas configurações ​
 +<sxh bash>
 +ldapmodify -QY EXTERNAL -H ldapi:/// -f ~/​olc-mod2.ldif
 +modifying entry "​olcDatabase={1}hdb,​cn=config"​
 +
 +modifying entry "​cn=module{0},​cn=config"​
 +
 +adding new entry "​olcOverlay=syncprov,​olcDatabase={1}hdb,​cn=config"​
 +</​sxh>​
 +
 +Agora no servidor LDAP SLAVE 
 +
 + Vamos consultar as configurações ​
 +<sxh bash>
 +ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=config "​(|(cn=config)(olcDatabase={1}hdb))"​
 +dn: cn=config
 +objectClass:​ olcGlobal
 +cn: config
 +olcArgsFile:​ /​var/​run/​slapd/​slapd.args
 +olcLogLevel:​ none
 +olcPidFile: /​var/​run/​slapd/​slapd.pid
 +olcTLSCACertificateFile:​ /​etc/​ldap/​certs/​ca.pem
 +olcTLSCertificateFile:​ /​etc/​ldap/​certs/​server.pem
 +olcTLSCertificateKeyFile:​ /​etc/​ldap/​certs/​server.key
 +olcToolThreads:​ 1
 +
 +dn: olcDatabase={1}hdb,​cn=config
 +objectClass:​ olcDatabaseConfig
 +objectClass:​ olcHdbConfig
 +olcDatabase:​ {1}hdb
 +olcDbDirectory:​ /​var/​lib/​ldap
 +olcSuffix: dc=douglasqsantos,​dc=com,​dc=br
 +olcAccess: {0}to attrs=userPassword,​shadowLastChange by self write by anonymou
 + s auth by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ write by * none
 +olcAccess: {1}to dn.base=""​ by * read
 +olcAccess: {2}to * by self write by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ wri
 + te by * read
 +olcLastMod: TRUE
 +olcRootDN: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +olcRootPW: {SSHA}ezGp86eHq70MH4D+yLQqA+zJAFt7SCr8
 +olcDbCheckpoint:​ 512 30
 +olcDbConfig:​ {0}set_cachesize 0 2097152 0
 +olcDbConfig:​ {1}set_lk_max_objects 1500
 +olcDbConfig:​ {2}set_lk_max_locks 1500
 +olcDbConfig:​ {3}set_lk_max_lockers 1500
 +olcDbIndex: objectClass eq
 +</​sxh>​
 +
 + Agora vamos acertar as configurações para a nossa replicação ​
 +<sxh bash>
 +vim ~/​olc-mod1.ldif
 +# 1.
 +dn: cn=config
 +changetype: modify
 +replace: olcLogLevel
 +olcLogLevel:​ stats
 +
 +# 2.1.
 +dn: olcDatabase={1}hdb,​cn=config
 +changetype: modify
 +add: olcAccess
 +olcAccess: {0}to attrs=userPassword,​shadowLastChange
 +  by self write
 +  by anonymous auth
 +  by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ write
 +  by dn="​cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br"​ read
 +  by dn="​cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br"​ read
 +  by * none
 +-
 +# 1.1.2.
 +add: olcAccess
 +olcAccess: {1}to dn.base=""​ by * none
 +-
 +# 1.1.3
 +add: olcAccess
 +olcAccess: {2}to *
 +  by self write
 +  by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br" ​ write
 +  by dn="​cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br"​ read
 +  by users read
 +  by * none
 +-
 +# 2.2.
 +delete: olcRootPW
 +-
 +# 2.3.
 +add: olcDbIndex
 +olcDbIndex: entryCSN eq
 +-
 +# 2.4.
 +add: olcDbIndex
 +olcDbIndex: entryUUID eq
 +-
 +# 2.5.
 +add: olcDbIndex
 +olcDbIndex: uid eq
 +-
 +# 2.6.
 +add: olcDbIndex
 +olcDbIndex: cn eq
 +-
 +# 2.7.
 +add: olcDbIndex
 +olcDbIndex: ou eq
 +-
 +# 2.8.
 +add: olcDbIndex
 +olcDbIndex: dc eq
 +-
 +# 2.9.
 +add: olcSyncrepl
 +olcSyncrepl:​ rid=123
 +  provider="​ldaps://​ldap1.douglasqsantos.com.br/"​
 +  type=refreshAndPersist
 +  retry="​60 30 300 +"
 +  searchbase="​dc=douglasqsantos,​dc=com,​dc=br"​
 +  bindmethod=simple
 +  tls_cacert=/​etc/​ldap/​certs/​ca.pem
 +  tls_reqcert=allow
 +  binddn="​cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br"​
 +  credentials=123
 +</​sxh>​
 +
 + Em credentials a senha tem que ser em texto puro ele não aceita o hash {SSHA} ​
 +
 +Agora vamos importar as configurações ​
 +<sxh bash>
 +ldapmodify -QY EXTERNAL -H ldapi:/// -f /​root/​olc-mod1.ldif
 +modifying entry "​cn=config"​
 +
 +modifying entry "​olcDatabase={1}hdb,​cn=config"​
 +</​sxh>​
 +
 + Agora vamos para o ldap remover a base e iniciar novamente para testar a replicação ​
 +<sxh bash>
 +/​etc/​init.d/​slapd stop
 +Stopping OpenLDAP: slapd.
 +rm -rf /​var/​lib/​ldap/​*
 +/​etc/​init.d/​slapd start
 +Starting OpenLDAP: slapd.
 +</​sxh>​
 +
 + Agora vamos efetuar um teste de consulta em nossa base 
 +<sxh bash>
 +ldapsearch -xLLL
 +No such object (32)
 +</​sxh>​
 +
 + Como anonimous não conseguimos nenhum resultado agora vamos tentar consultar com o admin 
 +<sxh bash>
 +ldapsearch -xLLL -D cn=admin,​dc=douglasqsantos,​dc=com,​dc=br -W 
 +Enter LDAP Password: ​
 +dn: dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ dcObject
 +objectClass:​ organization
 +o: douglasqsantos.com.br
 +dc: douglas
 +
 +dn: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: admin
 +description:​ LDAP administrator
 +userPassword::​ e1NTSEF9WHYxbmxYMndxZ3h3VmFMVGU3cXRWL0pidG9NZjZYaUw=
 +
 +dn: ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Usuarios
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Grupos
 +objectClass:​ organizationalUnit
 +
 +dn: ou=Maquinas,​dc=douglasqsantos,​dc=com,​dc=br
 +ou: Maquinas
 +objectClass:​ organizationalUnit
 +
 +dn: cn=ti-admin,​ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +cn: ti-admin
 +gidNumber: 20000
 +objectClass:​ top
 +objectClass:​ posixGroup
 +
 +dn: uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +uid: douglas
 +uidNumber: 20000
 +gidNumber: 20000
 +cn: Douglas
 +sn: Santos
 +objectClass:​ top
 +objectClass:​ person
 +objectClass:​ posixAccount
 +objectClass:​ shadowAccount
 +loginShell: /bin/bash
 +homeDirectory:​ /​home/​douglas
 +userPassword::​ e1NTSEF9YVJDR3R0dytUTVcwd3AyNTJmSnJ4VWQ0QnB0dGExTTQ=
 +
 +dn: cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ top
 +objectClass:​ organizationalRole
 +objectClass:​ simpleSecurityObject
 +cn: pesquisador
 +userPassword::​ e1NTSEF9MWhTV2FiLzZ3STNzV1lYRW91WVAxc1gxWHNGc0FFQng=
 +
 +dn: cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: replicador
 +description:​ Replicador para LDAP
 +userPassword::​ e1NTSEF9QTdpMjRvazdhUDhxUGJNSEdPVjh2STdnL0hhU3NscGg=
 +</​sxh>​
 +
 +
 +
 + ​Podemos acompanhar os logs do LDAP em /​var/​log/​syslog ​
 +
 +<sxh bash>
 +tail -f /​var/​log/​syslog ​
 +Nov  3 16:39:31 ldap2 slapd[2296]:​ conn=1001 fd=26 ACCEPT from IP=10.0.0.26:​48328 (IP=0.0.0.0:​636)
 +Nov  3 16:39:31 ldap2 slapd[2296]:​ conn=1001 fd=26 TLS established tls_ssf=128 ssf=128
 +Nov  3 16:39:31 ldap2 slapd[2296]:​ conn=1001 op=0 BIND dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ method=128
 +Nov  3 16:39:31 ldap2 slapd[2296]:​ conn=1001 op=0 BIND dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ mech=SIMPLE ssf=0
 +Nov  3 16:39:31 ldap2 slapd[2296]:​ conn=1001 op=0 RESULT tag=97 err=0 text=
 +Nov  3 16:39:31 ldap2 slapd[2296]:​ conn=1001 op=1 SRCH base="​dc=douglasqsantos,​dc=com,​dc=br"​ scope=2 deref=0 filter="​(objectClass=*)"​
 +Nov  3 16:39:31 ldap2 slapd[2296]:​ conn=1001 op=1 SEARCH RESULT tag=101 err=0 nentries=9 text=
 +Nov  3 16:39:31 ldap2 slapd[2296]:​ conn=1001 op=2 UNBIND
 +Nov  3 16:39:31 ldap2 slapd[2296]:​ conn=1001 fd=26 closed
 +</​sxh>​
 +
 +Vamos testar a autenticação no ldap2
 +<sxh bash>
 +[16:48:55] root@ldap2 [/etc/ldap] # su - douglas
 +Criando o diretório '/​home/​douglas'​.
 +[16:48:58] douglas@ldap2 [~] $ 
 +</​sxh>​
 +
 + Vamos verificar com qual usuário estamos logados ​
 +<sxh bash>
 +[16:48:58] douglas@ldap2 [~] $ whoami ​
 +douglas
 +[16:49:56] douglas@ldap2 [~] $ 
 +</​sxh>​
 +
 + Agora vamos colocar o usuário douglas do grupo sudo do ldap2 
 +<sxh bash>
 +gpasswd -a douglas sudo
 +</​sxh>​
 +
 +Agora vamos fazer um teste de acesso via ssh
 +<sxh bash>
 +ssh douglas@10.0.0.26
 +douglas@10.0.0.26'​s password: ​
 +Linux ldap2 2.6.32-5-amd64 #1 SMP Thu Nov 3 03:41:26 UTC 2011 x86_64
 +
 +The programs included with the Debian GNU/Linux system are free software;
 +the exact distribution terms for each program are described in the
 +individual files in /​usr/​share/​doc/​*/​copyright.
 +
 +Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
 +permitted by applicable law.
 +[16:51:14] douglas@ldap2 [~] $ sudo su -
 +
 +We trust you have received the usual lecture from the local System
 +Administrator. It usually boils down to these three things:
 +
 +    #1) Respect the privacy of others.
 +    #2) Think before you type.
 +    #3) With great power comes great responsibility.
 +
 +[sudo] password for douglas: ​
 +[16:51:22] root@ldap2 [~] # 
 +</​sxh>​
 +
 + Vamos ver os logs que foram gerados no servidor ldap2 
 +<sxh bash>
 +tail -f /​var/​log/​auth.log
 +Nov  3 16:51:13 ldap2 sshd[2514]: pam_unix(sshd:​auth):​ authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.0.20 ​ user=douglas
 +Nov  3 16:51:13 ldap2 sshd[2514]: pam_succeed_if(sshd:​account):​ requirement "user ingroup root" not met by user "​douglas"​
 +Nov  3 16:51:13 ldap2 sshd[2514]: pam_succeed_if(sshd:​account):​ requirement "user ingroup ti-admin"​ was met by user "​douglas"​
 +Nov  3 16:51:13 ldap2 sshd[2514]: Accepted password for douglas from 10.0.0.20 port 58820 ssh2
 +Nov  3 16:51:13 ldap2 sshd[2514]: pam_unix(sshd:​session):​ session opened for user douglas by (uid=0)
 +Nov  3 16:51:22 ldap2 sudo: pam_unix(sudo:​auth):​ authentication failure; logname=douglas uid=0 euid=0 tty=/​dev/​pts/​1 ruser=douglas rhost= ​ user=douglas
 +Nov  3 16:51:22 ldap2 sudo:  douglas : TTY=pts/1 ; PWD=/​home/​douglas ; USER=root ; COMMAND=/​bin/​su -
 +Nov  3 16:51:22 ldap2 su[2533]: Successful su for root by root
 +Nov  3 16:51:22 ldap2 su[2533]: + /dev/pts/1 root:root
 +Nov  3 16:51:22 ldap2 su[2533]: pam_unix(su:​session):​ session opened for user root by douglas(uid=0)
 +</​sxh>​
 +
 +
 + Agora vamos configurar o Ldap-Account-Manager para podermos gerenciar o nosso LDAP pela Web 
 +
 + Vamos instalar alguns pacotes necessário ​
 +<sxh bash>
 +aptitude install ldap-account-manager php5-ldap php5-gd php-fpdf libjs-jquery libjs-jquery-ui debconf php5-mcrypt ldap-account-manager-lamdaemon -y
 +</​sxh>​
 +
 + Agora vamos acertar a configuração do lam 
 +<sxh bash>
 +vim /​usr/​share/​ldap-account-manager/​config/​lam.conf
 +[...]
 +serverURL: ldap://​ldap2.douglasqsantos.com.br
 +[...]
 +admins: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +[...]
 +treesuffix: dc=douglasqsantos,​dc=com,​dc=br
 +[...]
 +defaultLanguage:​ pt_BR.utf8:​UTF-8:​Português (Brasil)
 +[...]
 +types: suffix_user:​ ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +[...]
 +types: suffix_group:​ ou=Grupos,​dc=douglasqsantos,​dc=com,​dc=br
 +[...]
 +types: suffix_host:​ ou=Maquinas,​dc=douglasqsantos,​dc=com,​dc=br
 +[...]
 +types: suffix_smbDomain:​ dc=douglasqsantos,​dc=com,​dc=br
 +</​sxh>​
 +
 + Agora para acessar o LAM http://​ip_servidor/​lam ​ informe a senha do admin e se divirta ​
 +
 +**Opcional:​** Agora vamos acertar o LAM para trabalhar com HTTPS 
 +
 + Vamos gerar as chaves para o https 
 +
 + Vamos preparar o diretório para receber as chaves ​
 +<sxh bash>
 +mkdir -p /​etc/​ssl/​apache
 +cd /​etc/​ssl/​apache
 +</​sxh>​
 +
 + Agora vamos gerar a key 
 +<sxh bash>
 +openssl genrsa -des3 -out server.key 1024
 +Generating RSA private key, 1024 bit long modulus
 +..++++++
 +.++++++
 +e is 65537 (0x10001)
 +Enter pass phrase for server.key:
 +Verifying - Enter pass phrase for server.key:
 +</​sxh>​
 +
 + Agora vamos gerar o csr 
 +<sxh bash>
 +openssl req -new -key server.key -out server.csr
 +Enter pass phrase for server.key:
 +You are about to be asked to enter information that will be incorporated
 +into your certificate request.
 +What you are about to enter is what is called a Distinguished Name or a DN.
 +There are quite a few fields but you can leave some blank
 +For some fields there will be a default value,
 +If you enter '​.',​ the field will be left blank.
 +-----
 +Country Name (2 letter code) [AU]:BR
 +State or Province Name (full name) [Some-State]:​Parana
 +Locality Name (eg, city) []:Curitiba
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:​Douglas
 +Organizational Unit Name (eg, section) []:Douglas
 +Common Name (eg, YOUR name) []:​ldap2.douglasqsantos.com.br
 +Email Address []:​douglas@douglasqsantos.com.br
 +
 +Please enter the following '​extra'​ attributes
 +to be sent with your certificate request
 +A challenge password []:
 +An optional company name []:Douglas
 +</​sxh>​
 +
 + Agora vamos assinar o nosso certificado ​
 +<sxh bash>
 +openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
 +Signature ok
 +subject=/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=Douglas/​CN=ldap2.douglasqsantos.com.br/​emailAddress=douglas@douglasqsantos.com.br
 +Getting Private key
 +Enter pass phrase for server.key:
 +</​sxh>​
 +
 + Agora vamos acertar as permissões das chave 
 +<sxh bash>
 +chmod 0400 server.*
 +cp server.key server.key.orig
 +</​sxh>​
 +
 + Agora vamos tirar a senha do certificado ​
 +<sxh bash>
 +openssl rsa -in server.key.orig -out server.key
 +Enter pass phrase for server.key.orig:​
 +writing RSA key
 +</​sxh>​
 +
 +Agora vamos acertar as permissões novamente ​
 +<sxh bash>
 +chmod 0400 /​etc/​ssl/​apache/​*
 +</​sxh>​
 +
 + Agora vamos acertar o virtual host para o LAM 
 +<code sxh>
 +vim /​etc/​apache2/​sites-available/​lam2
 +<​VirtualHost *:443>
 +        ServerAdmin webmaster@douglasqsantos.com.br
 +        ServerName lam2.douglasqsantos.com.br
 +        DocumentRoot "/​usr/​share/​ldap-account-manager"​
 +        <​Directory /​usr/​share/​ldap-account-manager>​
 +                  Options +FollowSymLinks
 +                  AllowOverride All
 +                  Order allow,deny
 +                  Allow from all
 +                  DirectoryIndex index.html
 +        </​Directory>​
 +
 +        <​Directory /​var/​lib/​ldap-account-manager/​tmp>​
 +                  Options -Indexes
 +        </​Directory>​
 +
 +        <​Directory /​var/​lib/​ldap-account-manager/​sess>​
 +                  Options -Indexes
 +                  Order allow,deny
 +                  Deny from all
 +        </​Directory>​
 +
 +        <​Directory /​var/​lib/​ldap-account-manager/​config>​
 +                  Options -Indexes
 +                  Order allow,deny
 +                  Deny from all
 +        </​Directory>​
 +
 +        <​Directory /​usr/​share/​ldap-account-manager/​lib>​
 +                  Options -Indexes
 +                  Order allow,deny
 +                  Deny from all
 +        </​Directory>​
 +
 +        <​Directory /​usr/​share/​ldap-account-manager/​help>​
 +                  Options -Indexes
 +                  Order allow,deny
 +                  Deny from all
 +        </​Directory>​
 +        <​Directory /​usr/​share/​ldap-account-manager/​locale>​
 +                  Options -Indexes
 +                  Order allow,deny
 +                  Deny from all
 +        </​Directory>​
 +
 +         <​IfModule mod_php5.c>​
 +         ​AddType application/​x-httpd-php .php
 +                 ​php_flag expose_php Off
 +                 ​php_flag allow_url_fopen Off
 +                 ​php_flag allow_url_include Off
 +                 ​php_flag magic_quotes_gpc Off
 +                 ​php_flag register_globals Off
 +                 ​php_flag disable_functions show_source
 +                 ​php_flag disable_functions system
 +                 ​php_flag disable_functions shell_exec
 +                 ​php_flag disable_functions passthru
 +                 ​php_flag disable_functions exec
 +                 ​php_flag disable_functions popen
 +                 ​php_flag disable_functions proc_open
 +                 ​php_flag disable_functions symlink
 +         </​IfModule>​
 +        CustomLog /​var/​log/​apache2/​lam.access.log combined
 +        ErrorLog /​var/​log/​apache2/​lam.error.log
 +        LogLevel warn
 +        SSLEngine on
 +        SSLCipherSuite ALL:​!ADH:​!EXPORT56:​RC4+RSA:​+HIGH:​+MEDIUM:​+LOW:​+SSLv2:​+EXP:​+eNULL
 +        SSLCertificateFile "/​etc/​ssl/​apache/​server.crt"​
 +        SSLCertificateKeyFile "/​etc/​ssl/​apache/​server.key"​
 +        <​FilesMatch "​\.(cgi|shtml|phtml|php)$">​
 +                 ​SSLOptions +StdEnvVars
 +        </​FilesMatch>​
 +                 ​BrowserMatch "​.*MSIE.*"​ \
 +                 ​nokeepalive ssl-unclean-shutdown \
 +                 ​downgrade-1.0 force-response-1.0
 +        ServerSignature Off
 +</​VirtualHost>​
 +</​sxh>​
 +
 + Agora vamos configurar a porta que o nosso virtual host vai estar escutando ​
 +<sxh bash>
 +vim /​etc/​apache2/​ports.conf
 +[...]
 +NameVirtualHost *:443
 +#​NameVirtualHost *:80
 +#Listen 80
 +</​sxh>​
 +
 +Vamos carregar agora o módulo ssl para o apache ​
 +<sxh bash>
 +a2enmod ssl
 +</​sxh>​
 +
 + Agora vamos desabilitar os dois sites padrões do apache ​
 +<sxh bash>
 +a2dissite default
 +a2dissite default-ssl
 +</​sxh>​
 +
 +Agora vamos habilitar o site do lam 
 +<sxh bash>
 +a2ensite lam2
 +</​sxh>​
 +
 + Agora vamos reiniciar o apache ​
 +<sxh bash>
 +/​etc/​init.d/​apache2 restart
 +</​sxh>​
 +
 + Agora podemos acessar o nosso lam em https://​lam2.douglasqsantos.com.br ​
 +
 + ​Senão foi adicionada uma entrada no DNS pode ser utilizado a configuração do /etc/hosts no cliente ​
 +<sxh bash>
 +[...]
 +ip_servidor ​  ​lam2.douglasqsantos.com.br lam
 +</​sxh>​
 +
 + Agora vamos dar acesso ao servidor slave escrever na base vamos verificar os parametros antes da alteração ​
 +<sxh bash>
 +ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=config "​(|(cn=module{0}) (olcDatabase={1}hdb)(olcOverlay={0}chain)(olcDatabase={0}ldap))"​
 +dn: cn=module{0},​cn=config
 +objectClass:​ olcModuleList
 +cn: module{0}
 +olcModulePath:​ /​usr/​lib/​ldap
 +olcModuleLoad:​ {0}back_hdb
 +
 +dn: olcDatabase={1}hdb,​cn=config
 +objectClass:​ olcDatabaseConfig
 +objectClass:​ olcHdbConfig
 +olcDatabase:​ {1}hdb
 +olcDbDirectory:​ /​var/​lib/​ldap
 +olcSuffix: dc=douglasqsantos,​dc=com,​dc=br
 +olcAccess: {0}to attrs=userPassword,​shadowLastChange by self write by anonymou
 + s auth by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ write by dn="​cn=pesquisador,​
 + ​dc=douglasqsantos,​dc=com,​dc=br"​ read by dn="​cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br"​
 +  read by * none
 +olcAccess: {1}to dn.base=""​ by * none
 +olcAccess: {2}to * by self write by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br" ​ wr
 + ite by dn="​cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br"​ read by users read by * n
 + one
 +olcAccess: {3}to attrs=userPassword,​shadowLastChange by self write by anonymou
 + s auth by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ write by * none
 +olcAccess: {4}to dn.base=""​ by * read
 +olcAccess: {5}to * by self write by dn="​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ wri
 + te by * read
 +olcLastMod: TRUE
 +olcRootDN: cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +olcSyncrepl:​ {0}rid=123 provider="​ldaps://​ldap1.douglasqsantos.com.br/"​ type=refresh
 + ​AndPersist retry="​60 30 300 +" searchbase="​dc=douglasqsantos,​dc=com,​dc=br"​ bindmeth
 + ​od=simple tls_cacert=/​etc/​ldap/​certs/​ca.pem tls_reqcert=allow binddn="​cn=repl
 + ​icador,​dc=douglasqsantos,​dc=com,​dc=br"​ credentials=123
 +olcDbCheckpoint:​ 512 30
 +olcDbConfig:​ {0}set_cachesize 0 2097152 0
 +olcDbConfig:​ {1}set_lk_max_objects 1500
 +olcDbConfig:​ {2}set_lk_max_locks 1500
 +olcDbConfig:​ {3}set_lk_max_lockers 1500
 +olcDbIndex: objectClass eq
 +olcDbIndex: entryCSN eq
 +olcDbIndex: entryUUID eq
 +olcDbIndex: uid eq
 +olcDbIndex: cn eq
 +olcDbIndex: ou eq
 +olcDbIndex: dc eq
 +</​sxh>​
 +
 +Vamos fazer alguns acertos no servidor Slave 
 +<sxh bash>
 +vim ~/​olc-mod2.ldif
 +# 1.
 +dn: olcDatabase={1}hdb,​cn=config
 +changetype: modify
 +add: olcUpdateref
 +olcUpdateref:​ "​ldaps://​ldap1.douglasqsantos.com.br/"​
 +
 +# 2.
 +dn: cn=module{0},​cn=config
 +changetype: modify
 +add: olcModuleLoad
 +olcModuleLoad:​ {1}back_ldap
 +
 +# 3.
 +dn: olcOverlay=chain,​olcDatabase={-1}frontend,​cn=config
 +changetype: add
 +objectClass:​ olcOverlayConfig
 +objectClass:​ olcChainConfig
 +olcOverlay: {0}chain
 +olcChainReturnError:​ TRUE
 +
 +# 4.
 +dn: olcDatabase=ldap,​olcOverlay={0}chain,​olcDatabase={-1}frontend,​
 + ​cn=config
 +changetype: add
 +objectClass:​ olcLDAPConfig
 +objectClass:​ olcChainDatabase
 +olcDatabase:​ {0}ldap
 +olcDbURI: "​ldaps://​ldap1.douglasqsantos.com.br/"​
 +olcDbRebindAsUser:​ TRUE
 +olcDbIDAssertBind:​ bindmethod=simple
 +  tls_cacert=/​etc/​ldap/​certs/​ca.pem
 +  tls_reqcert=allow
 +  binddn="​cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br"​
 +  credentials=123
 +  mode=self
 +</​sxh>​
 +
 +Agora vamos importar a nova configuração ​
 +<sxh bash>
 +ldapmodify -QY EXTERNAL -H ldapi:/// -f /​root/​olc-mod2.ldif
 +modifying entry "​olcDatabase={1}hdb,​cn=config"​
 +
 +modifying entry "​cn=module{0},​cn=config"​
 +
 +adding new entry "​olcOverlay=chain,​olcDatabase={-1}frontend,​cn=config"​
 +
 +adding new entry "​olcDatabase=ldap,​olcOverlay={0}chain,​olcDatabase={-1}frontend,​cn=config"​
 +</​sxh>​
 +
 + Agora no servidor master temos que autorizar o slave escrever na base 
 +<sxh bash>
 +vim ~/​replicador-authzto.ldif
 +dn: cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br
 +changetype: modify
 +add: authzTo
 +authzTo: {0}dn.regex:​^uid=[^,​]+,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br$
 +authzTo: {1}dn.exact:​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br
 +</​sxh>​
 +
 + Agora vamos importar a nova configuração no servidor master ​
 +<sxh bash>
 +ldapmodify -xWD "​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ -f /​root/​replicador-authzto.ldif
 +Enter LDAP Password: senha
 +modifying entry "​cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br"​
 +</​sxh>​
 +
 +<sxh bash>
 +export DEBIAN_PRIORITY=critical
 +export DEBIAN_FRONTEND=noninteractive
 +</​sxh>​
 +
 +Agora vamos verificar a configuração do nosso servidor master ​
 +<sxh bash>
 +ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=config cn=config
 +dn: cn=config
 +objectClass:​ olcGlobal
 +cn: config
 +olcArgsFile:​ /​var/​run/​slapd/​slapd.args
 +olcLogLevel:​ stats
 +olcPidFile: /​var/​run/​slapd/​slapd.pid
 +olcTLSCACertificateFile:​ /​etc/​ldap/​certs/​ca.pem
 +olcTLSCertificateFile:​ /​etc/​ldap/​certs/​server.pem
 +olcTLSCertificateKeyFile:​ /​etc/​ldap/​certs/​server.key
 +olcToolThreads:​ 1
 +</​sxh>​
 +
 + Agora vamos criar o arquivo para que o servidor master aceita modificações efetuadas pelo slave 
 +<sxh bash>
 +vim ~/​olc-AuthzPolicy.ldif
 +dn: cn=config
 +changetype: modify
 +add: olcAuthzPolicy
 +olcAuthzPolicy:​ to
 +</​sxh>​
 +
 + Agora vamos importar a configuração ​
 +<sxh bash>
 +ldapmodify -QY EXTERNAL -H ldapi:/// -f ~/​olc-AuthzPolicy.ldif
 +modifying entry "​cn=config"​
 +</​sxh>​
 +
 + Agora vamos fazer um teste vamos escrever na base slave e vai ter que replicar para o servidor master no servidor SLAVE 
 +<sxh bash>
 +vim ~/​replica.desc.ldif
 +dn: cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br
 +changetype: modify
 +replace: description
 +description:​ LDAP SLAVE REPLICATOR
 +</​sxh>​
 +
 + Agora vamos importar a nova descrição para o replicador no servidor slave 
 +<sxh bash>
 +ldapmodify -xWD "​cn=admin,​dc=douglasqsantos,​dc=com,​dc=br"​ -f /​root/​replica.desc.ldif
 +Enter LDAP Password: ​
 +modifying entry "​cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br"​
 +</​sxh>​
 +
 + Agora vamos consultar a base no servidor slave 
 +<sxh bash>
 +ldapsearch -xLLL -D cn=admin,​dc=douglasqsantos,​dc=com,​dc=br -W '​(cn=replicador)'​
 +Enter LDAP Password: ​
 +dn: cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: replicador
 +userPassword::​ e1NTSEF9QTdpMjRvazdhUDhxUGJNSEdPVjh2STdnL0hhU3NscGg=
 +description:​ LDAP SLAVE REPLICATOR
 +</​sxh>​
 +
 + Como pode ser notado a descrição do replicador foi modificada agora vamos consultar no servidor master ​
 +<sxh bash>
 +ldapsearch -xLLL -D cn=admin,​dc=douglasqsantos,​dc=com,​dc=br -W '​(cn=replicador)'​
 +Enter LDAP Password: ​
 +dn: cn=replicador,​dc=douglasqsantos,​dc=com,​dc=br
 +objectClass:​ simpleSecurityObject
 +objectClass:​ organizationalRole
 +cn: replicador
 +userPassword::​ e1NTSEF9QTdpMjRvazdhUDhxUGJNSEdPVjh2STdnL0hhU3NscGg=
 +description:​ LDAP SLAVE REPLICATOR
 +</​sxh>​
 +
 + Temos a mesma informação nas duas pontas ​
 +
 + Agora vamos configurar um cliente para se conectar em nossa base LDAP 
 +
 + Vamos acertar as variáveis do ambiente ​
 +<sxh bash>
 +export DEBIAN_PRIORITY=critical
 +export DEBIAN_FRONTEND=noninteractive
 +</​sxh>​
 +
 +<sxh bash>
 +aptitude install libnss-ldap libpam-ldap ldap-utils -y
 +</​sxh>​
 +
 + Agora vamos voltar o valor das variáveis ​
 +<sxh bash>
 +unset DEBIAN_PRIORITY
 +unset DEBIAN_FRONTEND
 +</​sxh>​
 +
 +Vamos acertar o arquivo /etc/hosts nos dois servidores
 +<sxh bash>
 +vim /etc/hosts
 +127.0.0.1 ​      ​localhost
 +10.0.0.25 ​      ​ldap1.douglasqsantos.com.br ​      ldap1
 +10.0.0.26 ​      ​ldap2.douglasqsantos.com.br ​      ldap2
 +10.0.0.27 ​      ​cliente.douglasqsantos.com.br ​    ​cliente
 +</​sxh>​
 +
 + Vamos ajustar o nome do cliente em /​etc/​hostname
 +<sxh bash>
 +vim /​etc/​hostname
 +cliente
 +</​sxh>​
 +
 + Vamos desabilitar o IPV6 no cliente ​
 +<sxh bash>
 +echo "​net.ipv6.conf.all.disable_ipv6=1"​ >> /​etc/​sysctl.conf
 +</​sxh>​
 +
 +Vamos fazer backup do /​etc/​nsswitch ​
 +<sxh bash>
 +cp /​etc/​nsswitch.conf{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos acertar o arquivo ​
 +<sxh bash>
 +vim /​etc/​nsswitch.conf
 +passwd: ​        ​compat ldap
 +group: ​         compat ldap
 +shadow: ​        ​compat ldap
 +
 +hosts: ​         files dns
 +networks: ​      files
 +
 +protocols: ​     db files
 +services: ​      db files
 +ethers: ​        db files
 +rpc:            db files
 +
 +netgroup: ​      ldap
 +</​sxh>​
 +
 +Agora vamos fazer um backup da pam 
 +<sxh bash>
 +cp -Rfa /​etc/​pam.d{,​.bkp}
 +</​sxh>​
 +
 + Vamos acertar o arquivo que controla as sessões ​
 +<sxh bash>
 +vim /​etc/​pam.d/​common-session
 +session [default=1] ​                    ​pam_permit.so
 +session requisite ​                      ​pam_deny.so
 +session required ​                       pam_permit.so
 +session required ​       pam_unix.so
 +session optional ​                       pam_ldap.so
 +session optional pam_mkhomedir.so skel=/​etc/​skel umask=077
 +</​sxh>​
 +
 + Agora vamos configurar o arquivo que controla as senha 
 +<sxh bash>
 +vim /​etc/​pam.d/​common-password
 +password ​       [success=2 default=ignore] ​     pam_unix.so obscure sha512
 +password ​       [success=1 user_unknown=ignore default=die] ​    ​pam_ldap.so try_first_pass
 +password ​       requisite ​                      ​pam_deny.so
 +password ​       required ​                       pam_permit.so
 +</​sxh>​
 +
 +Agora vamos criar o diretório para armazenar o certificado e vamos importar ele do servidor ​
 +<sxh bash>
 +mkdir /​etc/​ldap/​certs
 +scp ldap1.douglasqsantos.com.br:/​etc/​ldap/​certs/​ca.pem /​etc/​ldap/​certs/​
 +</​sxh>​
 +
 + Vamos acertar o arquivo que o cliente vai consultar para saber para qual servidor ele tem que efetuar pesquisa ​
 +<sxh bash>
 +vim /​etc/​ldap/​ldap.conf
 +BASE dc=douglasqsantos,​dc=com,​dc=br
 +URI ldaps://​ldap1.douglasqsantos.com.br/​ ldaps://​ldap2.douglasqsantos.com.br/​
 +TLS_CACERT /​etc/​ldap/​certs/​ca.pem
 +TLS_REQCERT allow
 +</​sxh>​
 +
 + Vamos acertar agora o arquivo de controle entra pam e ldap 
 +
 + Vamos fazer um backup do arquivo ​
 +<sxh bash>
 +cp /​etc/​pam_ldap.conf{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos ajustar o arquivo ​
 +<sxh bash>
 +vim /​etc/​pam_ldap.conf
 +uri ldaps://​ldap1.douglasqsantos.com.br/​ ldaps://​ldap2.douglasqsantos.com.br/​
 +ldap_version 3
 +binddn cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +bindpw 123
 +pam_password crypt
 +ssl on
 +sslpath /​etc/​ldap/​certs
 +</​sxh>​
 +
 + Agora vamos acertar o libnss-ldap ​
 +
 + Vamos fazer backup do arquivo ​
 +<sxh bash>
 +cp /​etc/​libnss-ldap.conf{,​.bkp}
 +</​sxh>​
 +
 + Agora vamos acertar o arquivo ​
 +<sxh bash>
 +vim /​etc/​libnss-ldap.conf
 +base dc=douglasqsantos,​dc=com,​dc=br
 +uri ldaps://​ldap1.douglasqsantos.com.br/​
 +ldap_version 3
 +binddn cn=pesquisador,​dc=douglasqsantos,​dc=com,​dc=br
 +bindpw 123
 +ssl on
 +sslpath /​etc/​ldap/​certs
 +</​sxh>​
 +
 +Agora vamos reiniciar o nscd 
 +<sxh bash>
 +/​etc/​init.d/​nscd restart
 +</​sxh>​
 +
 + Agora vamos efetuar uma consulta na base para ver se esta tudo ok 
 +<sxh bash>
 +ldapsearch -xLLL -D cn=admin,​dc=douglasqsantos,​dc=com,​dc=br -W '​(cn=douglas)'​
 +Enter LDAP Password: ​
 +dn: uid=douglas,​ou=Usuarios,​dc=douglasqsantos,​dc=com,​dc=br
 +uid: douglas
 +uidNumber: 20000
 +gidNumber: 20000
 +cn: Douglas
 +sn: Santos
 +objectClass:​ top
 +objectClass:​ person
 +objectClass:​ posixAccount
 +objectClass:​ shadowAccount
 +loginShell: /bin/bash
 +homeDirectory:​ /​home/​douglas
 +userPassword::​ e1NTSEF9YVJDR3R0dytUTVcwd3AyNTJmSnJ4VWQ0QnB0dGExTTQ=
 +</​sxh>​
 +
 +Agora vamos adicionar o usuário douglas no grupo sudo 
 +<sxh bash>
 +gpasswd -a douglas sudo
 +</​sxh>​
 +
 + Agora vamos testar uma conexão ssh do servidor para o cliente ​
 +<sxh bash>
 +ssh douglas@10.0.0.27
 +The authenticity of host '​10.0.0.27 (10.0.0.27)'​ can't be established.
 +RSA key fingerprint is 64:​d9:​04:​30:​7c:​71:​51:​b0:​21:​95:​a3:​75:​36:​60:​a9:​eb.
 +Are you sure you want to continue connecting (yes/no)? yes
 +Warning: Permanently added '​10.0.0.27'​ (RSA) to the list of known hosts.
 +douglas@10.0.0.27'​s password: ​
 +Creating directory '/​home/​douglas'​.
 +Linux cliente 2.6.32-5-amd64 #1 SMP Thu Nov 3 03:41:26 UTC 2011 x86_64
 +
 +The programs included with the Debian GNU/Linux system are free software;
 +the exact distribution terms for each program are described in the
 +individual files in /​usr/​share/​doc/​*/​copyright.
 +
 +Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
 +permitted by applicable law.
 +[18:25:56] douglas@cliente [~] $ sudo su -
 +
 +We trust you have received the usual lecture from the local System
 +Administrator. It usually boils down to these three things:
 +
 +    #1) Respect the privacy of others.
 +    #2) Think before you type.
 +    #3) With great power comes great responsibility.
 +
 +[sudo] password for douglas: ​
 +[18:26:03] root@cliente [~] # 
 +</​sxh>​
 +
 + Como pode ser notado da um pouco de trabalho mais temos a autenticação das maquinas e servidores centralizada com redundancia e com tls 
 +
 +====== Referências ======
 +
 +
 +  - http://​www.openldap.org/​
 +  - http://​www.openldap.org/​doc/​admin24/​
 +  - http://​www.openldap.org/​doc/​admin24/​quickstart.html
 +  - http://​adoldap.codeplex.com/​
 +  - www.openldap.org/​doc/​admin24/​OpenLDAP-Admin-Guide.pdf
 +  - www.samba.org/​samba/​docs/​Samba3-HOWTO.pdf