<?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 Samba autenticando em um servidor OpenLDAP</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.5</revnumber>
        <date>2004-09-01 12:10:05 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>0.6</revnumber>
        <date>2004-09-08 10:35:42 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>0.7</revnumber>
        <date>2004-09-09 12:02:55 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>0.8</revnumber>
        <date>2004-09-13 11:42:12 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>0.9</revnumber>
        <date>2004-09-15 12:00:43 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>1.0</revnumber>
        <date>2004-11-19 12:24:03 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>1.1</revnumber>
        <date>2004-11-22 10:44:00 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>1.2</revnumber>
        <date>2004-12-02 17:04:09 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>1.3</revnumber>
        <date>2004-12-07 10:33:25 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>1.4</revnumber>
        <date>2004-12-14 14:27:09 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
      <revision>
        <revnumber>1.5</revnumber>
        <date>2005-06-17 00:48:21 -0300</date>
        <authorinitials>Leonardo Serra Maciel de Campos</authorinitials>
      </revision>
    </revhistory>
    <copyright>
      <year>2004-2005</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 configurar o Samba de maneira integrada OpenLDAP.</para>
    </abstract>
  </articleinfo>
  <sect1>
    <title>Introdução</title>
    <sect2>
      <title>O que é Samba?</title>
      <para>O Samba é um conjunto de logiciais que forneça serviços de compartilhamento de arquivos e impressão com clientes SMB/CIFS. O Samba está livremente disponível, ao contrário de outras implementações de SMB/CIFS, e permite a interoperabilidade entre usuários de Linux/Unix e clientes baseados em Microsoft Windows.</para>
    </sect2>
    <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>
  </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 está instalado, configurado e  sendo executado da maneira correta. Também é importante que a máquina onde ficará o servidor Samba esteja realizando autenticação no servidor OpenLDAP.</para>
    <warning>
      <para>Todos os comandos deverão ser executados pelo usuário root!</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>Debian GNU/Linux</entry>
            <entry>Sarge</entry>
          </row>
          <row>
            <entry>OpenLDAP (slapd)</entry>
            <entry>2.1.30-3</entry>
          </row>
          <row>
            <entry>Samba</entry>
            <entry>3.0.8-2</entry>
          </row>
          <row>
            <entry>smbldap-tools</entry>
            <entry>0.8.5-1</entry>
          </row>
        </tbody>
      </tgroup>
    </table>
    <para>A tabelo abaixo mostra as principais caracteristicas do ambiente onde foi feito esta documentação.</para>
    <table>
      <title>Ambiente</title>
      <tgroup cols="2">
        <tbody>
          <row>
            <entry>Nome do servidor Samba</entry>
            <entry>
              <replaceable>servidor</replaceable>
            </entry>
          </row>
          <row>
            <entry>Nome do domínio/grupo de trabalho</entry>
            <entry>
              <replaceable>exemplo.com.br</replaceable>
            </entry>
          </row>
          <row>
            <entry>Ip do servidor Samba</entry>
            <entry>
              <replaceable>192.168.0.1</replaceable>
            </entry>
          </row>
          <row>
            <entry>Mascara de rede</entry>
            <entry>
              <replaceable>255.255.255.0</replaceable>
            </entry>
          </row>
          <row>
            <entry>Endereço do servidor OpenLDAP</entry>
            <entry>
              <replaceable>ldap.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>
        </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:</para>
        <screen><prompt>#</prompt> <userinput>aptitude install samba samba-common samba-doc smbclient smbfs smbldap-tools</userinput></screen>
        <para>Será instalado o pacote Debian para o Samba 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>samba</entry>
                <entry>Workgroup/Domain Name?</entry>
                <entry>
                  <replaceable>exemplo.com.br</replaceable>
                </entry>
              </row>
              <row>
                <entry>samba</entry>
                <entry>Use password encryption?</entry>
                <entry>Yes</entry>
              </row>
              <row>
                <entry>samba</entry>
                <entry>Modify smb.conf to use WINS settings from DHCP?</entry>
                <entry>No</entry>
              </row>
              <row>
                <entry>samba</entry>
                <entry>How do you want to run Samba?</entry>
                <entry>daemons</entry>
              </row>
              <row>
                <entry>samba</entry>
                <entry>Create samba password database, /var/lib/samba/passdb.tdb?</entry>
                <entry>No</entry>
              </row>
            </tbody>
          </tgroup>
        </table>
      </listitem>
    </orderedlist>
  </sect1>
  <sect1>
    <title>Configuração</title>
    <orderedlist numeration="arabic">
      <listitem>
        <para>Edite o arquivo <filename>/etc/samba/smb.conf</filename>. O arquivo deverá estar idêntico ao exemplo abaixo, exceto quando estiver indicado.</para>
        <screen>
