<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<?xml-stylesheet href="docbook.xsl" type="text/xsl"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<article lang="pt_BR">
  <articleinfo>
    <title>Instalando um servidor OpenLDAP secundario</title>
    <authorgroup>
      <author>
        <firstname>Leonardo</firstname>
        <othername>Serra Maciel de</othername>
        <surname>Campos</surname>
        <affiliation>
          <address>
            <email>linuxbh@brfree.com.br</email>
          </address>
        </affiliation>
      </author>
    </authorgroup>
    <revhistory>
      <revision>
        <revnumber>0.1</revnumber>
        <date>2004-10-08 11:14:36 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>0.2</revnumber>
        <date>2004-10-14 11:57:58 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>0.3</revnumber>
        <date>2004-10-27 11:56:43 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>0.4</revnumber>
        <date>2004-11-04 08:57:34 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>0.5</revnumber>
        <date>2004-11-05 16:46:21 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>0.6</revnumber>
        <date>2004-11-11 10:57:22 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>0.7</revnumber>
        <date>2004-12-07 12:04:22 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
    </revhistory>
    <copyright>
      <year>2004</year>
      <holder>Leonardo Serra Maciel de Campos</holder>
    </copyright>
    <legalnotice>
      <para>Este documento é licenciado sobre a licença de Atribuição-Compartilhamento da Creative Commons. Para ver uma cópia desta licença, visite <ulink url="http://creativecommons.org/licenses/by-sa/2.0/"/> ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.</para>
    </legalnotice>
    <abstract>
      <para>Este documento visa ensinar como instalar e configurar um servidor OpenLDAP secundario.</para>
    </abstract>
  </articleinfo>
  <sect1>
    <title>Introdução</title>
    <sect2>
      <title>O que é LDAP?</title>
      <para>LDAP significa Lightweight Directory Access Protocol, ou seja, Protocolo de Leve Acesso a Diretórios. Como o nome sugere, é um protocolo leve para acessar serviços de diretório. O LDAP roda em cima do protocolo TCP/IP ou outras conexões de transferência de serviços.</para>
    </sect2>
    <sect2>
      <title>O que é OpenLDAP?</title>
      <para>O OpenLDAP é um esforço colaborativo da comunidade Open Source para desenvolver um sistema de aplicações LDAP. O fundador por este projeto é o americano Kurt Zeilenga. Hoje existem vários desenvolvedores engajados neste sistema que está se tornando um padrão universal.</para>
    </sect2>
    <sect2>
      <title>Por que um servidor OpenLDAP secundario?</title>
      <para>Este servidor OpenLDAP secundario terá uma copia de toda a arvore de dados do servidor OpenLDAP primario. Alem da copia ele tambem podera ser utilizado para fazer consultas. Pedidos de modificações ao servidor OpenLDAP secundario serão repassadas para o servidor OpenLDAP primario. Apos as modificações serem feitas no servidor OpenLDAP primario ele ira informar ao servidor OpenLDAP secundario das modificações. Desta maneira aumentamos  a capacidade, a disponibilidade e a confiabilidade do serviço OpenLDAP.</para>
    </sect2>
  </sect1>
  <sect1>
    <title>Ambiente</title>
    <para>Será presumido que o seu sistema <glossterm baseform="Debian GNU/Linux">Debian GNU/Linux</glossterm> e o aptitude estão corretamente configurados. Também estaremos acreditando que o servidor OpenLDAP primario está executando de forma correta.</para>
    <warning>
      <para>Todos os comandos deverão ser executados pelo usuário root, execeto quando informado!</para>
    </warning>
    <para>A tabelo abaixo mostra as versões de cada <glossterm baseform="Logicial">logicial</glossterm> usado.</para>
    <table>
      <title>Versão dos logiciais</title>
      <tgroup cols="2">
        <thead>
          <row>
            <entry>
              <glossterm baseform="Logicial">Logicial</glossterm>
            </entry>
            <entry>Versão</entry>
          </row>
        </thead>
        <tbody>
          <row>
            <entry>OpenLDAP (slapd)</entry>
            <entry>2.1.30-3</entry>
          </row>
        </tbody>
      </tgroup>
    </table>
    <para>A tabelo abaixo mostra as principais características do ambiente onde foi feito esta documentação.</para>
    <table>
      <title>Ambiente</title>
      <tgroup cols="2">
        <tbody>
          <row>
            <entry>Distribuição GNU/Linux</entry>
            <entry>Debian Sarge</entry>
          </row>
          <row>
            <entry>Endereço do servidor OpenLDAP primario</entry>
            <entry>
              <replaceable>ldap.exemplo.com.br</replaceable>
            </entry>
          </row>
          <row>
            <entry>Endereço do servidor OpenLDAP secundario</entry>
            <entry>
              <replaceable>sldap.exemplo.com.br</replaceable>
            </entry>
          </row>
          <row>
            <entry>Nome do domínio</entry>
            <entry>
              <replaceable>exemplo.com.br</replaceable>
            </entry>
          </row>
          <row>
            <entry>Sufixo da base do servidor OpenLDAP</entry>
            <entry>
              <replaceable>dc=exemplo,dc=com,dc=br</replaceable>
            </entry>
          </row>
          <row>
            <entry>Usuário administrador do servidor OpenLDAP</entry>
            <entry>
              <replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>
            </entry>
          </row>
          <row>
            <entry>Senha do usuário administrador do servidor OpenLDAP</entry>
            <entry>
              <replaceable>asdf</replaceable>
            </entry>
          </row>
          <row>
            <entry>Usuário administrador para replica do servidor OpenLDAP</entry>
            <entry>
              <replaceable>cn=replicator,dc=exemplo,dc=com,dc=br</replaceable>
            </entry>
          </row>
          <row>
            <entry>Senha do usuário administrador para replica do servidor OpenLDAP</entry>
            <entry>
              <replaceable>qwer</replaceable>
            </entry>
          </row>
          <row>
            <entry>Pasta da base do servidor OpenLDAP</entry>
            <entry>
              <filename>
                <replaceable>/var/lib/ldap</replaceable>
              </filename>
            </entry>
          </row>
        </tbody>
      </tgroup>
    </table>
    <note>
      <para>Usaremos palavras <replaceable>desta maneira</replaceable> para indicar substituição.</para>
    </note>
  </sect1>
  <sect1>
    <title>Instalação</title>
    <orderedlist numeration="arabic">
      <listitem>
        <para>Execute o seguinte comando para instalar o servidor OpenLDAP:</para>
        <screen><prompt>#</prompt> <userinput>aptitude install slapd ldap-utils db4.2-util</userinput></screen>
        <para>Será instalado o pacote Debian para o OpenLDAP e ferramentas relacionadas. O DebConf ira fazer algumas perguntas, responda de acordo com a tabela abaixo.</para>
        <table>
          <title>DebConf</title>
          <tgroup cols="2">
            <thead>
              <row>
                <entry>Pacote</entry>
                <entry>Questão</entry>
                <entry>Resposta</entry>
              </row>
            </thead>
            <tbody>
              <row>
                <entry>slapd</entry>
                <entry>Enter your DNS domain name</entry>
                <entry>
                  <replaceable>exemplo.com.br</replaceable>
                </entry>
              </row>
              <row>
                <entry>slapd</entry>
                <entry>Enter the name of your organization</entry>
                <entry>
                  <replaceable>exemplo.com.br</replaceable>
                </entry>
              </row>
              <row>
                <entry>slapd</entry>
                <entry>Admin password</entry>
                <entry>
                  <replaceable>asdf</replaceable>
                </entry>
              </row>
              <row>
                <entry>slapd</entry>
                <entry>Verify password</entry>
                <entry>
                  <replaceable>asdf</replaceable>
                </entry>
              </row>
              <row>
                <entry>slapd</entry>
                <entry>Allow LDAPv2 protocol</entry>
                <entry>No</entry>
              </row>
            </tbody>
          </tgroup>
        </table>
      </listitem>
    </orderedlist>
  </sect1>
  <sect1>
    <title>Configuração</title>
    <orderedlist numeration="arabic">
      <listitem>
        <para>As etapas abaixo devem ser executadas na maquina <replaceable>ldap.exemplo.com.br</replaceable>.</para>
        <itemizedlist>
          <listitem>
            <para>É necessário criptografar a senha do usuário <replaceable>cn=replicator,dc=exemplo,dc=com,dc=br</replaceable>. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>slappasswd -h {CRYPT}</userinput></screen>
            <para>Será perguntada a senha, digite ela. Repita a senha para garantir de que ela foi digitada corretamente. Você recebera um resultado parecido com isto:</para>
            <screen>{CRYPT}2jkPbZYuWCw</screen>
          </listitem>
          <listitem>
            <para>É necessário criar um objeto do tipo simpleSecurityObject na base do servidor OpenLDAP, que será o usuário utilizado para realizar a replica. Para isto crie um arquivo com o seguinte conteúdo e salve ele com o nome de <filename>simpleSecurityObject.ldif</filename>.</para>
            <screen>
