Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to...

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

Transcript of Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to...

Page 1: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 possıvel 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 disponıveis 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 indivıduo 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 mesmopossıvel. 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 caracterısticas 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 imprescindıvel para aseguranca do sistema, nao serao discutidas aqui. Estes assuntos serao deixados para uma versao futura desteartigo, ou ate mesmo, um artigo especıfico 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

Page 2: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 as 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 disponıvel 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

Page 3: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 seraoaplicadas a todas as demais bases de dados. Se uma diretiva deste arquivo for repetida na configuracaoda base de dados especıfica, valera o valor especificado na configuracao especıfica da base. Portanto, osparametros aqui especificados podem ser considerados valores padroes que, se nao forem reconfiguradosnas configuracoes especıficas, serao utilizados como definidos aqui.

• olcDatabase={NUMERO}[backend].ldif: Definicao da base de dados especıfica. 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) ePOSIX (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 domınio 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

Page 4: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

1 aptitude install samba samba-client

3.4. Pacotes de ferramentas

O smblda-tools contem ferramentas para manipular contas Windows c©e 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 domınioda empresa e de uma senha para o administrador do servico LDAP. Vamos utilizar os seguintes valores:

• Domınio 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 slappasswd

a 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 (domınio) 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

Page 5: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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

Page 6: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 especıficas 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

Page 7: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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

Page 8: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 reconstruıda (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

Page 9: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 <dc=EMPRESA> 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

Page 10: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 domınio):

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

Page 11: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 = EMPRESA’s 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

Page 12: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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

Page 13: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 administrator’s 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

Page 14: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 domınio (security=user).

• O nome NetBIOS do servidor e vmubuntu (netbiosname=vmubuntu).

• Assume que o nome do domınio 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 armazenamentodos 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,deverıamos 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 domınio 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

Page 15: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 odomınio 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 domınio 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 as 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

Page 16: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 server’s 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

Page 17: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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

Page 18: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 don’t want password to be enable for defaultMaxPasswordAge days (be

151 # careful to the sambaPwdMustChange attribute’s 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

Page 19: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 as 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

Page 20: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

Parametro Comentarios

SID ID do domınio.

sambaDomain Nome do domınio.

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 especıficas decriptografia, nao cobertas neste documento.

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

suffix Sufixo do domınio, 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 domınio 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

Page 21: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 domınio 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 poderıamos ate inserir usuarios do domınio 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 domınio Windows c©, partimos para a configuracao doSamba, ja que uma das ferramentas de manipulacao de contas de usuario em bases LDAP que suporta contasde domınio 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 especıficos declientes, conforme descrito no capıtulo de instalacao dos softwares.

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

Page 22: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 domınio):

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

Page 23: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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

Page 24: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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

Page 25: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

que memorizar duas contas (e senhas) de acesso, uma para o acesso ao domınio (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 disponıveisno 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 USUARIO

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

Page 26: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

A.2. Senhas

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

1 net sam set pwdmustchangenow <username> 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 possıvel 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 saodesnecessarios)

• –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

Page 27: Autentica˘c~ao centralizada usando OpenLDAP e exemplos ......Como este documento e mais um how to (como fazer) do que um artigo propriamente dito, muitas das con gura˘coes aqui apresentadas

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 possıvel 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 administrator’s guide. 2011. Disponıvel em:<http://www.openldap.org/doc/admin24/>. 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