# Global parameters
[global]

  # Do something sensible when Samba crashes: mail the admin a backtrace
  panic action = /usr/share/samba/panic-action %d
  workgroup = <replaceable>exemplo.com.br</replaceable>
  netbios name = <replaceable>servidor</replaceable>
  server string = Servidor Samba
  security = user
  passdb backend = ldapsam:ldap://<replaceable>ldap.exemplo.com.br</replaceable>:389
  encrypt passwords = yes
  ldap passwd sync = yes

  guest account = guest

  ldap admin dn = <replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>
  ldap suffix = <replaceable>dc=exemplo,dc=com,dc=br</replaceable>
  ldap ssl = no
  ldap user suffix = ou=People
  ldap group suffix = ou=Group
  ldap machine suffix = ou=Computer
  ldap idmap suffix = ou=Idmap
  ldap delete dn = yes

  add user script = /usr/sbin/smbldap-useradd -m "%u"
  add machine script = /usr/sbin/smbldap-useradd -w "%u"
  add group script = /usr/sbin/smbldap-groupadd -p "%g"
  add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
  delete user script = /usr/sbin/smbldap-userdel "%u"
  delete group script = /usr/sbin/smbldap-groupdel "%g"
  delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
  set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"

  log level = 3 passdb:5 auth:2
  log file = /var/log/samba/log.%m
  max log size = 200
  syslog = 0
  time server = yes
  socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
  load printers = no
  os level = 64
  preferred master = yes
  local master = yes
  domain master = yes
  domain logons = yes

  wins support = yes
  dns proxy = yes
  hosts allow = <replaceable>192.168.0.0/255.255.255.0</replaceable> 127.0.0.0/255.0.0.0

[homes]
  comment = Pasta dos usuários
  read only = no
  browseable = no
  hide dot files = yes
  valid users = %S
  create mask = 0600
  directory mask = 0700

[profiles]
  comment = Serviço de perfil
  path = /etc/samba/profiles/
  profile acls = yes
  read only = no
  create mask = 0600
  directory mask = 0700

[netlogon]
  comment = Serviço de logon
  path = /etc/samba/netlogon/
  browseable = no
  read only = yes
  share modes = no
  locking = no
</screen>
        <note>
          <para>Você pode validar o arquivo <filename>/etc/samba/smb.conf</filename> através da execução do comando <userinput>testparm</userinput></para>
        </note>
      </listitem>
      <listitem>
        <para>É necessario criar duas pastas.</para>
        <itemizedlist>
          <listitem>
            <para>Execute o seguinte comando para criar a pasta onde ficaram os scripts de logon:</para>
            <screen><prompt>#</prompt> <userinput>mkdir <filename>/etc/samba/netlogon</filename></userinput></screen>
          </listitem>
          <listitem>
            <para>Execute o seguinte comando para criar a pasta onde ficaram os perfis dos usuários:</para>
            <screen><prompt>#</prompt> <userinput>mkdir <filename>/etc/samba/profiles</filename></userinput></screen>
          </listitem>
          <listitem>
            <para>Execute o seguinte comando garantir que os usuários apenas poderão acrescentar novas pastas dentro da pasta <filename>/etc/samba/profiles</filename>:</para>
            <screen><prompt>#</prompt> <userinput>chmod 1777 <filename>/etc/samba/profiles</filename></userinput></screen>
          </listitem>
        </itemizedlist>
      </listitem>
      <listitem>
        <para>É necessário criar um arquivo chamado <replaceable>usuario</replaceable>.bat dentro da pasta <filename>/etc/samba/netlogon</filename> para cada usuário que for utilizar o samba. Este arquivo deverá ter a seguinte estrutura:</para>
        <screen>