dn:<replaceable>cn=replicator,dc=exemplo,dc=com,dc=br</replaceable>
cn: replicator
objectClass: simpleSecurityObject
objectClass: organizationalRole
userPassword: {crypt}SUMkenwzpcJkU
description: LDAP replicator
ou: Group
</screen>
            <para>Execute o seguinte comando para adicionar o conteúdo do arquivo <filename>simpleSecurityObject.ldif</filename> a base do servidor OpenLDAP:</para>
            <screen><prompt>#</prompt> <userinput>ldapadd -x -h <replaceable>ldap.exemplo.com.br</replaceable> -D "<replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>" -f <filename>simpleSecurityObject.ldif</filename> -W</userinput></screen>
          </listitem>
          <listitem>
            <itemizedlist>
              <para>Edite o arquivo <filename>/etc/ldap/slapd.conf</filename>.</para>
              <listitem>
                <para>É necessário colocar temporariamente o servidor OpenLDAP primario em modo de somente leitura, para isto acrescente ao fim do arquivo a seguinte linha:</para>
                <screen>readonly on</screen>
              </listitem>
              <listitem>
                <para>Iremos configurar quem recebera as replicações, para isto abaixo da linha:</para>
                <screen>directory       "/var/lib/ldap"</screen>
                <para>Acrescente as seguintes linhas:</para>
                <screen>
