27
Mario Luiz Bernardinelli [email protected] 22 de outubro de 2012 v1.6 Autentica¸ ao centralizada usando OpenLDAP e exemplos com Samba e Linux Aautentica¸c˜ ao centralizada evita v´ arios problemas enfrentados por usu´ arios e administradores: memoriza¸ ao de v´ arias contas (e senhas) e o gerenciamento de contas, respectivamente. No GNU/Linux, ´ e poss´ ıvel implementar a autentica¸c˜ ao centralizada usando o OpenLDAP. Este documento foi escrito usando um ambiente com GNU/Linux e Samba (operando como PDC), ambos autenticando diretamente no servi¸co OpenLDAP. Como o intuito ´ e fornecer o caminho das pedras para uma confi- gura¸c˜ ao b´ asica, quest˜ oes como backup,replica¸c˜ ao de dados e suporte ao SSL/TLS, todas suportadas pelo OpenLDAP, n˜ ao s˜ ao abordadas neste documento. 1. Introdu¸ ao A diversidade de tipos de servi¸ cos dispon´ ıveis numa rede, seja ela de qualquer tamanho, tende a crescer com tempo. Novas necessidades surgem a todo momento e novos servi¸ cos s˜ ao disponibilizados nas redes. Muitos destes servi¸cos requerem a autentica¸c˜ ao de usu´ arios, por exemplo, o que obriga num primeiro momento, que sejam criadas contas para cada indiv´ ıduo em cada um destes servi¸cos. Duplicidade de dados duplicadas surgem em decorrˆ encia disso. O trabalho e a complexidade na administra¸ ao destes ambientes cresce quase que exponencialmente. A integra¸ ao de diversos ambientes, de diferentes fabricantes e tecnologias nem sempre ´ e f´ acil ou mesmo poss´ ıvel. O LDAP ´ e um protocolo de acesso ` a diret´ orios que permite a centraliza¸ ao de dados, permitindo que diversos sistemas consultem bases de dados centralizadas, eliminando problemas de duplicidade de dados. O software discutido aqui ´ e o OpenLDAP, que ´ e uma implementa¸c˜ ao open source do LDAP que pode ser executada em ambientes GNU/Linux. O OpenLDAP possui diversas caracter´ ısticas muito interessantes, tais como replica¸c˜ ao de dados, suporte SSL/TLS. Neste documento ser˜ ao apresentadas as configura¸ oes b´ asicas do servi¸co LDAP para integr´ a-lo com o GNU/Linux e Samba. Quest˜ oes como replica¸ ao de dados e uso de SSL/TLS, que ´ e imprescind´ ıvel para a seguran¸ca do sistema, n˜ ao ser˜ ao discutidas aqui. Estes assuntos ser˜ ao deixados para uma vers˜ ao futura deste artigo, ou at´ e mesmo, um artigo espec´ ıfico para isso. Como este documento ´ e mais um how to (como fazer) do que um artigo propriamente dito, muitas das configura¸ oes aqui apresentadas seguiram sugest˜ oes apresentadas por (SUNGAILA, 2008) e (OPENLDAP, 2011). Notas: Windows, MS-Windows e Microsoft Windows s˜ ao marcas registradas da Microsoft Corporation. 2. LDAP: configura¸ ao tradicional versus configura¸ ao online A forma tradicional de configura¸c˜ ao do OpenLDAP consiste em adicionar os parˆ ametros de configura¸ ao num ´ unico arquivo, normalmente o slapd.conf. Esta forma de configura¸c˜ ao tem seus pr´ os e contras. Um dos pr´ os ´ e que torna a configura¸c˜ ao mais f´ acil de entender. Por outro lado, o contra ´ e que toda vez que a configura¸ ao ´ e alterada, o servi¸ co deve ser reiniciado para que as altera¸c˜ oes sejam carregadas. Uma nova forma de configura¸c˜ ao foi criada para resolver este problema, conhecida como runtime configu- ration ou simplesmente cn=config. Esta forma permite que o administrador altere os parˆ ametros em tempo deexecu¸c˜ ao, ou seja, as altera¸c˜ oes s˜ ao carregadas sem que o servi¸co tenha que ser totalmente reiniciado. [email protected] Autentica¸ c˜ao centralizada usando OpenLDAP e exemplos com Samba e Linux 1 de 27

LDAP Server Howto

  • Upload
    junior

  • View
    39

  • Download
    1

Embed Size (px)

DESCRIPTION

LDAP SERVER

Citation preview

  • Mario Luiz [email protected]

    22 de outubro de 2012

    v1.6

    Autenticacao centralizadausando OpenLDAP e

    exemplos com Samba e LinuxA autenticacao centralizada evita varios problemas enfrentados porusuarios e administradores: memorizacao de varias contas (e senhas)e o gerenciamento de contas, respectivamente.No GNU/Linux, e possvel implementar a autenticacao centralizadausando o OpenLDAP. Este documento foi escrito usando um ambientecom GNU/Linux e Samba (operando como PDC), ambos autenticandodiretamente no servico OpenLDAP.Como o intuito e fornecer o caminho das pedras para uma confi-guracao basica, questoes como backup, replicacao de dados e suporteao SSL/TLS, todas suportadas pelo OpenLDAP, nao sao abordadasneste documento.

    1. Introducao

    A diversidade de tipos de servicos disponveis numa rede, seja ela de qualquer tamanho, tende a crescercom tempo. Novas necessidades surgem a todo momento e novos servicos sao disponibilizados nas redes.

    Muitos destes servicos requerem a autenticacao de usuarios, por exemplo, o que obriga num primeiromomento, que sejam criadas contas para cada indivduo em cada um destes servicos. Duplicidade de dadosduplicadas surgem em decorrencia disso. O trabalho e a complexidade na administracao destes ambientes crescequase que exponencialmente.

    A integracao de diversos ambientes, de diferentes fabricantes e tecnologias nem sempre e facil ou mesmopossvel. O LDAP e um protocolo de acesso a` diretorios que permite a centralizacao de dados, permitindo quediversos sistemas consultem bases de dados centralizadas, eliminando problemas de duplicidade de dados.

    O software discutido aqui e o OpenLDAP, que e uma implementacao open source do LDAP que pode serexecutada em ambientes GNU/Linux.

    O OpenLDAP possui diversas caractersticas muito interessantes, tais como replicacao de dados, suporteSSL/TLS. Neste documento serao apresentadas as configuracoes basicas do servico LDAP para integra-lo como GNU/Linux e Samba. Questoes como replicacao de dados e uso de SSL/TLS, que e imprescindvel para aseguranca do sistema, nao serao discutidas aqui. Estes assuntos serao deixados para uma versao futura desteartigo, ou ate mesmo, um artigo especfico para isso.

    Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas dasconfiguracoes aqui apresentadas seguiram sugestoes apresentadas por (SUNGAILA, 2008) e (OPENLDAP,2011).

    Notas:

    Windows, MS-Windows e Microsoft Windows sao marcas registradas da Microsoft Corporation.

    2. LDAP: configuracao tradicional versus configuracao online

    A forma tradicional de configuracao do OpenLDAP consiste em adicionar os parametros de configuracaonum unico arquivo, normalmente o slapd.conf. Esta forma de configuracao tem seus pros e contras. Umdos pros e que torna a configuracao mais facil de entender. Por outro lado, o contra e que toda vez que aconfiguracao e alterada, o servico deve ser reiniciado para que as alteracoes sejam carregadas.

    Uma nova forma de configuracao foi criada para resolver este problema, conhecida como runtime configu-ration ou simplesmente cn=config. Esta forma permite que o administrador altere os parametros em tempode execucao, ou seja, as alteracoes sao carregadas sem que o servico tenha que ser totalmente reiniciado.

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 1 de 27

  • Na configuracao baseada no cn=config, os parametros sao carregados em memoria seguindo o formatoDIT (Directory Information Tree), que e uma arvore. A grande vantagem disso e que esta arvore de parametrose similar a` qualquer outra arvore da base de dados do LDAP, permitindo que os parametros sejam alteradosutilizando-se a mesma interface de utilizada para acesso a`s bases de dados. Isto permite que as configuracoessejam alteradas utilizando arquivos no formato LDIF e que as mesmas sejam assumidas imediatamente apos acarga e/ou alteracao, sem a necessidade de reinicializacao do servico LDAP.

    Segundo a documentacao, esta nova forma de configuracao tornou-se disponvel a` partir da versao 2.3do OpenLDAP. na versao 2.4 do OpenLDAP, esta configuracao ainda e opcional, mas a tendencia e que elapasse a ser padrao nas proximas versoes, inclusive, podendo substituir completamente a configuracao tradicional(slapd.conf).

    Alguns cuidados devem ser tomados no uso do novo formato de configuracao:

    Como trata-se de um formato novo, o suporte ainda esta incompleto. Por exemplo, a remocao de confi-guracoes ainda exige a reinicializacao do servico.

    As alteracoes tem efeito imediato, entao, e preciso muito cuidado ao alterar as ACLs (Access ControlList).

    Uma vez gerada a configuracao no formato cn=config (o pacote OpenLDAP tras uma ferramenta capazde fazer isto), nao ha nenhuma ferramenta que converta o formato cn=config novamente para o formatoslapd.conf.

    2.1. cn=config: estrutura

    Vejamos a estrutura de um diretorio de configuracao no formato cn=config armazenado em /etc/ldap/slapd.d:

    1 /etc/ldap/slapd.d/

    2 +-- cn=config

    3 | +-- cn=module0.ldif

    4 | +-- cn=schema

    5 | | +-- cn=0core.ldif

    6 | | +-- cn=1cosine.ldif

    7 | | +-- cn=2nis.ldif

    8 | | +-- cn=3inetorgperson.ldif

    9 | | +-- cn=4samba.ldif

    10 | | +-- cn=5autofs.ldif

    11 | +-- cn=schema.ldif

    12 | +-- olcDatabase=0config.ldif

    13 | +-- olcDatabase=1bdb.ldif

    14 | +-- olcDatabase=-1frontend.ldif

    15 +-- cn=config.ldif

    Observe que todos os arquivos de configuracao agora estao no formato LDIF, que e um formato texto noqual os parametros (ou atributos) sao separados de seus valores pelo caractere dois pontos.

    O arquivo cn=config.ldif contem as configuracoes globais que antes eram armazenadas no arquivoslapd.conf. Todos os atributos usados pelo OpenLDAP possuem o prefixo olc(OpenLDAP Configuration).

    Alguns arquivos e/ou diretorios possuem tambem numeros, como por exemplo, cn=0core.ldif, que e umaforma de indicar a ordem de carregamento do arquivo.

    O conteudo basico do diretorio de configuracao e o seguinte:

    cn=config.ldif: Contem os parametros globais de configuracao. cn=config: Contem os arquivos e/ou diretorios com as demais configuracoes. cn=module{NUMERO}: Armazena a configuracao de um modulo, o que equivale ao parametromoduleload do arquivo slapd.conf. Observe que, para cada modulo adicionado, deve ser criado um

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 2 de 27

  • novo arquivo com um numero diferente dos demais. Este numero ira indicar a ordem de carregamento domodulo.

    cn=schema: Neste diretorio ficam armazenados os schemas utilizados. olcDatabase={-1}frontend.ldif: e uma base de dados especial que contem as configuracoes que serao

    aplicadas a` todas as demais bases de dados. Se uma diretiva deste arquivo for repetida na configuracaoda base de dados especfica, valera o valor especificado na configuracao especfica da base. Portanto, osparametros aqui especificados podem ser considerados valores padroes que, se nao forem reconfiguradosnas configuracoes especficas, serao utilizados como definidos aqui.

    olcDatabase={NUMERO}[backend].ldif: Definicao da base de dados especfica. Os valores aquidefinidos podem sobrescrever os valores definidos globalmente. O olcDatabase de numero zero (0) e oproprio cn=config.

    3. Instalando os pacotes

    Vamos fazer a instalacao dos pacotes necessarios em quatro etapas, a saber:

    Pacotes para o servico LDAP Pacotes para a autenticacao do Linux (contas POSIX) Servidor Samba Pacotes para a manipulacao de base de dados LDAP para autenticacao de estacoes Windows c(Samba) e

    POSIX (Linux)

    Este documento e baseado em sistemas Debian, porem, o ambiente de teste utilizado foi um Ubuntu. Sevoce estiver usando o Ubuntu, instale primeiro o aptitude:

    1 apt-get install aptitude

    Ou, se preferir, utilize o apt-get para instalar os softwares apresentados a seguir.

    Vamos partir para a instalacao dos softwares.

    3.1. Pacotes para o servico LDAP

    Estes pacotes so devem ser instalados no servidor de autenticacao. Durante a instalacao dos pacotes aseguir, serao solicitadas algumas informacoes como senha do administrador e nome do domnio da empresa.Preencha com qualquer valor, ou assuma os valores padroes (se apresentados), pois iremos reconfigurar todo osistema manualmente, para entendermos o funcionamento com detalhes.

    1 aptitude install slapd ldap-utils

    3.2. Pacotes para autenticacao de clientes Linux no LDAP

    1 aptitude install libpam-ldap libnss-ldap ldap-utils nscd

    Nota: o pacote nscd so tem utilidade para maquinas Linux clientes.

    3.3. Pacotes para o servico Samba

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 3 de 27

  • 1 aptitude install samba samba-client

    3.4. Pacotes de ferramentas

    O smblda-tools contem ferramentas para manipular contas Windows ce POSIX e suporte a` criacao debase de dados LDAP para contas Windows c(Samba) e POSIX (Linux).

    1 aptitude install smbldap-tools

    4. Configuracao do LDAP

    Nesta etapa iremos configurar o LDAP com as configuracoes necessarias para a criacao das bases de dadosde autenticacao POSIX e Windows c(Samba).

    Antes de iniciarmos o processo, devemos ter em maos algumas informacoes: precisamos do nome do domnioda empresa e de uma senha para o administrador do servico LDAP. Vamos utilizar os seguintes valores:

    Domnio da empresa: EMPRESA Senha do administrador: (invente uma senha que seja forte)As versoes mais atuais do OpenLDAP utilizam um mecanismo de configuracao baseado em inumeros ar-

    quivos e diretorios armazenados normalmente em /etc/ldap/slapd.d. Utilizaremos, porem, a forma convencionalde configurar o OpenLDAP, que utiliza apenas um arquivo de configuracao. Depois de criado o arquivo deconfiguracao, utilizaremos uma ferramenta do proprio OpenLDAP que faz as conversoes necessarias.

    Precisaremos criar uma senha para o administrador da base LDAP e adicionar o seu hash no arquivo deconfiguracao (onde indicado pelo parametro rootpw). Para criar o hash da senha, utilize o comando slappasswda seguinte forma:

    1 slappasswd

    2 New password:

    3 Re-enter new password:

    4 SSHAolrVkiKDx4P/omI55IatjsVQMfFUSZln

    Adicione a linha contendo o hash no parametro rootpw do arquivo de configuracao.

    A configuracao do OpenLDAP deve ser realizada atraves do arquivo /etc/ldap/slapd.conf. O exemploa seguir apresenta as configuracoes basicas para a autenticacao Windows c(Samba) e POSIX. Observe, noentanto, que o nome da empresa (domnio) deve ser alterado em funcao das suas necessidades (veja o parametrorootdn no arquivo de configuracao). O exemplo apresentado ja contempla as configuracoes necessarias paraautenticacao de contas POSIX e Samba.

    1 # ------------ /etc/ldap/slapd.conf

    2 # slapd.conf

    3 #

    4 # EMPRESA

    5 #

    6

    7 # Protocol version

    8 allow bind_v2

    9

    10

    11 # Schemas

    12 include /etc/ldap/schema/core.schema

    13 include /etc/ldap/schema/cosine.schema

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 4 de 27

  • 14 include /etc/ldap/schema/nis.schema

    15 include /etc/ldap/schema/inetorgperson.schema

    16 include /etc/ldap/schema/samba.schema

    17

    18 # X.509 certificate

    19 #TLSCipherSuite HIGH:MEDIUM:+SSLv2:RSA

    20 #TLSCipherSuite HIGH:MEDIUM:-SSL2:+RSA

    21 #TLSCipherSuite +AES-256-CBC:+AES-128-CBC:+SHA256:+RSA

    22 #TLSCertificateFile /etc/ldap/ssl/certs/ldap.pem

    23 #TLSCertificateKeyFile /etc/ldap/ssl/certs/ldap.key

    24

    25 # Process control files

    26 pidfile /var/run/slapd/slapd.pid

    27 argsfile /var/run/slapd/slapd.args

    28

    29 # Modules

    30 modulepath /usr/lib/ldap

    31 moduleload back_bdb

    32

    33 # Backend type

    34 backend bdb

    35

    36 # Database type

    37 database bdb

    38

    39 # No limit for retrieving records

    40 sizelimit unlimited

    41

    42 # Directory structure and management

    43 suffix "dc=EMPRESA"

    44 rootdn "cn=admin,dc=EMPRESA"

    45 rootpw SSHAolrVkiKDx4P/omI55IatjsVQMfFUSZln

    46

    47 # Database directory (storage)

    48 directory /var/lib/ldap

    49

    50 # Search indexes

    51 index objectClass eq

    52 index cn,sn,givenName eq,sub,approx

    53 index mail eq,sub

    54 index uid,uidNumber,gidNumber,memberUid,loginShell eq

    55 index default eq,sub

    56 index sambaSID eq

    57 index sambaPrimaryGroupSID eq

    58 index SambaDomainName eq

    59

    60 # ACLs

    61

    62 # Root dir access

    63 access to dn.exact=""

    64 by * read

    65

    66 # Password access control (TLS)

    67 #access to attrs=userPassword,sambaLMPassword,sambaNTPassword

    68 # by anonymous ssf=56 auth

    69 # by self ssf=56 write

    70 # by * none

    71

    72 # Password access control (without TLS)

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 5 de 27

  • 73 access to attrs=userPassword,sambaLMPassword,sambaNTPassword

    74 by anonymous auth

    75 by self write

    76 by * none

    77

    78 # Password changes date and time

    79 access to attrs=shadowLastChange

    80 by self write

    81 by * none

    82

    83 # Global access

    84 access to *

    85 by * read

    Como este arquivo ja contempla as configuracoes necessarias para o Samba, precisamos adicionar ao di-retorio /etc/ldap/schema o esquema da base de dados do Samba. Este esquema acompanha o pacote do Sambae devemos copia-lo manualmente. Execute os seguintes comando para fazer isso:

    1 cd /etc/ldap/schema/

    2 cp /usr/share/doc/samba/examples/LDAP/samba.schema.gz .

    3 gunzip samba.schema.gz

    Agora, vamos parar o servico LDAP:

    1 root@server # invoke-rc.d slapd stop

    2 Stopping OpenLDAP: slapd.

    Como estamos configurando o LDAP do zero, vamos remover a base de dados atual:

    1 rm -f /var/lib/ldap/*

    Agora vamos criar o arquivo /var/lib/ldap/DB\_CONFIG, que contem configuracoes especficas para basedados e que deve sempre ser mantido no diretorio da base de dados LDAP (/var/lib/ldap):

    1 #-----/var/lib/ldap/DB_CONFIG

    2 set_cachesize 0 2097152 0

    3 set_lk_max_objects 1500

    4 set_lk_max_locks 1500

    5 set_lk_max_lockers 1500

    Agora vamos alterar as permissoes do arquivo, ja que o LDAP deve poder le-lo:

    1 chown openldap:openldap /var/lib/ldap/*

    Agora vamos converter a configuracao do OpenLDAP para o novo formato. Devemos criar o diretorio deconfiguracao. Antes disso, porem, vamos remover o diretorio existente, se existir:

    1 rm -rf /etc/ldap/slapd.d

    2 mkdir /etc/ldap/slapd.d

    Para evitar confusoes futuras, vamos renomear o arquivo de configuracao do OpenLDAP para ficar claroque o sistema nao utiliza este arquivo, mas sim as configuracoes especificadas no diretorio /etc/slapd.d:

    1 mv slapd.conf slapd.conf.old

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 6 de 27

  • Para converter o arquivo de configuracao slapd.conf.old para o novo formato, vamos utilizar o aplicativoslaptest, que e parte do OpenLDAP:

    1 slaptest -f slapd.conf.old -F /etc/ldap/slapd.d

    2 bdb_db_open: database "dc=EMPRESA": db_open(/var/lib/ldap/id2entry.bdb) failed:

    3 No such file or directory (2).

    4 backend_startup_one (type=bdb, suffix="dc=EMPRESA"): bi_db_open failed! (2)

    5 slap_startup failed (test would succeed using the -u switch)

    Observe que ocorreram alguns erros, que sao esperados, porque a base de dados ainda nao existe.

    Como executamos os comandos como root e o OpenLDAP e executado por um usuario de privilegiosreduzidos (openldap, no caso do Debian), devemos alterar as permissoes dos arquivos da base de dados e deconfiguracao:

    1 chown openldap:openldap /var/lib/ldap/*

    2 chown -R openldap:openldap /etc/ldap/slapd.d

    Edite o arquivo /etc/default/slapd e procure pelo parametro SLAPD_CONF e deixe-o em branco (se janao estiver):

    1 #---- trecho do arquivo /etc/default/slapd

    2 ...

    3 SLAPD_CONF=

    4 ...

    Isto ira garantir que o slapd utilizara o novo formato de configuracao que esta em /etc/slapd.

    Vamos iniciar o servico LDAP:

    1 invoke-rc.d slapd start

    2 * Starting OpenLDAP slapd [ OK ]

    Verifique se o servico esta em execucao:

    1 netstat -ntpul | grep slap

    2 tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 3415/slapd

    3 tcp6 0 0 :::389 :::* LISTEN 3415/slapd

    Atencao:

    Sempre que remover uma base da dados LDAP, antes de iniciar o slapd o arquivo DB CONFIG deve sercriado no diretorio /var/lib/ldap.

    Sempre que a base de dados LDAP for removida, inicie o servico slapd antes de tentar reindexa-la, paraque a base, mesmo que vazia, seja efetivamente criada.

    Sempre que a base de dados for reindexada, devemos alterar o proprietario dos arquivos, pois a indexacao erealizada como root, mas o servico LDAP no Debian e sempre executado como um usuario sem privilegiosadministrativos (usuario openldap e grupo openldap). A base de dados pode ser reindexada atraves docomando slapindex.

    Como nossa base de dados esta vazia, nao ha necessidade de reindexa-la.

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 7 de 27

  • 4.1. Restaurar a base de dados

    Se voce estiver substituindo ou instalando um servidor de backup, e bem provavel que voce tenha umacopia da base de dados LDAP do servidor outro servidor.

    Se o outro servidor estiver em operacao, voce pode fazer uma copia de seguranca da base de dados erestaura-la agora.

    Basicamente, ha varias formas de fazer o backup da base de dados LDAP:

    Copiar os arquivos do diretorio /var/lib/ldap, incluindo os arquivos de log contidos neste mesmo di-retorio, pois estes arquivos contem as informacoes de transacoes realizadas.

    Realizar um dump da base de dados em arquivo texto para posterior recuperacao. neste caso, apenas odump sera necessario para a recuperacao.

    O ideal e fazer o backup pelos dois metodos (o seguro morreu de velho :)).

    O dump da base pode ser realizado pelo comando ldapsearch, mas ha alguns problemas:

    Como a base e acessada em tempo de execucao (online), as restricoes de consulta e acesso serao aplicadase, portanto, sera necessario o uso da conta de administrador da base para a execucao do backup.

    O numero de linhas retornado pelo comando ldapsearch e limitado, por padrao, e isto pode inviabilizaro seu uso em bases grandes. Para contornar este problema, deve ser inserido o seguinte parametro nosarquivos /etc/ldap/ldap.conf e /etc/ldap.conf:

    1 SIZELIMIT 0

    Alem disso, o seguinte parametro deve ser configurado no arquivo /etc/ldap/slapd.conf:

    1 sizelimit unlimited

    Uma segunda forma de realizar o dump da base LDAP e usar o comando slapcat. Este utilitario acessadiretamente os arquivos da base de dados, nao tendo nenhuma interferencia das ACLs definidas. Ele pode serusado com o slapd em execucao, mas o prorpio manual sugere que e melhor que o slapd nao esteja em execucaono momento do backup, a fim de evitar inconsistencias caso ocorram operacoes de escrita na base durante aexecucao da copia de seguranca.

    Em linhas gerais, o backup com o slapcat pode ser executado da seguinte forma:

    1 invoke-rc.d slapd stop

    2 slapcat -l ARQUIVO_DE_BACKUP.ldif

    3 invoke-rc.d slapd start

    Em linhas gerais, o dump gerado pelo slapcat nao pode ser utilizado como entrada para o comandoldapadd, pois o dump e realizado na ordem dos registros na base, e nao na ordem da estrutura de diretorios. Abase de dados pode ser reconstruda (restaurada) usando o comando slapadd (observe que nao e o ldapadd).

    Para restaurar a base de dados no servidor novo, execute os seguintes comandos (observe que o servicodeve ser encerrado antes da restauracao):

    1 invoke-rc.d slapd stop

    2 slapadd -g -F /etc/ldap/slapd.d -q -b dc=EMPRESA -l ARQUIVO_DE_BACKUP.ldif

    Antes de iniciar o servico, altere as permissoes dos arquivos de configuracao e base de dados:

    1 chown openldap:openldap /var/lib/ldap/*

    2 chown -R openldap:openldap /etc/ldap/slapd.d

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 8 de 27

  • Agora o servico slapd pode ser iniciado:

    1 invoke-rc.d slapd start

    Para testar se a base de dados foi restaurada, podemos usar o comando ldpapsearch. Este utilitario possuiinumeras opcoes, mas para nosso objetivo, o comando a seguir e suficiente:

    1 ldapsearch -x -b "dc=EMPRESA" "(objectclass=*)"

    Substitua EMPRESA pelo DC da empresa, lembrando que ele deve ser completo, conforme configurado noOpenLDAP. Por exemplo: dc=empresa,dc=com,dc=br.

    O comando apresentado ira mostrar todos os registros da base de dados LDAP.

    Tambem podemos procurar por um determinado usuario na base de dados, como apresentado no exemploa seguir:

    1 ldapsearch -x -b "dc=EMPRESA" "(uid=antonio)"

    Neste exemplo, como a base de dados continha dados das contas POSIX (Linux) e Samba, o resultado foio seguinte:

    1 # extended LDIF

    2 #

    3 # LDAPv3

    4 # base with scope subtree

    5 # filter: (uid=antonio)

    6 # requesting: ALL

    7 #

    8

    9 # antonio, Users, EMPRESA

    10 dn: uid=antonio,ou=Users,dc=EMPRESA

    11 objectClass: top

    12 objectClass: person

    13 objectClass: organizationalPerson

    14 objectClass: inetOrgPerson

    15 objectClass: posixAccount

    16 objectClass: shadowAccount

    17 objectClass: sambaSamAccount

    18 cn: antonio

    19 sn: antonio

    20 givenName: antonio

    21 uid: antonio

    22 uidNumber: 1053

    23 gidNumber: 513

    24 homeDirectory: /home/antonio

    25 gecos: System User

    26 sambaLogonTime: 0

    27 sambaLogoffTime: 2147483647

    28 sambaKickoffTime: 2147483647

    29 sambaPwdCanChange: 0

    30 displayName: mario

    31 sambaPrimaryGroupSID: S-1-5-21-1011439938-2526806255-774746513-513

    32 sambaLogonScript: antonio.cmd

    33 sambaSID: S-1-5-21-1011439938-2526806255-774746513-3092

    34 loginShell: /bin/bash

    35 sambaAcctFlags: [U]

    36 sambaPwdLastSet: 1305544325

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 9 de 27

  • 37 sambaPwdMustChange: 1313320325

    38 shadowLastChange: 15110

    39 shadowMax: 10000000

    40

    41 # search result

    42 search: 2

    43 result: 0 Success

    44

    45 # numResponses: 2

    46 # numEntries: 1

    4.2. Configuracao das ferramentas basicas do OpenLDAP

    Configure o arquivo /etc/libnss-ldap.conf (substitua EMPRESA pelo nome do domnio):

    1 host 127.0.0.1

    2

    3 # The distinguished name of the search base.

    4 base dc=EMPRESA

    5

    6 # The LDAP version to use (defaults to 3

    7 # if supported by client library)

    8 ldap_version 3

    9

    10 # The distinguished name to bind to the server with

    11 # if the effective user ID is root. Password is

    12 # stored in /etc/libnss-ldap.secret (mode 600)

    13 # Use echo -n "mypassword" > /etc/libnss-ldap.secret instead

    14 # of an editor to create the file.

    15 rootbinddn cn=admin,dc=EMPRESA

    Crie/altere o arquivo /etc/libnss-ldap.secret para que tenha apenas uma linha com a senha do admi-nistrador do LDAP (admin, em nosso exemplo). Exemplo:

    1 senha_do_admin_ldap

    Por questoes de seguranca, altere as permissoes do arquivo /etc/libnss-ldap.secret:

    1 chmod 600 /etc/libnss-ldap.secret

    2 chown roo:root /etc/libnss-ldap.secret

    Para facilitar o uso dos comandos e integrar o NSS com o LDAP, crie um link simbolico para o arquivo deconfiguracao no diretorio /etc/ldap:

    1 cd /etc/ldap

    2 mv ldap.conf ldap.conf.old

    3 ln -s ../libnss-ldap.conf ldap.conf

    Esta alteracao se faz necessaria porque os utilitarios do OpenLDAP procuram as configuracoes em /etc/ldap/ldap.conf, porem, outras ferramentas, como as de sistema, procuram as configuracoes do LDAP em /etc/libnss-ldap.conf. Como os dois arquivos devem possuir o mesmo conteudo, ao criarmos um link simbolico,evitamos problemas com a sincronizacao dos arquivos (isto e, mante-los sempre com o mesmo conteudo).

    No caso do Ubuntu, verifiquei que ele tambem utiliza os arquivos /etc/ldap.conf e /etc/ldap.secret.Para evitar problemas, vamos criar tambem os links para estes arquivos apontando para os arquivos libnss-ldap.conf e libnss-ldap.secret:

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 10 de 27

  • 1 cd /etc

    2 ln -sf libnss-ldap.secret /etc/ldap.secret

    3 ln -sf libnss-ldap.conf /etc/ldap.conf

    5. Configuracao basica do Samba

    Antes de configurarmos o Linux para autenticar no LDAP, vamos configurar um PDC basico com Samba. Arazao disso e que vamos utilizar o smbldap-tools para criar e popular a base de dados LDAP e esta ferramentacria as bases tanto para contas POSIX (Linux), como Windows c(Samba).

    O Samba e configurado atraves do arquivo /etc/samba/smb.conf. Os detalhes de configuracao nao seraoexplorados aqui, mas o arquivo de configuracao de um PDC basico e apresentado a seguir. Note que este arquivoja contempla as configuracoes necessarias para acesso a` base de dados LDAP, que criaremos mais tarde.

    1 #---- /etc/samba/smb.conf

    2 [global]

    3 #-----------------------------------------

    4 # Domain information

    5 #-----------------------------------------

    6 workgroup = EMPRESA

    7 server string = EMPRESAs Domain Controller

    8 netbios name = vmubuntu

    9

    10 #-----------------------------------------

    11 # Log

    12 #-----------------------------------------

    13 log file = /var/log/samba/%m.log

    14 max log size = 500

    15 log level = 1

    16

    17 #-----------------------------------------

    18 # Name resolution

    19 #-----------------------------------------

    20 name resolve order = lmhosts wins bcast

    21 dos charset = CP850

    22 unix charset = UTF-8

    23 display charset = UTF-8

    24 wins support = Yes

    25

    26 #-----------------------------------------

    27 # Security and authentication

    28 #-----------------------------------------

    29 security = user

    30 encrypt passwords = true

    31 passdb backend = ldapsam:ldap://127.0.0.1/

    32 username map = /etc/samba/smbusers

    33

    34 #-----------------------------------------

    35 # Printing

    36 #-----------------------------------------

    37 load printers = No

    38 # printing = cups

    39 # printcap name = cups

    40

    41 #-----------------------------------------

    42 # PDC options

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 11 de 27

  • 43 #-----------------------------------------

    44 domain logons = Yes

    45 logon script = %U.cmd

    46

    47 #-----------------------------------------

    48 # Disable remote profiles

    49 #-----------------------------------------

    50 logon path =

    51 logon home =

    52 logon drive =

    53

    54 #-----------------------------------------

    55 # Domain browser options

    56 #-----------------------------------------

    57 #preferred master = auto

    58 #domain master = auto

    59 preferred master = Yes

    60 domain master = Yes

    61 local master = yes

    62 os level = 100

    63 time server = Yes

    64 remote announce = 10.1.255.255

    65

    66 #-----------------------------------------

    67 # LDAP parameters.

    68 #-----------------------------------------

    69 ldap admin dn = cn=admin,dc=EMPRESA

    70 ldap ssl = off

    71 ldap delete dn = no

    72 ldap user suffix = ou=Users

    73 ldap group suffix = ou=Groups

    74 ldap machine suffix = ou=Computers

    75 ldap suffix = dc=EMPRESA

    76 # Allow mambers of "Domain Admins" to add computers into the domain

    77 enable privileges = yes

    78

    79

    80 #-----------------------------------------

    81 # Allow the automatic creation of machine accounts

    82 # on domain joins.

    83 #-----------------------------------------

    84 add user script = /usr/sbin/smbldap-useradd -m "%u"

    85 delete user script = /usr/sbin/smbldap-userdel "%u"

    86

    87 add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u"

    88

    89 add group script = /usr/sbin/smbldap-groupadd -p "%g"

    90 #delete group script = /usr/sbin/smbldap-groupdel "%g"

    91

    92 add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"

    93 delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"

    94

    95 set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"

    96

    97 # Password synchronization

    98 passwd program = /usr/sbin/smbldap-passwd -u "%u"

    99 passwd chat = "Changing*\nNew*password*" %n\n "*Retype*new*password*" %n\n100 ldap password sync = yes

    101 unix password sync = yes

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 12 de 27

  • 102

    103

    104 #-----------------------------------------

    105 # ACL control through Windows Explorer

    106 # To this options run, it is necessary to add the following options

    107 # to the file fstab: "acl,user_xattr" for all shared partitions

    108 #-----------------------------------------

    109 map acl inherit = Yes

    110 inherit acls = Yes

    111 inherit permissions = Yes

    112 nt acl support = Yes

    113

    114 #-----------------------------------------

    115 # Client access

    116 #-----------------------------------------

    117 hosts allow = 10.0., 127.

    118

    119

    120 #-----------------------------------------

    121 # Network options

    122 #-----------------------------------------

    123 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

    124

    125 #obey pam restrictions = Yes

    126 #smb passwd file = /etc/samba/smbpasswd

    127 #pam password change = Yes

    128 #passwd program = /usr/bin/passwd %u

    129 #passwd chat = *New*password* %n\n *Retype*new*password* %n\n \130 # *passwd:*all*authentication*tokens*updated*successfully*

    131 #unix password sync = Yes

    132 #add machine script = /usr/sbin/useradd -g machines -c Workstation -d /dev/null \133 # -s /sbin/false %u

    134 #dns proxy = No

    135

    136

    137 #-----------------------------------------

    138 # Domain administrators group

    139 #-----------------------------------------

    140 admin users = @"Domain Admins"

    141

    142 #-----------------------------------------

    143 # Allow the user authentication through smb_auth (Squid)

    144 #-----------------------------------------

    145 lanman auth = yes

    146

    147 [netlogon]

    148 comment = Network Logon Service

    149 path = /var/lib/samba/netlogon

    150 write list = root

    151 browseable = yes

    152

    153 [infra]

    154 comment = Infra estrutura

    155 path = /EMPRESA/infra

    156 valid users = "@Domain Users"

    157 read list = "@Domain Users"

    158 write list = "@Domain Users"

    159 read only = No

    160 create mask = 0775

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 13 de 27

  • 161 directory mask = 02775

    162 browseable = No

    Este arquivo de configuracao assume o seguinte:

    Ja possui as configuracoes para acesso ao LDAP (smbldap-tools, que ainda nao configuramos). E um controlador de domnio (security=user). O nome NetBIOS do servidor e vmubuntu (netbiosname=vmubuntu). Assume que o nome do domnio e EMPRESA (workgroup=EMPRESA). Esta configurado para aceso atraves da rede 10.0.0.0/16 (hosts allow = 10.0., 127.). Assume que o servidor LDAP esta instalado no proprio servidor (passdbbackend=ldapsam:ldap://127.0.0.1/).

    Possui dois compartilhamentos: um de sistema (netlogon) e outro de dados (infra).Observando a configuracao do Samba apresentada no exemplo, devemos criar o diretorio de armazenamento

    dos scripts de logon dos usuarios:

    1 mkdir /var/lib/samba/netlogon

    Alem disso, tambem devemos criar o diretorio especificado para os compartilhamentos. No caso do exemplo,deveramos criar o diretorio /EMPRESA/infra:

    1 mkdir -p /EMPRESA/infra

    Tambem pode ser necessario alterar as permissoes do diretorio, mas vamos deixar isso por conta dasnecessidades da aplicacao real.

    Antes de iniciarmos o samba, devemos armazenar a senha do administrador do LDAP no arquivo de controledo samba, o secrets.tdb (/var/lib/samba/secrets.tdb):

    1 smbpasswd -w senhaDoManager

    2 Setting stored password for "cn=admin,dc=EMPRESA" in secrets.tdb

    Alem disso, vamos obter o SID do domnio para adiciona-lo na configuracao do smbldap-tools, que reali-zaremos posteriormente:

    1 net getlocalsid EMPRESA

    2 SID for domain empresa is: S-1-5-21-2860471069-3029604567-4147374860

    Anote o SID obtido, pois ele sera necessario na configuracao do smbldap-tools.

    Vamos parar o servico Samba. Se estivermos usando o Debian (considerando a versao 6.x - Squeeze), ocomando e o seguinte:

    1 invoke-rc.d samba stop

    Ja se for o Ubuntu, e provavel que o sistema ja esteja utilizando o upstart, que e uma variacao do init.Neste caso, os comandos devem ser os seguintes:

    1 stop nmbd

    2 nmbd stop/waiting

    3 stop smbd

    4 smbd stop/waiting

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 14 de 27

  • Agora, vamos reiniciar o Samba:

    Para os sistemas que utilizam o init (Debian 6.x, por exemplo):

    1 invoke-rc.d samba stop

    Para os sistemas que utilizam o upstart (como o Ubuntu 11.10, por exemplo):

    1 start smbd

    2 smbd start/running, process 3555

    3 start nmbd

    4 nmbd start/running, process 3563

    Agora precisamos criar a base de dados e popula-la com os usuarios e grupos basicos necessarios para odomnio Windows c.

    6. Configuracao do smbldap-tools

    As configuracoes do smbldap-tools sao armazenadas no diretorio /etc/smbldap-tools, porem, este di-retorio pode nao ser criado automaticamente na instalacao, portanto, maos a obra:

    1 mkdir /etc/smbldap-tools

    2 cd /etc/smbldap-tools

    3 cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf .

    4 cp /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz .

    5 gunzip smbldap.conf

    Altere o arquivo smbldap_bind.conf conforme a seguir (nos parametros de senha, coloque a senha domanager que voce configurou):

    1 #----- /etc/smbldap-tools/smbldap_bind.conf

    2 slaveDN="cn=admin,dc=EMPRESA"

    3 slavePw="senha_do_manager"

    4 masterDN="cn=admin,dc=EMPRESA"

    5 masterPw="senha_do_manager"

    Por questoes de seguranca, permita acesso a este arquivo apenas ao root:

    1 chown root:root /etc/smbldap-tools/smbldap_bind.conf

    2 chmod 600 /etc/smbldap-tools/smbldap_bind.conf

    Agora, precisamos configurar alguns parametros do domnio armazenado na base do LDAP, atraves doarquivo /etc/smbldap-tools/smbldap.conf, apresentado a seguir (a maioria dos comentarios foram removidosdo exemplo a seguir). Os comentarios originais foram mantidos, por serem uma boa referencia de documentacao.E de extrema importancia que os parametros sejam verificados um a um e adequados a`s necessidades daaplicacao. Segue o arquivo /etc/smbldap-tools/smbldap.conf:

    1 #----- /etc/smbldap-tools/smbldap.conf

    2 ##############################################################################

    3 #

    4 # General Configuration

    5 #

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 15 de 27

  • 6 ##############################################################################

    7

    8 # Put your own SID. To obtain this number do: "net getlocalsid".

    9 # If not defined, parameter is taking from "net getlocalsid" return

    10 SID="S-1-5-21-2860471069-3029604567-4147374860"

    11

    12 # Domain name the Samba server is in charged.

    13 # If not defined, parameter is taking from smb.conf configuration file

    14 # Ex: sambaDomain="IDEALX-NT"

    15 sambaDomain="EMPRESA"

    16

    17 ##############################################################################

    18 #

    19 # LDAP Configuration

    20 #

    21 ##############################################################################

    22

    23 # Notes: to use to dual ldap servers backend for Samba, you must patch

    24 # Samba with the dual-head patch from IDEALX. If not using this patch

    25 # just use the same server for slaveLDAP and masterLDAP.

    26 # Those two servers declarations can also be used when you have

    27 # . one master LDAP server where all writing operations must be done

    28 # . one slave LDAP server where all reading operations must be done

    29 # (typically a replication directory)

    30

    31 # Slave LDAP server

    32 # Ex: slaveLDAP=127.0.0.1

    33 # If not defined, parameter is set to "127.0.0.1"

    34 slaveLDAP="127.0.0.1"

    35

    36 # Slave LDAP port

    37 # If not defined, parameter is set to "389"

    38 slavePort="389"

    39

    40 # Master LDAP server: needed for write operations

    41 # Ex: masterLDAP=127.0.0.1

    42 # If not defined, parameter is set to "127.0.0.1"

    43 masterLDAP="127.0.0.1"

    44

    45 # Master LDAP port

    46 # If not defined, parameter is set to "389"

    47 #masterPort="389"

    48 masterPort="389"

    49

    50 # Use TLS for LDAP

    51 # If set to 1, this option will use start_tls for connection

    52 # (you should also used the port 389)

    53 # If not defined, parameter is set to "0"

    54 ldapTLS="0"

    55

    56 # Use SSL for LDAP

    57 # If set to 1, this option will use SSL for connection

    58 # (standard port for ldaps is 636)

    59 # If not defined, parameter is set to "0"

    60 ldapSSL="0"

    61

    62 # How to verify the servers certificate (none, optional or require)

    63 # see "man Net::LDAP" in start_tls section for more details

    64 verify="require"

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 16 de 27

  • 65

    66 # CA certificate

    67 # see "man Net::LDAP" in start_tls section for more details

    68 cafile="/etc/smbldap-tools/ca.pem"

    69

    70 # certificate to use to connect to the ldap server

    71 # see "man Net::LDAP" in start_tls section for more details

    72 clientcert="/etc/smbldap-tools/smbldap-tools.EMPRESA.pem"

    73

    74 # key certificate to use to connect to the ldap server

    75 # see "man Net::LDAP" in start_tls section for more details

    76 clientkey="/etc/smbldap-tools/smbldap-tools.EMPRESA.key"

    77

    78 # LDAP Suffix

    79 # Ex: suffix=dc=IDEALX,dc=ORG

    80 suffix="dc=EMPRESA"

    81

    82 # Where are stored Users

    83 # Ex: usersdn="ou=Users,dc=IDEALX,dc=ORG"

    84 # Warning: if suffix is not set here, you must set the full dn for usersdn

    85 usersdn="ou=Users,${suffix}"86

    87 # Where are stored Computers

    88 # Ex: computersdn="ou=Computers,dc=IDEALX,dc=ORG"

    89 # Warning: if suffix is not set here, you must set the full dn for computersdn

    90 computersdn="ou=Computers,${suffix}"91

    92 # Where are stored Groups

    93 # Ex: groupsdn="ou=Groups,dc=IDEALX,dc=ORG"

    94 # Warning: if suffix is not set here, you must set the full dn for groupsdn

    95 groupsdn="ou=Groups,${suffix}"96

    97 # Where are stored Idmap entries (used if samba is a domain member server)

    98 # Ex: groupsdn="ou=Idmap,dc=IDEALX,dc=ORG"

    99 # Warning: if suffix is not set here, you must set the full dn for idmapdn

    100 idmapdn="ou=Idmap,${suffix}"101

    102 # Where to store next uidNumber and gidNumber available for new users and groups

    103 # If not defined, entries are stored in sambaDomainName object.

    104 # Ex: sambaUnixIdPooldn="sambaDomainName=$sambaDomain,${suffix}"105 # Ex: sambaUnixIdPooldn="cn=NextFreeUnixId,${suffix}"106 sambaUnixIdPooldn="sambaDomainName=$sambaDomain,${suffix}"107

    108 # Default scope Used

    109 scope="sub"

    110

    111 # Unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT)

    112 hash_encrypt="SSHA"

    113

    114 # if hash_encrypt is set to CRYPT, you may set a salt format.

    115 # default is "%s", but many systems will generate MD5 hashed

    116 # passwords if you use "$1$%.8s". This parameter is optional!

    117 crypt_salt_format="%s"

    118

    119 ##############################################################################

    120 #

    121 # Unix Accounts Configuration

    122 #

    123 ##############################################################################

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 17 de 27

  • 124

    125 # Login defs

    126 # Default Login Shell

    127 # Ex: userLoginShell="/bin/bash"

    128 userLoginShell="/bin/bash"

    129

    130 # Home directory

    131 # Ex: userHome="/home/%U"

    132 userHome="/home/%U"

    133

    134 # Default mode used for user homeDirectory

    135 userHomeDirectoryMode="700"

    136

    137 # Gecos

    138 userGecos="System User"

    139

    140 # Default User (POSIX and Samba) GID

    141 defaultUserGid="513"

    142

    143 # Default Computer (Samba) GID

    144 defaultComputerGid="515"

    145

    146 # Skel dir

    147 skeletonDir="/etc/skel"

    148

    149 # Default password validation time (time in days) Comment the next line if

    150 # you dont want password to be enable for defaultMaxPasswordAge days (be

    151 # careful to the sambaPwdMustChange attributes value)

    152 defaultMaxPasswordAge="180"

    153

    154 ##############################################################################

    155 #

    156 # SAMBA Configuration

    157 #

    158 ##############################################################################

    159

    160 # The UNC path to home drives location (%U username substitution)

    161 # Just set it to a null string if you want to use the smb.conf logon home

    162 # directive and/or disable roaming profiles

    163 # Ex: userSmbHome="\\PDC-SMB3\%U"164 userSmbHome=""

    165

    166 # The UNC path to profiles locations (%U username substitution)

    167 # Just set it to a null string if you want to use the smb.conf logon path

    168 # directive and/or disable roaming profiles

    169 # Ex: userProfile="\\PDC-SMB3\profiles\%U"170 userProfile=""

    171

    172 # The default Home Drive Letter mapping

    173 # (will be automatically mapped at logon time if home directory exist)

    174 # Ex: userHomeDrive="H:"

    175 userHomeDrive=""

    176

    177 # The default user netlogon script name (%U username substitution)

    178 # if not used, will be automatically username.cmd

    179 # make sure script file is edited under dos

    180 # Ex: userScript="startup.cmd" # make sure script file is edited under dos

    181 userScript="%U.cmd"

    182

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 18 de 27

  • 183 # Domain appended to the users "mail"-attribute

    184 # when smbldap-useradd -M is used

    185 # Ex: mailDomain="idealx.com"

    186 mailDomain="EMPRESA"

    187

    188 ##############################################################################

    189 #

    190 # SMBLDAP-TOOLS Configuration (default are ok for a RedHat)

    191 #

    192 ##############################################################################

    193

    194 # Allows not to use smbpasswd (if with_smbpasswd == 0 in smbldap_conf.pm) but

    195 # prefer Crypt::SmbHash library

    196 with_smbpasswd="0"

    197 smbpasswd="/usr/bin/smbpasswd"

    198

    199 # Allows not to use slappasswd (if with_slappasswd == 0 in smbldap_conf.pm)

    200 # but prefer Crypt:: libraries

    201 with_slappasswd="0"

    202 slappasswd="/usr/sbin/slappasswd"

    203

    204 # comment out the following line to get rid of the default banner

    205 # no_banner="1"

    ATENCAO: Os parametros apresentados servem para instalacoes novas. Se ja existir um servidor OpenL-DAP no ambiente, as configuracoes do pacote smbldap-tool precisarao ser identicas a`s do servidor original.

    Os principais parametros que precisam ser editados sao os seguintes:

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 19 de 27

  • Parametro Comentarios

    SID ID do domnio.

    sambaDomain Nome do domnio.

    slaveLDAP Servidor LDAP escravo (se houver um segundo servidor, para dis-ponibilidade). Se nao houver use o mesmo host do servidor mestre.

    slavePort Porta de acesso no servidor escravo.

    masterLDAP Servidor LDAP mestre.

    masterPort Porta de acesso ao servidor mestre.

    ldapTLS Ajustar para zero significa nao ter seguranca na comunicacao, ehabilitar este parametro implica em configuracoes especficas decriptografia, nao cobertas neste documento.

    caFile, clientcert e clientkey Somente para casos em que SSL/TLS forem utilizados.

    suffix Sufixo do domnio, com as partes precedidas pelos sufixos doLDAP.

    hash encrypt Funcao de hash a ser utilizada para o armazenamento das senhasdos usuarios. Normalmente, pode ser uma das seguintes opcoes:CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT. Nao e preciso dizer que,por questoes de seguranca, a ultima opcao (CLEARTEXT) nao deveser utilizada.

    userLoginShell Interpretador de comandos (shell) padrao para usuariosGNU/Linux.

    userHome Diretorio home do usuario.

    defaultUserGid Grupo padrao dos usuarios.

    defaultComputerGid Grupo padrao para as contas de maquinas.

    userSmbHome Deixe branco para desabilitar diretorio home para usuariosWindows c.

    userProfile Deixe em branco para desabilitar a gravacao do perfil (desktop dousuario).

    userHomeDrive Deixe em brando para desabilitar a unidade a ser mapeada comohome do usuario.

    userScript Define o nome do script de logon do usuario Windows c.

    Ha alguns grupos necessarios para o domnio Samba que ainda nao foram criados. Podemos fazer issoatraves do utilitario smbldap-populate (digite a senha do root quando solicitado, no final da execucao):

    ATENCAO: So e necesario popular base de dados se voce estiver criando uma nova base de dados. Sevoce restaurou uma copia de seguranca da base de dados, nao e necessario popula-la, pois ela ja contem osregistros necessarios.

    1 smbldap-populate

    2 Populating LDAP directory for domain EMPRESA (S-1-5-21-2860471069-3029604567-4147374860)

    3 (using builtin directory structure)

    4

    5 adding new entry: dc=EMPRESA

    6 adding new entry: ou=Users,dc=EMPRESA

    7 adding new entry: ou=Groups,dc=EMPRESA

    8 adding new entry: ou=Computers,dc=EMPRESA

    9 adding new entry: ou=Idmap,dc=EMPRESA

    10 adding new entry: uid=root,ou=Users,dc=EMPRESA

    11 adding new entry: uid=nobody,ou=Users,dc=EMPRESA

    12 adding new entry: cn=Domain Admins,ou=Groups,dc=EMPRESA

    13 adding new entry: cn=Domain Users,ou=Groups,dc=EMPRESA

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 20 de 27

  • 14 adding new entry: cn=Domain Guests,ou=Groups,dc=EMPRESA

    15 adding new entry: cn=Domain Computers,ou=Groups,dc=EMPRESA

    16 adding new entry: cn=Administrators,ou=Groups,dc=EMPRESA

    17 adding new entry: cn=Account Operators,ou=Groups,dc=EMPRESA

    18 adding new entry: cn=Print Operators,ou=Groups,dc=EMPRESA

    19 adding new entry: cn=Backup Operators,ou=Groups,dc=EMPRESA

    20 adding new entry: cn=Replicators,ou=Groups,dc=EMPRESA

    21 adding new entry: sambaDomainName=EMPRESA,dc=EMPRESA

    22

    23 Please provide a password for the domain root:

    24 Changing UNIX and samba passwords for root

    25 New password:

    26 Retype new password:

    Agora, se desejado, podemos remover o usuario root da base LDAP e adicionar o usuario administrator :

    1 smbldap-userdel root

    2

    3 smbldap-useradd -a administrator

    4

    5 smbldap-groupmod -m administrator "Domain Admins"

    Agora podemos verificar se o SID do domnio foi corretamente inserido na base de dados LDAP:

    1 ldapsearch -x -LLL | grep -i sid

    2 sambaPrimaryGroupSID: S-1-5-21-2860471069-3029604567-4147374860-512

    3 sambaSID: S-1-5-21-2860471069-3029604567-4147374860-500

    4 sambaPrimaryGroupSID: S-1-5-21-2860471069-3029604567-4147374860-514

    5 sambaSID: S-1-5-21-2860471069-3029604567-4147374860-2998

    6 sambaSID: S-1-5-21-2860471069-3029604567-4147374860-512

    7 sambaSID: S-1-5-21-2860471069-3029604567-4147374860-513

    8 sambaSID: S-1-5-21-2860471069-3029604567-4147374860-514

    9 sambaSID: S-1-5-21-2860471069-3029604567-4147374860-515

    10 sambaSID: S-1-5-32-544

    11 sambaSID: S-1-5-32-548

    12 sambaSID: S-1-5-32-550

    13 sambaSID: S-1-5-32-551

    14 sambaSID: S-1-5-32-552

    15 sambaSID: S-1-5-21-2860471069-3029604567-4147374860

    Agora ja poderamos ate inserir usuarios do domnio Windows c, usando as ferramentas smbldap-tools,porem, como nosso objetivo e tambem usar a autenticacao centralizada para clientes Linux, vamos configura-laantes de fazer os testes.

    7. Configuracao do Linux para autenticacao na base LDAP

    Nosso objetivo iniciar era autenticar os usuarios Linux numa base de dados centralizada LDAP. Como nossoservidor LDAP tambem poderia autenticar usuarios do domnio Windows c, partimos para a configuracao doSamba, ja que uma das ferramentas de manipulacao de contas de usuario em bases LDAP que suporta contasde domnio Windos, tambem e capaz manipular as contas POSIX (Linux).

    Uma vez que configuramos esta ferramenta (smbldap-tools), vamos agora configurar o Linux para autenticarno LDAP. Observe que esta configuracao serve tambem para as estacoes de trabalho Linux.

    Observe que nas estacoes de trabalho nao deve ser instalado o slapd, mas apenas os pacotes especficos declientes, conforme descrito no captulo de instalacao dos softwares.

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 21 de 27

  • 7.1. Configuracao do libnss-ldap

    Como parte da configuracao do cliente, que tambem deve ser efetuada no servidor, vamos descrever aconfiguracao do libnss-ldap. observe que nos ja fizemos esta configuracao durante o proceso de configuracao doservidor OpenLDAP, mas a repetimos aqui para que fique claro a configuracao dos clientes Linux.

    Configure o arquivo /etc/libnss-ldap.conf (substitua EMPRESA pelo nome do domnio):

    1 host 127.0.0.1

    2

    3 # The distinguished name of the search base.

    4 base dc=EMPRESA

    5

    6 # The LDAP version to use (defaults to 3

    7 # if supported by client library)

    8 ldap_version 3

    9

    10 # The distinguished name to bind to the server with

    11 # if the effective user ID is root. Password is

    12 # stored in /etc/libnss-ldap.secret (mode 600)

    13 # Use echo -n "mypassword" > /etc/libnss-ldap.secret instead

    14 # of an editor to create the file.

    15 rootbinddn cn=admin,dc=EMPRESA

    Crie (ou altere, se existir) o arquivo /etc/libnss-ldap.secret para que tenha apenas uma linha com asenha do administrador do LDAP (admin, em nosso exemplo). Exemplo:

    1 senha_do_admin_ldap

    Por questoes de seguranca, altere as permissoes do arquivo /etc/libnss-ldap.secret:

    1 chmod 600 /etc/libnss-ldap.secret

    2 chown roo:root /etc/libnss-ldap.secret

    Para facilitar o uso dos comandos e integrar o NSS com o LDAP, crie um link simbolico para o arquivo deconfiguracao no diretorio /etc/ldap:

    1 cd /etc/ldap

    2 mv ldap.conf ldap.conf.old

    3 ln -s ../libnss-ldap.conf ldap.conf

    Esta alteracao se faz necessaria porque os utilitarios do OpenLDAP procuram as configuracoes em /etc/ldap/ldap.conf, porem, outras ferramentas, como as de sistema, procuram as configuracoes do LDAP em/etc/libnss-ldap.conf e, em suma, os dois arquivos sao similares e devem ter o mesmo conteudo. Assim,ao criarmos um link simbolico, evitamos problemas com a sincronizacao dos arquivos (isto e, mante-los semprecom o mesmo conteudo).

    No caso do Ubuntu, verifiquei que ele tambem utiliza os arquivos /etc/ldap.conf e /etc/ldap.secret.Para evitar problemas, vamos criar tambem os links para estes arquivos apontando para os arquivos libnss-ldap.conf e libnss-ldap.secret:

    1 cd /etc

    2 ln -sf libnss-ldap.secret /etc/ldap.secret

    3 ln -sf libnss-ldap.conf /etc/ldap.conf

    Reinicie o servico ldap:

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 22 de 27

  • 1 invoke-rc.d slapd restart

    7.2. Configuracao do PAM

    Precisamos configurar adequadamente o PAM para que o sistema operacional consulte a base LDAP paraa autenticacao dos usuarios. uma vez configurado corretamente o PAM, todas as aplicacoes que autenticaremusuarios usando o PAM ja estarao automaticamente fazendo a autenticacao na base LDAP. Este e o caso, porexemplo, dos servicos SSH, Telnet e FTP.

    Antes de fazermos as alteracoes, convem que sejam efetuadas copias de seguranca dos arquivos originais.

    Edite o arquivo /etc/nsswitch.conf conforme a seguir:

    1 # /etc/nsswitch.conf

    2 #

    3 # (MLB): changed authentication to the LDAP

    4 #

    5 passwd: files ldap

    6 group: files ldap

    7 shadow: files ldap

    8

    9 hosts: files dns

    10 networks: files

    11

    12 protocols: db files

    13 services: db files

    14 ethers: db files

    15 rpc: db files

    16

    17 netgroup: ldap

    Edite (ou crie, se nao existir) crie o arquivo /etc/pam_ldap.conf conforme a seguir:

    1 host 127.0.0.1

    2 base dc=EMPRESA

    3 ldap_version 3

    4 rootbinddn cn=admin,dc=EMPRESA

    5 pam_password SSHA

    Crie, ou altere, o arquivo /etc/pam_ldap.secret para que tenha apenas uma linha com a senha doadministrador do LDAP (admin, em nosso exemplo). Exemplo:

    1 senha_do_admin_ldap

    Altere as permissoes do arquivo /etc/pam_ldap.secret:

    1 chmod 600 /etc/pam_ldap.secret

    2 chown roo:root /etc/pam_ldap.secret

    Reinicie o ldap e o nscd:

    1 invoke-rc.d slapd restart

    2 invoke-rc.d nscd restart

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 23 de 27

  • Edite o arquivo /etc/pam.d/commom-account e deixe-o assim:

    1 #----- /etc/pam.d/common-account

    2 # MLB

    3 # PAM+LDAP

    4 #

    5 #account required pam_unix.so try_first_pass

    6 #account sufficient pam_succeed_if.so uid > 1000 quiet

    7 #account [default=bad success=ok user_unknown=ignore] pam_ldap.so

    8 #account required pam_permit.so

    9

    10 #account sufficient pam_ldap.so

    11 #account required pam_unix.so try_first_pass

    12

    13 account required pam_unix.so try_first_pass

    14 account sufficient pam_succeed_if.so uid < 500 quiet

    15 account [default=bad success=ok user_unknown=ignore] pam_ldap.so

    16 account required pam_permit.so

    Edite o arquivo /etc/pam.d/commom-auth e deixe-o assim:

    1 #----- /etc/pam.d/common-auth

    2 auth sufficient pam_unix.so nullok_secure

    3 auth requisite pam_succeed_if.so uid >= 1000 quiet

    4 auth sufficient pam_ldap.so use_first_pass

    5 auth required pam_deny.so

    Edite o arquivo /etc/pam.d/commom-session e deixe-o assim:

    1 #----- /etc/pam.d/common-session

    2 session required pam_mkhomedir.so skel=/etc/skel umask=0022 silent

    3 session sufficient pam_unix.so

    Edite o arquivo /etc/pam.d/commom-password e deixe-o assim:

    1 #----- /etc/pam.d/common-password

    2 # password sufficient pam_unix.so md5 obscure min=8 nullok try_first_pass

    3 password sufficient pam_unix.so md5 obscure min=4 max=8 nullok try_first_pass

    4 password sufficient pam_ldap.so

    5 password required pam_deny.so

    Reinicie o servico nscd:

    1 invoke-rc.d nscd restart

    8. Conclusao

    Apesar de ser um tanto quanto complicada a configuracao OpenLDAP e das ferramentas necessarias imple-mentar a autenticacao centralizada, ela e de suma importancia para os ambientes corporativos, mesmo pequenasempresas. Veja so um exemplo: imagine que uma pequena empresa tenha um servidor com Samba autenti-cando maquinas Windows c, um servidor proxy para o acesso a` Internet e, digamos, um servidor FTP, todosem equipamentos (servidores) separados.

    Do ponto de vista dos usuarios, na falta de autenticacao centralizada, provavelmente os usuarios teriam

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 24 de 27

  • que memorizar duas contas (e senhas) de acesso, uma para o acesso ao domnio (Windows c+ Samba), e outrapara o servidor FTP. E nem consideramos o proxy, que poderia necessitar autenticacao...

    Do ponto de vista da administracao, sempre seria necessaria a criacao das contas nos dois servidores e,quando um colaborador deixa a empresa, e necessaria a remocao destas contas. O gerenciamento torna-se maistrabalhoso com o aumento do numero de servicos e servidores.

    Com a autenticacao centralizada, este problema desaparece, porque todos os servicos podem usar o LDAPpara autenticacao dos usuarios.

    Ate mesmo sistemas desenvolvidos internamente podem se utilizar do LDAP. Imagine que a empresa tenhadesenvolvido um sistema interno para controle de documentos, ou ate mesmo um ERP. Estes sistemas poderiamser desenvolvidos para usar o LDAP como meio de autenticacao.

    O roteiro apresentado neste documento foi bastante superficial no que diz respeito aos recursos disponveisno OpenLDAP. Temas como backup, replicacao e SSL/TLS nao foram cobertos. Talvez estes temas sejamcobertos numa versao futura deste documento. Quem sabe...

    A. Dicas rapidas

    Seguem algumas dicas de sintaxe de comandos para consulta rapida.

    A.1. Grupos e usuarios

    Para adicionar um usuario Samba e POSIX:

    1 smbldap-useradd -a USUARIO

    Para definir ou alterar a senha de um usuario (Samba e POSIX):

    1 smbldap-passwd USUA`RIO

    Para adicionar o usuario USUARIO no grupo GRUPO:

    1 smbldap-groupmod -m "USUARIO" "GRUPO"

    Para remover o usuario USUARIO do grupo GRUPO:

    1 smbldap-groupmod -x "USUARIO" "GRUPO"

    Para desabilitar a conta do usuario (sem remove-la):

    1 smbldap-usermod -I USUARIO (Windows)

    2 smbldap-usermod -L USUARIO (Linux)

    Neste caso, o parametro sambaAcctFlags passa a ter o bit D habilitado (para contas Samba/Windows c).Para habilitar a conta do usuario:

    1 smbldap-usermod -J USUARIO (Windows)

    2 smbldap-usermod -U USUARIO (Linux)

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 25 de 27

  • A.2. Senhas

    Para forcar o usuario (Windows c) a trocar a senha no proximo logon:

    1 net sam set pwdmustchangenow yes

    Para alterar a data de validade da senha:

    Somente POSIX:

    1 smbldap-usermod --shadowExpire YYYY-MM-DD

    ou

    1 smbldap-usermod --shadowExpire n usuario

    Onde n corresponde ao numero de dias desde 1-jan-1970 (Unix Epoch).

    Somente Samba:

    1 smbldap-usermod --sambaExpire YYYY-MM-DD(HH:MM:SS) usuario

    ou

    1 smbldap-usermod --sambaExpire n usuario

    Para POSIX e Samba:

    1 smbldap-usermod --expire YYYY-MM-DD(HH:MM:SS) usuario

    ou

    1 smbldap-usermod --expire n usuario

    Mesmo alterando a data de expiracao, se a senha estiver vencida, ela ainda devera ser trocada.

    E possvel ajustar as datas de expiracao das senhas POSIX e Samba, conforme os exeplos a seguir:

    1 smbldap-usermod --expire YYYY-MM-DD USUARIO

    2 smbldap-usermod --shadowExpire YYYY-MM-DD USUARIO

    3 smbldap-usermod --sambaExpire YYYY-MM-DD USUARIO

    4 smbldap-usermod --shadowmax 3650 USUARIO

    Onde:

    sambaExpire Ajusta a data de expiracao da senha do Samba. shadowExpire Ajusta a data de expiracao da senha POSIX (Linux) expire Ajusta a data de expiracao das senhas Samba e POSIX (logo, os dois parametros anteriores sao

    desnecessarios)

    shadowMax Ajusta quantos dias, no maximo, uma senha pode ficar sem ser alterada.Alem disso, para destravar a conta, precisei executar os seguintes comandos (Samba e Linux):

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 26 de 27

  • 1 smbldap-usermod -J USUARIO

    2 smbldap-usermod -U USUARIO

    A.3. Renomear conta de usuario

    Em meu trabalho tenho precisado renomear contas de usuario quando, por exemplo, um colaborador passaa exercer as funcoes de outro usuario. Neste caso, e importante que SSID da conta nao seja alterado.

    Fiz um teste com um usuario que deixou a empresa e o usuario que o substituiu precisava manter o perfildo usuario antigo no Windows c. Entao, renomeei a conta diretamente no LDAP, juntamente com o script delogon usando o seguinte comando (observe que e possvel alterar mais de um atributo de uma conta num mesmocomando):

    1 smbldap-usermod -r novo.usuario -E novo.usuario.cmd -d novo_home_dir usuario.antigo

    O comando smbldap-usermod sempre executa alguma operacao sobre uma conta de usuario, que deveser o ultimo parametro. No exemplo apresentado, usamos o comando smbldap-usermod para alterar a contausuario.antigo, que e o ultimo parametro, alterando os seguintes atributos da conta:

    O nome da conta, alterado para novo.usuario atraves da opcao -r. O nome do script de logon, alterado para novo.usuario.cmd, atraves da opcao -E O nome do novo diretorio home do usuario, atraves da opcao -d

    Referencias

    OPENLDAP, T. P. Openldap software 2.4 administrators guide. 2011. Disponvel em:. Acesso em: 20 jan. 2012.

    SUNGAILA, M. Autenticacao Centralizada com OpenLDAP. Primeira edicao. [S.l.]: Novatec, 2008. ISBN978-8575221426.

    [email protected] Autenticacao centralizada usando OpenLDAP e exemplos com Samba e Linux 27 de 27