echo @off
NET TIME \\<replaceable>servidor</replaceable> /SET /YES
NET USE U: /HOME /YES
</screen>
        <note>
          <para>Não esqueça de que este arquivo deverá ter suas quebras de linha no formado do Windows.</para>
        </note>
      </listitem>
      <listitem>
        <para>É necessário informar ao Samba qual é a senha do usuário <replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable> usado no servidor OpenLDAP. Para isto execute:</para>
        <screen>
<prompt>#</prompt> <userinput>smbpasswd -w <replaceable>asdf</replaceable></userinput>
Setting stored password for "<replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>" in secrets.tdb
</screen>
      </listitem>
      <listitem>
        <itemizedlist>
          <para>É necessário copiar os arquivos de exemplo de configuração do smbldap-tools e alterar a permissão de um dos arquivos. Para isto execute os passos abaixo.</para>
          <listitem>
            <para>Copie o arquivo <filename>smbldap_bind.conf</filename> para a pasta <filename>/etc/smbldap-tools/</filename>. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>cp <filename>/usr/share/doc/smbldap-tools/examples/smbldap_bind.conf</filename> <filename>/etc/smbldap-tools/</filename></userinput></screen>
          </listitem>
          <listitem>
            <para>Para que apenas o root possa executar operações no servidor OpenLDAP como "<replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>", utilizando as ferramentas do smbldap-tools é necessário alterar a permissão do arquivo <filename>/etc/smbldap-tools/smbldap_bind.conf</filename>. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>chmod 600 /etc/smbldap-tools/smbldap_bind.conf</userinput></screen>
          </listitem>
          <listitem>
            <para>Descompacte o arquivo <filename>smbldap.conf.gz</filename> para a pasta <filename>/etc/smbldap-tools/</filename>. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>gunzip -c <filename>/usr/share/doc/smbldap-tools/examples/smbldap.conf.gz</filename> &gt; <filename>/etc/smbldap-tools/smbldap.conf</filename></userinput></screen>
          </listitem>
        </itemizedlist>
      </listitem>
      <listitem>
        <para>Edite o arquivo <filename>/etc/smbldap-tools/smbldap.conf</filename> para configurar os parâmetros do smbldap-tools.</para>
        <para>O parametro $SID deverá ser igual ao retorno da execução de:</para>
        <screen>
