Samba e LDAP

Esta seção cobre a configuração de Samba para utilizar LDAP para usuário, grupo e informação e autenticação de conta de máquina. O pressuposto é que você já tem um diretório OpenLDAP instalado e funcionando e que o servidor está configurado para ser usado para autenticação. Veja “Servidor OpenLDAP” e “Autenticação LDAP” para detalhes sobre configuração de OpenLDAP.

Instalação

Existem três pacotes necessários quando integra-se Samba com LDAP. Pacotes samba, samba-doc, e smbldap-tools. Para instalar os pacotes, a partir de um terminal digite:

sudo apt-get install samba samba-doc smbldap-tools

Estritamente falando, o pacote smbldap-tools não é necessário mas, a menos que você tenha outro pacote ou scripts customizados, será necessário um método para gerenciar usuários, grupos e contas do computador.

Configuração do OpenLDAP

Para que Samba use OpenLDAP como uma passdb infraestrutura, os objetos do usuário no diretório necessitarão de atributos adicionais. Esta seção assume que você quer que Samba seja configurado omo um controlador de domínio Windows NT e que adicionará objetos e atributos LDAP.

  • Os atributos de Samba são definidos no arquivo samba.schema que é parte do pacote samba-doc. O arquivo do esquema necessita ser descompactado e copiado para /etc/ldap/schema. A partir de um prompt de terminal, entre:

    sudo cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/
    sudo gzip -d /etc/ldap/schema/samba.schema.gz
    
  • O esquema samba necessita ser adicionado à árvore cn=config. O procedimento para adicionar um novo esquema a slapd está também detalhado em “Configuração”.

    1. Primeiro, criar um arquivo de configuração chamado schema_convert.conf, ou um nome descritivo semelhante, contendo as seguintes linhas:

      include /etc/ldap/schema/core.schema
      include /etc/ldap/schema/collective.schema
      include /etc/ldap/schema/corba.schema
      include /etc/ldap/schema/cosine.schema
      include /etc/ldap/schema/duaconf.schema
      include /etc/ldap/schema/dyngroup.schema
      include /etc/ldap/schema/inetorgperson.schema
      include /etc/ldap/schema/java.schema
      include /etc/ldap/schema/misc.schema
      include /etc/ldap/schema/nis.schema
      include /etc/ldap/schema/openldap.schema
      include /etc/ldap/schema/ppolicy.schema
      include /etc/ldap/schema/samba.schema
      
    2. Em seguida, crie um diretório temporário para armazenar o resultado:

      mkdir /tmp/ldif_output
      
    3. Agora utilize slaptest para converter os arquivos de esquemas:

      slaptest -f schema_convert.conf -F /tmp/ldif_output
      

      Altere os nomes de arquivo e de caminho acima para coincidirem com o seu próprio se eles forem diferentes.

    4. Edite o arquivo gerado /tmp/ldif_output/cn=config/cn=schema/cn={12}samba.ldif, alterando os seguintes atributos:

      dn: cn=samba,cn=schema,cn=config
      ...
      cn: samba
      

      E remover as seguintes linhas a partir da parte inferior do arquivo:

      structuralObjectClass: olcSchemaConfig
      entryUUID: b53b75ca-083f-102d-9fff-2f64fd123c95
      creatorsName: cn=config
      createTimestamp: 20080827045234Z
      entryCSN: 20080827045234.341425Z#000000#000#000000
      modifiersName: cn=config
      modifyTimestamp: 20080827045234Z
      
      [Nota]

      O valores dos atributos irão variar, basta ter a certeza que os atributos são removidos.

    5. Finalmente, usando o utilitário ldapadd, adicionar o novo esquema para o diretório:

      ldapadd -x -D cn=admin,cn=config -W -f /tmp/ldif_output/cn\=config/cn\=schema/cn\=\{12\}samba.ldif
      

    Agora, deverá haver, na árvore cn=config, uma entrada dn: cn={X}misc,cn=schema,cn=config, onde "X" é o próximo esquema sequencial.

  • Copie e cole o seguinte em um arquivo chamado samba_indexes.ldif:

    dn: olcDatabase={1}hdb,cn=config
    changetype: modify
    add: olcDbIndex
    olcDbIndex: uidNumber eq
    olcDbIndex: gidNumber eq
    olcDbIndex: loginShell eq
    olcDbIndex: uid eq,pres,sub
    olcDbIndex: memberUid eq,pres,sub
    olcDbIndex: uniqueMember eq,pres
    olcDbIndex: sambaSID eq
    olcDbIndex: sambaPrimaryGroupSID eq
    olcDbIndex: sambaGroupType eq
    olcDbIndex: sambaSIDList eq
    olcDbIndex: sambaDomainName eq
    olcDbIndex: default sub
    

    Usando o utilitário ldapmodify para carregar os novos índices:

    ldapmodify -x -D cn=admin,cn=config -W -f samba_indexes.ldif
    

    Se tudo correu bem você verá os novos índices usando ldapsearch:

    ldapsearch -xLLL -D cn=admin,cn=config -x -b cn=config -W olcDatabase={1}hdb
    
  • A seguir, configure o pacote smbldap-tools para atender a seu ambiente. O pacote vem com um script de configuração que lhe fará perguntas sobre as opções necessárias. Para executar o script, entre:

    sudo gzip -d /usr/share/doc/smbldap-tools/configure.pl.gz
    sudo perl /usr/share/doc/smbldap-tools/configure.pl
    

    Uma vez que você tenha respondido às perguntas, deverão estar presentes os arquivos /etc/smbldap-tools/smbldap.conf e /etc/smbldap-tools/smbldap_bind.conf. Estes arquivos são gerados pelo script de configuração. Assim, se você cometeu algum engano durante a execução do script, pode ser que seja mais simples editar adequadamente o arquivo.

  • O script smbldap-populate adicionará os usuários, grupos e objetos LDAP requeridos por Samba. É uma boa ideia fazer um backup do arquivo LDAP Data Interchange Format (LDIF) com slapcat antes de executar o comando:

    sudo slapcat -l backup.ldif
    
  • Assim que você tiver um backup atual, execute smbldap-populate entrando:

    sudo smbldap-populate
    
    [Nota]

    Você pode criar um arquivo LDIF contendo os novos objetos Samba através da execução de sudo smbldap-populate -e samba.ldif. Isto permite que você veja as mudanças, assegurando-se que tudo está correto.

