1. Apresentação do Problema
Inicalmente temos que na matriz existe um servidor de autenticação em pleno funcionamento que usa de uma base de dados localizada em um servidor LDAP para autenticar os usuários da rede da matriz. Com o passar do tempo observou-se que existia uma necessidade crescente das filiais terem autenticadores próximos, uma vez que as VPNs ou as antenas caiem todos os serviços que dependem da rede ficam prejudicados.
Assim optou-se pela instalação de um servidor de domínio de backup para ficar dentro das redes das filiais, assim quando a estrutura de ligação entre as filiais cair o serviço de rede fica parcialmente prejudicado e não completamente.
2. Sobre o artigo
Primeiro iremos definir o que é prioridade para o funcionamento deste esquema e depois partiremos para configuração em si. Como todos sabem o Ubuntu conta com um sistema de gerenciamento de pacotes que oferece uma gama de vantagens, mas este mesmo procedimento pode ser aplicado em qualquer outra distribuição seja ela descendente do Debian ou não.
3. Definindo prioridades
A primeira situação que deve ser enfrentada é no que diz a respeito da replicação da base de dados, pois, na matriz existe a base de dados de usuário assim como a relação de grupos e equipamentos, isto deve ser replicado(slurp), depois temos que fazer o nosso servidor que ficar na filial reconhecer os usuários desta base (libnss-ldap), com este esquema funcionando temos que fazer com que as maquinas passem a autenticar no servidor Samba que esta na filial (Samba+SambaLdapTools). Fechando estas configurações teremos o nosso ambiente corporativo totalmente funcional.
Observação: Devida as grades dimensões dos textos iremos postar em partes este artigo, no final irei juntar tudo em um unico arquivo do tipo PDF que será disponibilizado neste blog.
3.1. Configurando a replicação do OpenLDAP
Primeiramente temos que instalar os pacotes necessários para o servidor de OpenLDAP funcionar, com o comando:
root@gw:~# apt-get install slapd ldap-utils db4.2-util libpam-ldap libnss-ldap nscd libpam-foreground
Com a instalação deste pacotes o Debconf deve fazer alguns questionamentos, caso esteja usando outra distribuição, algo equivalente deve ocorre ou deve ser gravado o arquivo de configuração default.
Então vamos começar com a edição do arquivo de configuração do nosso OpenLdap Server, no caso do Ubuntu ele usa um esquema de armazenamento de arquivos de configuração bem eficiente. (Os arquivos deste servidor se encontram em /etc/ldap/) familiariando os serviços aos seus locais de configuração.
3.1.1. Schema
Os esquemas serverem para dizer ao servidor de ldap como se dar com os tipos de dados, eles servem também para definir entidades e suas dependências, por exemplo para preparar o LDAP para receber o samba tempos que ter os seguintes esquemas: NIS, SAMBA e QMAIL.
O arquivo de configuração (/etc/ldap/slapd.conf) ficaria mais ou menos assim:
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/samba.schema
include /etc/ldap/schema/qmail.schema
Agora que o LDAP sabe lhe dar com os tipos de dados podemos prosseguir com a configuração do arquivo slapd.conf.
3.1.2. Backend de armazenamento
Na sequência vamos dizer ao servidor que tipo de banco de dados ele deve usar, existem diversos tipo para saber mais entre no site do OpenLDAP, iremos usar o db4 como banco de dados então veja como deve ficar o arquivo de configuração:
modulepath /usr/lib/ldap
moduleload back_bdb
backend bdb
checkpoint 512 30
A primeira linha diz onde estão os modulos do OpenLDAP; a segunda linha diz para ele carregar o modulo back_bdb, que é o backend para usar o db4; na terceira linha informamos o backend; por final colocamos as informações de checkpoint, que será usado pelo db4, no caso informamos que é para ele usar folhas de dados de 512 bytes e realizar checkpoints a cada 30 minutos.
Basicamente a infra estrutura do banco de dados esta feita, agora vamos passar para os formato do banco de dados em sí.
3.1.3. Base de armazenamento
Primeiramente teremos que definir a raiz de armazenamento do nosso servidor de usuários, usualmente costuma-se usar o domínio da empresa como base, por exemplo vamos tomar que temos uma empresa que é dona do dominio matriz.com então esta definição ficaria assim:
suffix "dc=matriz,dc=com"
Com isto temos que definir a politica de acesso root, ou seja um usuário com privilégios para administrar isto tudo, isto se faz da seguinte forma:
password-hash {MD5}
rootdn "cn=suporte,dc=matriz,dc=com"
rootpw {MD5}7gyEANJPvIWkc7KKFoW8UQ==
Na primeira linha definimos que será usado o MD5 como hash da senha, na segunda linha onde definimos o rootdn dizemos a nossa raiz que o cn=suporte é o nosso usuário. Logo na linha seguinte onde definimos o rootpw informamos ao servidor que senha usar para dizer que o usuáro cn=suporte é realmete o usuário cn=suporte.
Aqui nos temos um detalhe muito importante, esta senha deve ser gerada com o auxilio do slappasswd, veja o exemplo:
slappasswd -h {MD5}
Será questionado qual é a senha e depois uma confirmação da mesma. Já configuramos a forma de entrar na base agora vamos configurar a forma como o OpenLDAP deve organizar a informação para um melhor desempenho de busca. Veja o nosso exemplo:
index objectClass,uidNumber,gidNumber eq
index cn,sn,uid,displayName pres,sub,eq
index memberUid,mail,mailAlternateAddress,givenname,accountStatus,mailHost,deliveryMode eq
index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq
index default sub
Agora já definimos como será a indexação que é simples; a ordem de indexação é de cima para baixo e da esquerda para a direita. Neste momento vamos ver como ficaria o acesso a estas informações, quem pode acessar, veja o exemplo abaixo:
access to attrs=userPassword,sambaLMPassword,sambaNTPassword
by self write
by anonymous auth
by * none
O acesso aos atributos userPassword,sambaLMPassword e sambaNTPassword é dado somente aos donos das contas, se um anonimo tentar acessar deverá ser autenticado e todos os outros não tem acesso. No exemplo abaixo ainda dizemos que o acesso aos demais campo para todos é de somente leitura, isto é bom para replicação.
access to *
by * read
3.1.4. Replicação da base de dados
Bom já temos uma base funcionando faltando somente os dados. Para isto iremos parar o servidor na matriz para fazer um backup dos dados, este backup será usado para dar uma carga inicial no OpenLDAP da filial. No servidor da matrz execute o seguinte comando:
slapcat -b "dc=matriz,dc=com" -l backup.ldif
Feito isto será gerado um arquivo chamado backup.ldif no diretorio corrente, então você deve copiar este arquivo para o servidor da filial e executar o seguinte comando:
slapadd -l backup.ldif
Com isto devemos ter uma replica do banco de dados da matriz dentro do servidor da filial, ainda não devemos iniciar nenhum dos dois servidores. Agora temos que preparar o servidor da matriz para replicar os dados na filial. para isto iremos inserir as seguintes linhas no arquivo /etc/ldap/slapd.conf da matriz.
replica host=<host>:389
binddn="cn=suporte,dc=matriz,dc=com"
bindmethod=simple
credentials=senha
tls=no
Você já deve ter se familiarizado com as informações a única novidade ai são as palavras bindmetod que diz que a autenticação será feita do modo simplificado usando apenas OpenLDAP, credentials, que é a senha que será usada para autenticar o usuário cn=suporte,dc=matriz,dc=com no servidor especificado como <host> o qual deve ser o servidor da matriz e a ultima linha que diz para não usar tls este ultimo fica como projeto futuro, que seria colocar as transações para ocorrer sobre um socket cinematografado.
Agora devemos informar ao servidor da filial quem é a base oficial, para que ele aceite as alterações e também para ele saber onde devem ser feita as alterações solicitadas pelos usuários da rede filial, veja o exemplo logo abaixo, /etc/ldap/slapd.conf da filial:
updatedn "cn=suporte,dc=matriz,dc=com"
updateref ldap://<host matriz>:398
Na primeira linha estamos dizendo para ele usar o usuário master de acesso a base do servidor da matriz; na segunda linha estamos informando qual é o endereço para encontrar o servidor matriz, é importante colocar IP absoluto para evitar erro por falha de DNS. Veja que foi omitido a senha do usuário master na matriz isto se deve porque o slurp no servidor matriz faz uma conexão usando credenciais pre-aprovadas devido o fato do servidor matriz reconhecer o servidor filial como um nó de si mesmo. Não exponha isto desta forma na internt faça um controle do acesso antes.
Bem pessoal por hoje ficamos por aqui, no próximo artigo que irei escrever neste final de semana vou explicar como colocar o servidor da rede filial para reconhecer os usuário cadastrados no ldap como usuários do sistema linux, passo importante para que o samba possa autenticar no LDAP. Pretendo postar este próximo artigo neste final de semana.
Por isso adoro o software livre, as ajudas são muitas, parabéns pelo blog, adorei mesmo a iniciativa….
Fiz algumas alterações no texto original para melhorar a gramática e respeitar um poucos as regras do português, desculpa aê se eu deixei alguém revoltado com este assassinato.
hehehehehe