<prompt>#</prompt> <userinput>net getlocalsid</userinput>
SID for domain <replaceable>dc=exemplo,dc=com,dc=br</replaceable> is: S-1-5-21-2794849875-3655903006-2346813305
</screen>
        <table>
          <title>Parâmetros do arquivo /etc/smbldap-tools/smbldap.conf</title>
          <tgroup cols="3">
            <thead>
              <row>
                <entry>Parametro</entry>
                <entry>Valor</entry>
                <entry>Explicação</entry>
              </row>
            </thead>
            <tbody>
              <row>
                <entry>SID</entry>
                <entry>
                  <replaceable>S-1-5-21-2794849875-3655903006-2346813305</replaceable>
                </entry>
                <entry/>
              </row>
              <row>
                <entry>slaveLDAP</entry>
                <entry>"<replaceable>ldap.exemplo.com.br</replaceable>"</entry>
                <entry></entry>
              </row>
              <row>
                <entry>masterLDAP</entry>
                <entry>"<replaceable>ldap.exemplo.com.br</replaceable>"</entry>
                <entry></entry>
              </row>
              <row>
                <entry>ldapTLS</entry>
                <entry>"0"</entry>
                <entry>Não ira usar TLS.</entry>
              </row>
              <row>
                <entry>suffix</entry>
                <entry>"<replaceable>dc=exemplo,dc=com,dc=br</replaceable>"</entry>
                <entry>Sufixo da base no servidor OpenLDAP</entry>
              </row>
              <row>
                <entry>usersdn</entry>
                <entry>"ou=People,${suffix}"</entry>
                <entry/>
              </row>
              <row>
                <entry>computersdn</entry>
                <entry>"ou=Computer,${suffix}"</entry>
                <entry/>
              </row>
              <row>
                <entry>groupsdn</entry>
                <entry>"ou=Group,${suffix}"</entry>
                <entry/>
              </row>
              <row>
                <entry>sambaUnixIdPooldn</entry>
                <entry>"cn=NextFreeUnixId,ou=System,${suffix}"</entry>
                <entry/>
              </row>
              <row>
                <entry>hash_encrypt</entry>
                <entry>"CRYPT"</entry>
                <entry/>
              </row>
              <row>
                <entry>userLoginShell</entry>
                <entry>"/bin/bash"</entry>
                <entry>Shell padrão para os usuários criados.</entry>
              </row>
              <row>
                <entry>userHome</entry>
                <entry>"/home/%U"</entry>
                <entry>Localização da pasta pessoal dos usuários criados.</entry>
              </row>
              <row>
                <entry>defaultUserGid</entry>
                <entry>10000</entry>
                <entry>Grupo padrão para os usuários criados.</entry>
              </row>
              <row>
                <entry>defaultComputerGid</entry>
                <entry>10000</entry>
                <entry>Grupo padrão para os computadores criados.</entry>
              </row>
              <row>
                <entry>userSmbHome</entry>
                <entry>"\\<replaceable>servidor</replaceable>\homes"</entry>
                <entry>Endereço do compartilhamento onde fica a pasta pessoal dos usuários.</entry>
              </row>
              <row>
                <entry>userProfile</entry>
                <entry>"\\<replaceable>servidor</replaceable>\profiles\%U"</entry>
                <entry>Endereço do compartilhamento onde fica o perfil dos usuários.</entry>
              </row>
              <row>
                <entry>userHomeDrive</entry>
                <entry>"U:"</entry>
                <entry>Unidade onde a pasta pessoal do usuário será mapeada.</entry>
              </row>
              <row>
                <entry>mailDomain</entry>
                <entry>"<replaceable>exemplo.com.br</replaceable>"</entry>
                <entry>Domínio para os endereços de correio eletrônico pessoal do usuário.</entry>
              </row>
            </tbody>
          </tgroup>
        </table>
      </listitem>
      <listitem>
        <para>Edite o arquivo <filename>/etc/smbldap-tools/smbldap_bind.conf</filename> para configurar os parâmetros do smbldap-tools.</para>
        <table>
          <title>Parâmetros do arquivo /etc/smbldap-tools/smbldap_bind.conf</title>
          <tgroup cols="2">
            <thead>
              <row>
                <entry>Parametro</entry>
                <entry>Valor</entry>
              </row>
            </thead>
            <tbody>
              <row>
                <entry>slaveDN</entry>
                <entry>"<replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>"</entry>
              </row>
              <row>
                <entry>slavePw</entry>
                <entry>"<replaceable>asdf</replaceable>"</entry>
              </row>
              <row>
                <entry>masterDN</entry>
                <entry>"<replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>"</entry>
              </row>
              <row>
                <entry>masterPw</entry>
                <entry>"<replaceable>asdf</replaceable>"</entry>
              </row>
            </tbody>
          </tgroup>
        </table>
      </listitem>
      <listitem>
        <para>As etapas abaixo devem ser executadas na máquina <replaceable>ldap.exemplo.com.br</replaceable>.</para>
        <itemizedlist>
          <listitem>
            <para>Edite o arquivo <filename>/etc/ldap/slapd.conf</filename>. Estaremos editanto este arquivo para ensinar ao servidor OpenLDAP a <glossterm baseform="Samba">"sambar"</glossterm>.</para>
            <itemizedlist>
              <listitem>
                <para>É necessário incluir o schema do Samba ao servidor OpenLDAP, para isto acrescente abaixo dos includes ja existentes as seguintes linhas:</para>
                <screen>
# Schema for Samba
include         /etc/ldap/schema/samba.schema
</screen>
              </listitem>
              <listitem>
                <para>É necessário informar ao servidor OpenLDAP quais atributos do Samba deverão ser indexados, para isto acrescente abaixo dos index ja existentes as seguintes linhas:</para>
                <screen>
# Index for Samba
index sambaSID              eq
index sambaPrimaryGroupSID  eq
index sambaDomainName       eq
</screen>
              </listitem>
              <listitem>
                <para>É necessário informar ao servidor OpenLDAP uma diretriz de acesso para que os usuários possam alterar sua senha do Samba. Para isto abaixo das linhas:</para>
              <screen>
access to attribute=userPassword,shadowMax,shadowExpire
        by dn="cn=admin,dc=exemplo,dc=com,dc=br" write
        by anonymous auth
        by self write
        by * none
</screen>
                <para>Acrescente as linhas:</para>
                <screen>