replica host=<replaceable>sldap.exemplo.com.br</replaceable>:389
        binddn="<replaceable>cn=replicator,dc=exemplo,dc=com,dc=br</replaceable>"
        bindmethod=simple
        credentials=<replaceable>qwer</replaceable>
</screen>
              </listitem>
              <listitem>
                <para>É necessário delegar ao usuário replicador acesso a base do servidor OpenLDAP. Para isto abaixo de cada linha:</para>
                <screen>by dn="<replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>" write</screen>
                <para>Acrescente a seguinte linha:</para>
                <screen>by dn="<replaceable>cn=replicator,dc=exemplo,dc=com,dc=br</replaceable>" write</screen>
              </listitem>
            </itemizedlist>
          </listitem>
          <listitem>
            <para>É necessário reiniciar o servidor OpenLDAP para carregar as novas configurações. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>invoke-rc.d slapd restart</userinput></screen>
          </listitem>
          <listitem>
            <para>É necessário que o servidor OpenLDAP secundario tenha os mesmo dados que o servidor OpenLDAP primario, para isto iremos gerar uma copia da base do servidor OpenLDAP primario. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>slapcat -l <filename>/etc/ldap/copia.ldif</filename></userinput></screen>
          </listitem>
          <listitem>
            <para>Copie o arquivo <filename>/etc/ldap/copia.ldif</filename> para a maquina <replaceable>sldap.exemplo.com.br</replaceable>. A sugestão é usar o <userinput>scp</userinput> para copiar o arquivo entre as maquinas, para isto é necessario que a maquina <replaceable>sldap.exemplo.com.br</replaceable> tenha um servidor de SSH habilitado, o que não é o escopo deste documento. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>scp <filename>/etc/ldap/copia.ldif</filename> <replaceable>sldap.exemplo.com.br</replaceable>:/etc/ldap/</userinput></screen>
          </listitem>
          <listitem>
            <para>Apague o arquivo <filename>/etc/ldap/copia.ldif</filename> para garantir que seus dados não serão comprometidos. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>rm <filename>/etc/ldap/copia.ldif</filename></userinput></screen>
          </listitem>
          <listitem>
            <para>É necessário que o servidor OpenLDAP secundario tenha praticamente o mesmo arquivo de configuração que o servidor OpenLDAP primario, exceto algumas configurações. Copie o arquivo <filename>/etc/ldap/slapd.conf</filename> para a maquina <replaceable>sldap.exemplo.com.br</replaceable>. A sugestão é usar o <userinput>scp</userinput> para copiar o arquivo entre as maquinas, para isto é necessario que a maquina <replaceable>sldap.exemplo.com.br</replaceable> tenha um servidor de SSH, o que não é o escopo deste documento. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>scp <filename>/etc/ldap/slapd.conf</filename> <replaceable>sldap.exemplo.com.br</replaceable>:/etc/ldap/</userinput></screen>
          </listitem>
        </itemizedlist>
      </listitem>
      <listitem>
        <para>As etapas abaixo devem ser executadas na maquina <replaceable>sldap.exemplo.com.br</replaceable>.</para>
        <itemizedlist>
          <listitem>
            <para>É necessário parar o servidor OpenLDAP. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>invoke-rc.d slapd stop</userinput></screen>
          </listitem>
          <listitem>
            <itemizedlist>
              <para>Edite o arquivo <filename>/etc/ldap/slapd.conf</filename>.</para>
              <listitem>
                <para>Apague as seguintes linhas que configuram quem recebera as replicações:</para>
                <screen>