O seu diretório LDAP tem agora as informações de domínios necessárias para autenticar os usuários Samba.

Configuração do Samba

Há várias formas para configurar Samba. Para detalhes sobre algumas configurações comuns, veja Capítulo 15, Rede Windows. Para configurar Samba para usar LDAP, edite o arquivo principal de configuração do Samba /etc/samba/smb.conf inserindo marcas de comentário na opção passdb infraestrutura e adicionando o seguinte:

#   passdb backend = tdbsam

# LDAP Settings
   passdb backend = ldapsam:ldap://hostname
   ldap suffix = dc=example,dc=com
   ldap user suffix = ou=People
   ldap group suffix = ou=Groups
   ldap machine suffix = ou=Computers
   ldap idmap suffix = ou=Idmap
   ldap admin dn = cn=admin,dc=example,dc=com
   ldap ssl = start tls
   ldap passwd sync = yes
...
   add machine script = sudo /usr/sbin/smbldap-useradd -t 0 -w "%u"

Reinicie o samba para ativar as novas configurações:

sudo /etc/init.d/samba restart

Agora o Samba necessita saber a senha de administrador LDAP. A partir de um terminal prompt digite:

sudo smbpasswd -w secret
[Nota]

Substituindo secret com sua senha admin LDAP.

Se você tem, no momento, usuários em LDAP e deseja que eles se autentiquem usando Samba, eles precisarão alguns atributos de Samba definidos no arquivo samba.schema. Adicione os atributos Samba para usuários existentes usando o utilitário smbpasswd, substituindo username com um usuário real:

sudo smbpasswd -a username

Será então pedido a você para entrar a senha do usuário.

Para adicionar um novo usuário, grupo ou conta de máquina, use os utilitários do pacote smbldap-tools. Aqui estão alguns exemplos:

  • Para adicionar um novo usuário a LDAP com atributos Samba, entre o seguinte, substituind username com um nome de usuário real:

    sudo smbldap-useradd -a -P username
    

    A opção -a adiciona os atributos Samba e a opção -P chama o utilitário smbldap-passwd depois que o usuário for criado, permitindo a você entrar uma senha para aquele usuário.

  • Para remover um usuário do diretório, entre:

    sudo smbldap-userdel username
    

    O utilitário smbldap-userdel também tem uma opção -r para remover o diretório pessoal do usuário.

  • Use smbldap-groupadd para adicionar um grupo, substituindo groupname por um grupo apropriado:

    sudo smbldap-groupadd -a groupname
    

    De forma similar a smbldap-useradd, a opção -a adiciona os atributos Samba.

  • Para adicionar um usuário a um grupo use smbldap-groupmod:

    sudo smbldap-groupmod -m username groupname
    

    Assegure-se de substituir username por um usuário real. Também, a opção -m pode adicionar mais que um usuário de cada vez, listando-os em formato separado por vírgulas.

  • smbldap-groupmod também pode ser usado para remover usuário do grupo:

    sudo smbldap-groupmod -x username groupname
    
  • Além disso, o utilitário smbldap-useradd pode adicionar contas de máquinas Samba:

    sudo smbldap-useradd -t 0 -w username
    

    Substitua username pelo nome da estação de trabalho. A opção -t 0 cria a conta de máquina sem retardo, enquanto a opção -w especifica um usuário como uma conta de máquina. Observe, também, que a opção add machine script em /etc/samba/smb.conf foi alterada para usar smbldap-useradd.

Há mais utilitários e opções úteis no pacote smbldap-tools. A página do manual para cada utilitário fornece mais detalhes.

Recursos

  • Há vários locais em que LDAP e Samba estão documentados em Samba HOWTO Collection.

  • Especificamente, veja a seção passdb.

  • Outro bom site é Samba OpenLDAP HOWTO.

  • Mais uma vez, para mais informações sobre smbldap-tools, veja as páginas do manual: man smbldap-useradd, man smbldap-groupadd, man smbldap-populate, etc.