# The Samba passwords emtries by default can be changed 
# by the entry owning it if they are authenticated. 
# Others should not be able to see it, except the admin entry below
access to attribute=sambaLmPassword,sambaNtPassword,sambaPwdLastSet,sambaPwdMustChange,sambaPwdCanChange,sambaPasswordHistory
        by dn="<replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>" write
        by anonymous auth
        by self write
        by * none
</screen>
              <warning>
                <para>Não altere a ordem das diretrizes de acesso, pois poderá acarretar em problemas de segurança.</para>
              </warning>
              </listitem>
            </itemizedlist>
          </listitem>
          <listitem>
            <para>Descompacte o arquivo de schema do Samba para a pasta <filename>/etc/ldap/schema/</filename>. Para isto execute:</para>
            <screen><prompt>#</prompt> <userinput>gunzip -c <filename>/usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz</filename> &gt; <filename>/etc/ldap/schema/samba.schema</filename></userinput></screen>
          </listitem>
          <listitem>
            <itemizedlist>
              <para>Precisamos reiniciar e reindexar o OpenLDAP, para isto execute os passos abaixo.</para>
              <listitem>
                <para>Para parar o servidor OpenLDAP execute:</para>
                <screen><prompt>#</prompt> <userinput>invoke-rc.d slapd stop</userinput></screen>
              </listitem>
              <listitem>
                <para>Para reindexar a base do servidor OpenLDAP execute:</para>
                <screen><prompt>#</prompt> <userinput>slapindex</userinput></screen>
              </listitem>
              <listitem>
                <para>Para iniciar o servidor OpenLDAP execute:</para>
                <screen><prompt>#</prompt> <userinput>invoke-rc.d slapd start</userinput></screen>
              </listitem>
            </itemizedlist>
          </listitem>
        </itemizedlist>
      </listitem>
      <listitem>
        <para>É necessário fazer alguns acréscimos manuais a base do servidor OpenLDAP. Para isto siga os passos abaixo.</para>
        <itemizedlist>
          <listitem>
            <para>É necessário criar quatro objetos do tipo organizationalUnit dentro da base do servidor OpenLDAP, onde serão guardados respectivamente os nomes de domínios, informações dos computadores, entradas Idmap (usado pelo Samba para servir membros de domínio) e informações do sistema. Para isto crie um arquivo com o seguinte conteúdo e salve ele com o nome de <filename>organizationalUnit.ldif</filename>.</para>
            <screen>
dn: ou=Domain,<replaceable>dc=exemplo,dc=com,dc=br</replaceable>
objectClass: top
objectClass: organizationalUnit
ou: Domain

dn: ou=Computer,<replaceable>dc=exemplo,dc=com,dc=br</replaceable>
objectClass: top
objectClass: organizationalUnit
ou: Computer

dn: ou=Idmap,<replaceable>dc=exemplo,dc=com,dc=br</replaceable>
objectClass: top
objectClass: organizationalUnit
ou: Idmap

dn: ou=System,<replaceable>dc=exemplo,dc=com,dc=br</replaceable>
objectClass: top
objectClass: organizationalUnit
ou: System
</screen>
            <para>Execute o seguinte comando para adicionar o conteudo do arquivo <filename>organizationalUnit.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>organizationalUnit.ldif</filename> -W</userinput></screen>
          </listitem>
          <listitem>
            <para>É necessário criar um objeto do tipo sambaDomain dentro da base do servidor OpenLDAP, onde será guardado o nome do domínio. Para isto crie um arquivo com o seguinte conteúdo e salve ele com o nome de <filename>sambaDomainName.ldif</filename>.</para>
            <screen>
dn: sambaDomainName=<replaceable>exemplo.com.br</replaceable>,ou=Domain,<replaceable>dc=exemplo,dc=com,dc=br</replaceable>
objectClass: sambaDomain
sambaDomainName: <replaceable>exemplo.com.br</replaceable>
sambaSID: <replaceable>S-1-5-21-2794849875-3655903006-2346813305</replaceable>
sambaAlgorithmicRidBase: 1000
</screen>
            <para>Execute o seguinte comando para adicionar o conteúdo do arquivo <filename>sambaDomainName.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>sambaDomainName.ldif</filename> -W</userinput></screen>
          </listitem>
          <listitem>
            <para>É necessário criar um objeto do tipo sambaUnixIdPool dentro da base do servidor OpenLDAP, onde serão guardados o próximo uidNumber e gidNumber disponiveis. Para isto crie um arquivo com o seguinte conteúdo e salve ele com o nome de <filename>NextFreeUnixId.ldif</filename>.</para>
            <screen>