replica host=<replaceable>sldap.exemplo.com.br</replaceable>:389
        binddn="<replaceable>cn=replicator,dc=exemplo,dc=com,dc=br</replaceable>"
        bindmethod=simple
        credentials=<replaceable>qwer</replaceable>
</screen>
              </listitem>
              <listitem>
                <para>Iremos configurar o comportamento quando chegar um pedido de modificação, para isto abaixo da linha:</para>
                <screen>directory       "/var/lib/ldap"</screen>
                <para>Acrescente as seguintes linhas:</para>
                <screen>
updatedn "<replaceable>cn=replicator,dc=exemplo,dc=com,dc=br</replaceable>"
updateref ldap://<replaceable>ldap.exemplo.com.br</replaceable>
</screen>
              </listitem>
            </itemizedlist>
          </listitem>
          <listitem>
            <para>É necessário limpar a base do OpenLDAP, para isto execute:.</para>
            <screen>
<prompt>#</prompt> <userinput>rm -rf /var/lib/ldap/</userinput>
<prompt>#</prompt> <userinput>mkdir /var/lib/ldap/</userinput>
</screen>
          </listitem>
          <listitem>
            <para>É necessário carregar a copia da base do servidor OpenLDAP primario. Para isto execute:.</para>
            <screen><prompt>#</prompt> <userinput>slapadd -l <filename>/etc/ldap/copia.ldif</filename></userinput></screen>
          </listitem>
          <listitem>
            <para>Apague o arquivo <filename>/etc/ldap/copia.ldif</filename> para garantir que seus dados não serão comprometidos. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>rm <filename>/etc/ldap/copia.ldif</filename></userinput></screen>
          </listitem>
          <listitem>
            <para>É necessário iniciar o servidor OpenLDAP. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>invoke-rc.d slapd start</userinput></screen>
          </listitem>
        </itemizedlist>
      </listitem>
      <listitem>
        <para>As etapas abaixo devem ser executadas na maquina <replaceable>ldap.exemplo.com.br</replaceable>.</para>
        <itemizedlist>
          <listitem>
            <para>Edite o arquivo <filename>/etc/ldap/slapd.conf</filename>. É necessário retirar o servidor OpenLDAP do modo de somente leitura, para isto apague a seguinte linha:</para>
            <screen>readonly on</screen>
          </listitem>
          <listitem>
            <para>É necessário reiniciar o servidor OpenLDAP para carregar a nova configuração. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>invoke-rc.d slapd restart</userinput></screen>
          </listitem>
        </itemizedlist>
      </listitem>
    </orderedlist>
  </sect1>
  <sect1>
    <title>Recuperando a base</title>
    <para>Pode acontecer da base do servidor OpenLDAP corromper, quando isto acontecer execute:</para>
    <orderedlist numeration="arabic">
      <listitem>
        <para>Parar o servidor OpenLDAP:</para>
        <screen><prompt>#</prompt> <userinput>invoke-rc.d slapd stop</userinput></screen>
      </listitem>
      <listitem>
        <para>Entrar na pasta da base do servidor OpenLDAP:</para>
        <screen><prompt>#</prompt> <userinput>cd <filename><replaceable>/var/lib/ldap</replaceable></filename></userinput></screen>
      </listitem>
      <listitem>
        <para>Recuperando a base:</para>
        <screen><prompt>#</prompt> <userinput>db4.2_recover</userinput></screen>
      </listitem>
      <listitem>
        <para>Iniciar o servidor OpenLDAP:</para>
        <screen><prompt>#</prompt> <userinput>invoke-rc.d slapd start</userinput></screen>
      </listitem>
    </orderedlist>
  </sect1>
  <sect1>
    <title>Comandos úteis</title>
    <itemizedlist>
      <listitem>
        <para>Para reiniciar o servidor OpenLDAP execute:</para>
        <screen><prompt>#</prompt> <userinput>invoke-rc.d slapd restart</userinput></screen>
      </listitem>
      <listitem>
        <para>Para parar o servidor OpenLDAP execute:</para>
        <screen><prompt>#</prompt> <userinput>invoke-rc.d slapd stop</userinput></screen>
      </listitem>
      <listitem>
        <para>Para iniciar o servidor OpenLDAP execute:</para>
        <screen><prompt>#</prompt> <userinput>invoke-rc.d slapd start</userinput></screen>
      </listitem>
      <listitem>
        <para>Para criar uma copia de segurança da base do servidor OpenLDAP execute:</para>
        <screen><prompt>#</prompt> <userinput>slapcat -l <filename>copia.ldif</filename></userinput></screen>
        <warning>
          <para>A execução deste comando com o servidor OpenLDAP sendo executado pode causar inconsistência da base, portanto pare o servidor OpenLDAP antes de executar este comando!</para>
        </warning>
      </listitem>
      <listitem>
        <para>Para restaurar uma copia de segurança da base do servidor OpenLDAP execute:</para>
        <screen><prompt>#</prompt> <userinput>slapadd -l <filename>copia.ldif</filename></userinput></screen>
        <warning>
          <para>A execução deste comando com o servidor OpenLDAP sendo executado pode causar inconsistência da base, portanto pare o servidor OpenLDAP antes de executar este comando!</para>
        </warning>
        <warning>
          <para>Após restaurar uma copia de segurança, não esqueça de reindexar a base do servidor OpenLDAP!</para>
        </warning>
      </listitem>
      <listitem>
        <para>Para reindexar a base do servidor OpenLDAP execute:</para>
        <screen><prompt>#</prompt> <userinput>slapindex</userinput></screen>
        <warning>
          <para>A execução deste comando com o servidor OpenLDAP sendo executado pode causar inconsistência da base, portanto pare o servidor OpenLDAP antes de executar este comando!</para>
        </warning>
      </listitem>
      <listitem>
        <para>Para recuperar a base do servidor OpenLDAP, dentro da pasta <filename><replaceable>/var/lib/ldap</replaceable></filename> execute:</para>
        <screen><prompt>#</prompt> <userinput>db4.2_recover</userinput></screen>
        <warning>
          <para>A execução deste comando com o servidor OpenLDAP sendo executado pode causar inconsistência da base, portanto pare o servidor OpenLDAP antes de executar este comando!</para>
        </warning>
      </listitem>
    </itemizedlist>
  </sect1>
  <bibliography>
    <title>Bibliografia</title>
    <para>Os seguintes sítios foram usados como base para a criação desta documentação</para>
    <biblioentry>
      <title>Projeto OpenLDAP</title>
      <releaseinfo>
        <ulink url="http://www.openldap.org"/>
      </releaseinfo>
    </biblioentry>
    <biblioentry>
      <title>Projeto LDAP Brasil</title>
      <releaseinfo>
        <ulink url="http://www.ldap.org.br"/>
      </releaseinfo>
    </biblioentry>
    <biblioentry>
      <title>Replicação e escalabilidade</title>
      <releaseinfo>
        <ulink url="http://gtdir.inf.puc-rio.br/replicacao.htm"/>
      </releaseinfo>
    </biblioentry>
    <biblioentry>
      <title>Replicación de PDC's y SLAPD</title>
      <releaseinfo>
        <ulink url="http://guepardo.dyndns.org:8080/sergio-gonzalez/doc/04-replicacion-bdc-slapd/html/index.html"/>
      </releaseinfo>
    </biblioentry>
    <biblioentry>
      <title>Manual de administração do OpenLDAP</title>
      <releaseinfo>
        <ulink url="http://www.openldap.org/doc/admin22/"/>
      </releaseinfo>
    </biblioentry>
    <biblioentry>
      <title>Monografia sobre LDAP</title>
      <releaseinfo>
        <ulink url="http://www.ldap.liceu.com.br/index.html"/>
      </releaseinfo>
    </biblioentry>
    <biblioentry>
      <title>LDAPAuthentication</title>
      <releaseinfo>
        <ulink url="http://wiki.debian.net/index.cgi?LDAPAuthentication"/>
      </releaseinfo>
    </biblioentry>
  </bibliography>
  <glossary>
    <title>Glossário</title>
    <glossentry>
      <glossterm>Debian GNU/Linux</glossterm>
      <glossdef>
        <para>O <ulink url="http://www.debian.org">Debian</ulink> é um sistema operacional (SO) livre para seu computador. Um sistema operacional é um conjunto de programas básicos e utilitários que fazem seu computador funcionar. O Debian usa o kernel (núcleo de um sistema operacional), <ulink url="http://www.kernel.org">Linux</ulink>, mas a maior parte das ferramentas do SO vêm do projeto <ulink url="http://www.gnu.org">GNU</ulink>; daí o nome GNU/Linux.</para>
      </glossdef>
    </glossentry>
    <glossentry>
      <glossterm>Logicial</glossterm>
      <glossdef>
        <para>Conjunto de instruções lógicas. Na informática designa um conjunto de instruções lógicas e suas dependências, também conhecido como programa ou sistema de computador.</para>
        <para>Esta palavra é pouco usada no Brasil, onde se usa muito a expressão "Software".</para>
        <para>Origem: <ulink url="http://pt.wikipedia.org/wiki/Logicial">Wikipédia, a enciclopédia livre.</ulink></para>
      </glossdef>
    </glossentry>
  </glossary>
</article>