dn: cn=NextFreeUnixId,ou=System,<replaceable>dc=exemplo,dc=com,dc=br</replaceable>
objectClass: inetOrgPerson
objectClass: sambaUnixIdPool
uidNumber: 10000
gidNumber: 10000
cn: NextFreeUnixId
sn: NextFreeUnixId
</screen>
            <para>Execute o seguinte comando para adicionar o conteúdo do arquivo <filename>NextFreeUnixId.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>NextFreeUnixId.ldif</filename> -W</userinput></screen>
          </listitem>
          <listitem>
            <para>É necessário criar tres objetos do tipo posixGroup dentro da base do servidor OpenLDAP que são grupos basicos para o Samba. Para isto crie um arquivo com o seguinte conteúdo e salve ele com o nome de <filename>posixGroup.ldif</filename>.</para>
            <screen>
dn:cn=Domain Admins,ou=Group,<replaceable>dc=exemplo,dc=com,dc=br</replaceable>
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 512
cn: Domain Admins
description: Netbios Domain Administrators
sambaSID: <replaceable>S-1-5-21-2794849875-3655903006-2346813305</replaceable>-512
sambaGroupType: 2
displayName: Domain Admins
memberUid: administrator

dn:cn=Domain Users,ou=Group,<replaceable>dc=exemplo,dc=com,dc=br</replaceable>
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 513
cn: Domain Users
description: Netbios Domain Users
sambaSID: <replaceable>S-1-5-21-2794849875-3655903006-2346813305</replaceable>-513
sambaGroupType: 2
displayName: Domain Users

dn:cn=Domain Guests,ou=Group,<replaceable>dc=exemplo,dc=com,dc=br</replaceable>
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 514
cn: Domain Guests
description: Netbios Domain Guests Users
sambaSID: <replaceable>S-1-5-21-2794849875-3655903006-2346813305</replaceable>-514
sambaGroupType: 2
displayName: Domain Guests
</screen>
            <para>Execute o seguinte comando para adicionar o conteúdo do arquivo <filename>posixGroup.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>posixGroup.ldif</filename> -W</userinput></screen>
          </listitem>
          <listitem>
É necessário criar dois usuários basicos para o Samba, para isto execute
            <para>É necessário criar dois objeto do tipo posixAccount dentro da base do servidor OpenLDAP que são usuários basicos para o Samba. Para isto crie um arquivo com o seguinte conteúdo e salve ele com o nome de <filename>posixAccount.ldif</filename>.</para>
            <screen>
dn:uid=administrator,ou=People,<replaceable>dc=exemplo,dc=com,dc=br</replaceable>
cn: administrator
sn: administrator
objectClass: inetOrgPerson
objectClass: sambaSAMAccount
objectClass: posixAccount
objectClass: shadowAccount
gidNumber: 512
uid: administrator
uidNumber: 0
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaHomeDrive: U:
sambaProfilePath: \\<replaceable>servidor</replaceable>\profiles\administrator
sambaPrimaryGroupSID: <replaceable>S-1-5-21-2794849875-3655903006-2346813305</replaceable>-512
sambaSID: <replaceable>S-1-5-21-2794849875-3655903006-2346813305</replaceable>-2996
loginShell: /bin/false
gecos: Netbios Domain Administrator
sambaLMPassword: AA25262EEF0F6C9A93E28745B8BF4BA6
sambaAcctFlags: [U]
sambaNTPassword: E5537633F2135796F7276F4555185E12
sambaPwdLastSet: 1101929376
sambaPwdMustChange: 1110482976
userPassword: {CRYPT}wTUucIFdXDeB2
homeDirectory: /home
sambaHomePath: \\<replaceable>servidor</replaceable>\homes\administrator

dn:uid=guest,ou=People,<replaceable>dc=exemplo,dc=com,dc=br</replaceable>
cn: guest
sn: guest
objectClass: inetOrgPerson
objectClass: sambaSAMAccount
objectClass: posixAccount
objectClass: shadowAccount
gidNumber: 514
uid: guest
uidNumber: 999
homeDirectory: /dev/null
sambaPwdLastSet: 0
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaPwdMustChange: 2147483647
sambaHomePath: \\<replaceable>servidor</replaceable>\homes\guest
sambaHomeDrive: U:
sambaProfilePath: \\<replaceable>servidor</replaceable>\profiles\guest
sambaPrimaryGroupSID: <replaceable>S-1-5-21-2794849875-3655903006-2346813305</replaceable>-514
sambaLMPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX
sambaNTPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX
sambaAcctFlags: [NU         ]
sambaSID: <replaceable>S-1-5-21-2794849875-3655903006-2346813305</replaceable>-2998
loginShell: /bin/false
</screen>
            <para>Execute o seguinte comando para adicionar o conteúdo do arquivo <filename>posixAccount.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>posixAccount.ldif</filename> -W</userinput></screen>
          </listitem>
        </itemizedlist>
      </listitem>
      <listitem>
        <para>Precisamos reiniciar o Samba, para isto execute:</para>
        <screen><prompt>#</prompt> <userinput>invoke-rc.d samba restart</userinput></screen>
      </listitem>
    </orderedlist>
  </sect1>
  <sect1>
    <title>Comandos úteis</title>
    <itemizedlist>
      <listitem>
        <para>Para reiniciar o Samba execute:</para>
        <screen><prompt>#</prompt> <userinput>invoke-rc.d samba restart</userinput></screen>
      </listitem>
      <listitem>
        <para>Para criar usuário execute:</para>
        <screen><prompt>#</prompt> <userinput>smbldap-useradd -c "<replaceable>Nome completo</replaceable>" -a <replaceable>usuario</replaceable></userinput></screen>
        <note>
          <para>Pode ser passado o parametro -m para que a pasta pessoal do usuário seja criada.</para>
        </note>
      </listitem>
      <listitem>
        <para>Para apagar usuário execute:</para>
        <screen><prompt>#</prompt> <userinput>smbldap-userdel <replaceable>usuario</replaceable></userinput></screen>
        <note>
          <para>Pode ser passado o parametro -r para que a pasta pessoal do usuário seja apagada.</para>
        </note>
      </listitem>
      <listitem>
        <para>Para alterar a senha do usuário execute:</para>
        <screen><prompt>#</prompt> <userinput>smbldap-passwd <replaceable>usuario</replaceable></userinput></screen>
      </listitem>
      <listitem>
        <para>Para validar o arquivo <filename>/etc/samba/smb.conf</filename>:</para>
        <screen><prompt>#</prompt> <userinput>testparm</userinput></screen>
      </listitem>
    </itemizedlist>
  </sect1>
  <appendix>
    <title>Arquivos de exemplo</title>
    <sect1>
    <title><filename>/etc/ldap/slapd.conf</filename></title>
<screen>
# This is the main slapd configuration file. See slapd.conf(5) for more
# info on the configuration options.

#######################################################################
# Global Directives:

# Features to permit
#allow bind_v2

# Schema and objectClass definitions
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema

# Schema for Samba
include         /etc/ldap/schema/samba.schema

# Schema check allows for forcing entries to
# match schemas for their objectClasses's
schemacheck     on

# Where the pid file is put. The init.d script
# will not stop the server if you change this.
pidfile         /var/run/slapd/slapd.pid

# List of arguments that were passed to the server
argsfile        /var/run/slapd.args

# Read slapd.conf(5) for possible values
loglevel        0

# Search base
defaultsearchbase  <replaceable>dc=exemplo,dc=com,dc=br</replaceable>

# Where the dynamically loaded modules are stored
modulepath	/usr/lib/ldap
moduleload	back_bdb

#######################################################################
# Specific Backend Directives for bdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend		bdb

#######################################################################
# Specific Backend Directives for 'other':
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
#backend		&lt;other&gt;

#######################################################################
# Specific Directives for database #1, of type bdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database        bdb
cachesize       5000
checkpoint      1 60    
mode            0600

# The base of your directory in database #1
suffix          "<replaceable>dc=exemplo,dc=com,dc=br</replaceable>"

# Where the database file are physically stored for database #1
directory       "/var/lib/ldap"

# Indexing options for database #1
index objectClass eq
index default               sub
index cn                    sub,pres,eq
index sn                    sub,pres,eq
index uid                   sub,pres,eq
index displayName           sub,pres,eq

index uidNumber             pres,eq
index gidNumber             pres,eq
index memberUid             pres,eq

# Index for Samba
index sambaSID              eq
index sambaPrimaryGroupSID  eq
index sambaDomainName       eq

# Save the time that the entry gets modified, for database #1
lastmod         on

# Where to store the replica logs for database #1
# replogfile	/var/lib/ldap/replog

# The userPassword by default can be changed
# by the entry owning it if they are authenticated.
# Others should not be able to see it, except the
# admin entry below
# These access lines apply to database #1 only
access to attribute=userPassword,shadowMax,shadowExpire
        by dn="<replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>" write
        by anonymous auth
        by self write
        by * none

# The Samba passwords emtries by default can be changed 
# by the entry owning it if they are authenticated. 
# Others should not be able to see it, except the admin entry below
access to attribute=sambaLmPassword,sambaNtPassword,sambaPwdLastSet,sambaPwdMustChange,sambaPwdCanChange,sambaPasswordHistory
        by dn="<replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>" write
        by anonymous auth
        by self write
        by * none

# Ensure read access to the base for things like
# supportedSASLMechanisms.  Without this you may
# have problems with SASL not knowing what
# mechanisms are available and the like.
# Note that this is covered by the 'access to *'
# ACL below too but if you change that as people
# are wont to do you'll still need this if you
# want SASL (and possible other things) to work 
# happily.
access to dn.base="" by * read

# The admin dn has full write access, everyone else
# can read everything.
access to *
        by dn="<replaceable>cn=admin,dc=exemplo,dc=com,dc=br</replaceable>" write
        by * read

# For Netscape Roaming support, each user gets a roaming
# profile for which they have write access to
#access to dn=".*,ou=Roaming,o=morsnet"
#        by dn="cn=admin,dc=laboratorio" write
#        by dnattr=owner write

#######################################################################
# Specific Directives for database #2, of type 'other' (can be bdb too):
# Database specific directives apply to this databasse until another
# 'database' directive occurs
#database        &lt;other&gt;

# The base of your directory for database #2
#suffix		"dc=debian,dc=org"
      </screen>
    </sect1>
  </appendix>
  <bibliography>
    <title>Bibliografia</title>
    <para>Os seguintes sítios foram usados como base para a criação desta documentação</para>
    <biblioentry>
      <title>The Official Samba-3 HOWTO and Reference Guide</title>
      <releaseinfo><ulink url="http://us3.samba.org/samba/docs/man/Samba-HOWTO-Collection/"/></releaseinfo>
    </biblioentry>
    <biblioentry>
      <title>Samba (v.3) PDC LDAP howto</title>
      <releaseinfo><ulink url="http://www.unav.es/cti/ldap-smb/smb-ldap-3-howto.html"/></releaseinfo>
    </biblioentry>
    <biblioentry>
      <title>SAMBA (v 2.2) PDC LDAP v.3 howto</title>
      <releaseinfo><ulink url="http://www.unav.es/cti/ldap-smb/ldap-smb-2_2-howto.html"/></releaseinfo>
    </biblioentry>
    <biblioentry>
      <title>Configurazione Samba 3 con supporto LDAP su Debian Woody</title>
      <releaseinfo><ulink url="http://www.slag.it/documenti/samba3_ldap_pdc/samba3_ldap_pdc_howto_0.1.0.php"/></releaseinfo>
    </biblioentry>
    <biblioentry>
      <title>The Linux Samba-OpenLDAP Howto</title>
      <releaseinfo><ulink url="http://www.idealx.org/prj/samba/smbldap-howto.en.html"/></releaseinfo>
    </biblioentry>
    <biblioentry>
      <title>Smbldap-tools User Manual</title>
      <releaseinfo><ulink url="http://www.idealx.org/prj/samba/smbldap-tools.en.html"/></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>
    <glossentry>
      <glossterm>Samba</glossterm>
      <glossdef>
        <para>O samba é um ritmo brasileiro, nascido nos morros do Rio de Janeiro, entre os negros ex-escravos e seus descendentes. O primeiro samba gravado, Pelo telefone, de Donga, foi gravado no ano de 1917. Consta que é uma composição coletiva.</para>
        <para>Origem: <ulink url="http://pt.wikipedia.org/wiki/Samba">Wikipédia, a enciclopédia livre.</ulink></para>
      </glossdef>
    </glossentry>
  </glossary>
</article>
