# Ldap/Instalação
## Implementando um Servidor LDAP com OpenLDAP

1. Instalando os Pré-requisitos para a instalação do OpenLDAP Biblioteca básica de criptografia para sistemas Linux
Utilizando o apt-get, além de instalar o openssl e sua biblioteca básica, toda e qualquer dependência necessária ao funcionamento dessas ferramentas também será instalada
Toda as informações são armazenadas em algum tipo de base, no nosso caso instalaremos o gerenciador Oracle Berkeley DB.
SASL é um acrônico para Simple Authentication and Security Layer e define um método de prover autenticação segura para protocolos orientados à conexão. De maneira geral essa ferramenta é utilizada pata autenticação e comunicação criptografada.

## 2. Instalação do OpenLDAP

Instale os pacotes do OpenLDAP com o comando a seguir:
A partir de agora vamos começar a configuração do servidor, definindo os tipos de dados que serão armazenados e qual formato da base será utilizado, além da senha de acesso ao servidor. Utilizando qualquer editor de textos, iremos editar o arquivo de configuração do servidor OpenLDAP, que está localizado em /etc/ldap/sladp.conf A primeira coisa a ser feita é a definição da base em que os dados do OpenLDAP serão armazenados. Seguindo o que foi falado anteriormente vamos escolher o formato BDB, além de informar a senha do administrador da base.
Bem o arquivo contém mais algumas informações, que por enquanto deverão ficar comentadas, para fazer isso basta colocar “#” na frente de todas as linhas do arquivo. Vamos agora substituir nossa senha “senhasecreta” que está em texto puro por uma hash criptografada, para isso execute:
Ao executar o comando acima, foi solicitado uma senha e digitamos 123 e redigitamos, a saída na linha seguinte e a senha criptografada com o algoritmo SSHA, padrão do OpenLDAP, essa saída esquisita é que será colocada no nosso aqruivo de configuração.
Durante a instalação dos pacotes do OpenLdap no Debian, o debconf já nos solicita algumas informações e pré-configura a base. Antes de carregarmos nossa configuração . É altamente RECOMENDÁVEL, parar o serviço OpenLDAP, limpar o diretório de dadso e reiniciar o serviço, para que a estrutura seja criada de acordo com nossas configurações. Para fazermos isso execute os seguintes comandos.
Verificando se o servidor foi reiniciado:
    tcp 0 0.0.0.0:389 OUÇA
    tcp6 0 0 :::389 OUÇA
    3402 slapd
Considerando que a inicialização do OpenLDAP correu sem problemas, vamos realizar uma pesquisa em nosso servidor para verificar se a definição da base está correta e se ele reconheceu nossa estrutura:
a saída será :
    dn:
    namingContexts: dc=fajesu,dc=edu,dc=br
Nosso servidor está funcionando corretamente, falta agora dar uma utilidade para o servidor.

## 3. Criação de Arquivos LDIF

Ao contrário de outras bases de dados o OpenLDAP não possui um gerenciador específico que possa ser acionado para manipularmos os dados diretamente em tabelas. A inserção de novos dados nesta base se dá por meio de um arquivo texto contendo as informações necessárias a serem incluídas. Este arquivo deve seguir um formato específico chamado LDIF (LDAP Data Interchange Format), no qual devem ser definidos todos os dados necessários ao cadastramento de cada tipo de registro. Isto é similar a definir o dicionário de dados de um SGDB. Para cadastramos o topo da árvore do Diretório, devemos utilizar o objectClass do tipo dcObject (Objetos Componentes de Domínio); para a criação de uma unidade organizacional, utilizaremos organizationalUnit; e para usuários de modo geral utilizaremos inetrOrgPerson.
Vamos criar nosso primeiro LDIF, informando os dados básicos de nosso domínio fajesu.edu.br.
Utilizando um editor de texto iremos criar o fajesu.ldif
Após criarmos o LDIF, devemos instruir o servidor LDAP a carregar essas informações e incluí-las na base, o comando a ser utilizado será o ldapadd
As principais opções e a sintaxe do comando ldapadd é a seguinte:
    -x - Autenticação simples
    -D - Usuário que está fazendo a operação
    -W - Solicita a senha para executar o comando
    -f - Indica o nome do arquivo a ser processado
Agora podemos verificar com o comando ldapsearch os primeiros registros em nossa base
A consulta se tudo estiver correto foi realizada, porém o comando foi bastante extenso, a consulta poderia ter sido realizada com o seguinte comando:
A estrutura criada para o “topo da árvore” - DIT - já pode receber dados, porém, um dos pontos fortes do Diretório é a organização e hierarquia, é necessário criar algumas entradas, as chamadas unidades Organizacionais destinadas a gravar os dados de forma coerente. Vamos criar duas unidades: a primeira para agrupar a identificação dos usuários, e a segunda destinadas a grupos.
Vamos criar um arquivo chamado unidades.ldif utilizando seu editor de texto preferido, com o seguinte conteúdo:
Agora vamos criar estas duas unidades organizacionais em nosso Diretório
Até o momento foram craidas três entradas no diretório, uma referente ao topo (DIT) representada por dc=fajesu,dc=edu,dc=br; a segunda referente à unidade organizacional ou=Usuarios; e a terceira referente à unidade organizacional ou=Grupos. Nesses três casos foram utilizadas definições como objectClass.
Seguindo a idéia de montar uma estrutura de diretório completa, nossa próxima tarefa será criar algumas entradas de usuários. O principal ponto é escolher uma classe que possa ser consultada por outros aplicativos, isto é, uma classe que contenha os atributos necessários que desejamos disponibilizar.
Iremos armazenar dados simples, um nome e sobrenome e estes dados serão criados sob a unidade organizacional Usuarios. usuario.ldif
Crie um usuario.ldif com todos os componentes do grupo formado.... Agora vamso inserir os dados destes usuarios na base de dados
Uma consulta simples para verificar os dados inseridos

## 3. Pesquisando a base

Acredito que já tenha percebido que, tão importante quanto definir a base os tipos de dados a serem cadastrados, é o porcesso de pesquisa de informações na base do diretório.
A sintaxe e os principais parâmetros que o comando aceita são:
    -x - Autenticaçãosimples. O método padrão é autenticação via SASL
    -h - Host onde o serviço LDAP está rodando, caso omitido assume o valor do sldap.conf
    -b - Base de pesquisa
    -L - Formato de saída do LDIF. Se omitido o formato é estendido
    [filtro] - Condições da pesquisa
    [atributo] - Atributos que devem ser retornados na pesquisa
Pesquisas compostas também podem ser executadas
As pesquisas realizadas nos mostram todos os resultados esperados, mas foram realizadas da melhor maneira? Vamos precisar de indices, para isso vamos alterar o arquivo de configuração sladp.conf no final do arquivo em /etc/ldap/slapd.conf
Como o servidor já está em funcionamento para que esses índices sejam gerados, é necessário parar o servidor e efetuar a indexação manualmente. ATENÇÃO: ao executar esse comando como root, seu servidor LDAP poderá não ser capaz de subir novamente. Para evitar o comportamento anormal, vamos alterar o usuário e o grupo dos arquivos no diretório de dados /var/lib/ldap como segue:
No debian, o usuário que executa o servidor é o openldap. Antes de rodar este comando, verifique qual o usuário foi cadastrado em sua distribuição. Uma vez finalizado este processo, reinicie o servidor OpenLDAP, efetue novamente a pesquisa.
Para a indexação de uma base LDAP, devemos verificar os tipos de pesquisas que serão realizadas e quais as possibilidades de filtros a serem aplicadas. Veja a seguir os possíveis tipos de indexação ou tipo de pesquisa a serem realizadas
    eq - Permite comparar o atributo no todo
    sub - Permite comparar o atributo por trecho
    pres - Permite comparar o atributo pela sua presença
    approx - Permite comparar o atributo de formas aproximada
    none - Não efetua qualquer comparação para o atributo
A criação de índices é uma característica que deve ser utilizada com parcimônia. Criar índices agiliza a pesquisa e faz a base ter melhor desempenho, contudo criar índices em demasia pode troná-lo lento.

## 4. Modificando registros

Modificar dados em um diretório não é tarefa comum pois, como dito anteriormente, o serviço de diretório é voltado a um grande volume de acesso para leitura. Mudanças acontecem e podem ser realizadas com a ferramenta ldapmodify processando um arquivo LDIF que contém os dados a serem alterados
modifica.ldif
Esta estrutura é bem parecida com a estrutura vista anteriormente para os arquivos de criação de dados, mas o conteúdo apresenta algumas diretivas adicionais.
    Changetype – indica o tipo de ação a ser realizada que é modificar um registro existente, sendo as ações possíveis:
    add – um atributo será acrescentado à entrada
    delete – remove o valor daquele atributo
    replace - substitui o valor do atributo peloo valor indicado
Vamos alterar nossa base de dados mais uma vez com o seguinte comando:
Vamos modificar a base criada pelo grupo, para verificar o comando ldapmodify em funcionamento com varias mnudanças ao mesmo tempo em um ou vários usuários:
mudanca.ldif

## 5. Utilizando o comando ldapdelete

Caso seja necessário remover um usuário de sua base, isso pode ser feito diretamente pela linha de comando sem a necessidade de criação de uma arquivo ldif.
Este comando remove uma entrada da base. Caso a intenção seja remover um ramo da estrutura, pode ser utilizado o parâmetro –r, sendo que este poderia remover toda uma OU e as entradas subseqüentes.
Para remover a unidade Organizacional Usuários e todas as entradas subseqüentes, execute o seguinte comando:
Para reconstruir sua base organizacional e os usuários construa o arquivo rebuild.ldif, com o conteúdo semelhante a este:
Digite:
Após refazer sua base de dados em outra máquina, no windows, inicie o MS Outlook Express, acesse o menu Ferramentas, Contas e clique na aba Serviço de Diretório. Clique no botão Adcionar e escolha a opção serviço de diretório. A próxima tela solicita a identificação do servidor; entre com OpenLDAP.
Na tela seguinte marque a opção sim para que o Outlook consulte as contas de email no servidor OpenLDAP automaticamentee, em seguida, finalize o cadastramento. Ao voltar a tela anterior selecione o OpenLDAP e clique no botão propriedades para personalizar alguns itens.
Na aba geral você deve identificar o seu servidor inserindo o endereço IP, após isso clique na aba Avaçado e insira a base de pesquisa do Diretório. Finalize a configuração clicando no botão OK. Na tela principal do Outlook, clique no botão Endereços e, na tela seguinte, clique no botão Localizar Pessoas. Digite um nome cadastrado em nossa base de exemplo e clique no botão Localizar agora para verificar o resultado.

## 6. Ferramenta para gerenciar o LDAP

Existem algumas ferramentas para gerenciar graficamente o OpenLDAP, mas utilizaremos o phpLDAPadmin, por ser de acesso via web e possui como ponto forte a criação de uma série de objetos por meio de opções predefinidas como, por exemplo, contas de usuários padrão POSIX para estações Linux ou padrão SAMBA para autenticação de uma rede EIndows.
Vamos instalar o phpLDAPadmin usando o aptget junto com o servidor apache2 e o php, para isso execute o seguinte comando:
Abra o navegador e acesse a página http://ipdoservidorldap/phpldapadmin.
Você deverá fazer logon utilizando, neste momento, o usuário Admin com seu dn completo (cn=Admin,dc=fajesu,dc=edu,dc=br)

## 7. Autenticação de um sistema linux na base LDAP

Falamos até agora do cadastro de vários dados na base LDAP, de domínios, de unidades organizacionais, de grupos, de usuários com senhas, de lista de endereços e vimos, também, pela interface de gerenciamento ser possível o cadastramento de contas de usuários em padrão Unix e Samba.
Vamos tornar nosso LDAP um substituto, com muitas vantagens, para os arquivos passwd e shadow, cadastrando, a partir de agora, nossos usuários em nossa base e fazendo com que o Linux pesquise tais usuários.
Todas as mudanças necessárias são relativas ao método de autenticação utilizado pelo Debian, pelo PAM (Pluggable Authentication Modules) e por, praticamente, todas as distribuições.
Utilizar PAM para autenticação significa dizer que teremos um método flexível de checagem de vários itens de segurança quando um usuário efetuar logon. PAM, de forma mais ampla, é um sistema que trabalha com bibliotecas externas que efetuam a autenticação e autorização de usuários em distribuições Linux.
Sua característica modular permite definir métodos de autenticação e criptografia diferente para diversos serviços disponíveis na empresa, a fim de garantir o acesso do usuário ao sistema.
Módulos PAM foram divididos em quatro categorias distintas, definindo os tipos disponíveis.
Auth – Faz a validação do usuário, verificando sua identidade por vários meios possíveis: checando usuário e senha – método mais simples e mais usual – utilizando verificação biométrica como impressão digital, timbre de voz ou imagem de retina. Pode ainda limitar o número de usuários ou restringir o acesso do root em algum serviço.
Account – verifica se o usuário pode utilizar o serviço no qual está tentando autenticar Passwd Entra em funcionamento durante o processo de gtroca de senhas dos usuários. Módulos desse tipo incluem a cracklib que checa se a senha do usuário é forte
Session Cria o ambiente do usuário, habilitando dispositivos de hardware aos quais o usuário tenha direito de acesso, além de criar recursos como diretório pessoal. Em fim qualquer coisa que seja necessário fazer para que o usuário possa se conectar

## 8. Dados necessários para a autenticação de usuários

Para armazenar usuários em uma base LDAP, é necessário definir quais dados deverão ser criados na base para uso do sistema operacional.
Para o cadstramento de usuários no Linux necessitamos criar uma entrada no /etc/passwd, /etc/shadows, /etc/group e /etc/gshadow; então, devemos acreditar que será necessário suprir essas informações em nossa base.
Vamos criar o arquivo para as contas de usuários ou modificalos... a essa altura você tem condições de modificálo sozinho....mas vou ajudar com um arquivo exemplo de inclusão...
Fernando.ldif
Estes dados podem ser inseridos na base:
A criação de um usuário normalmente envolve ainda a criação de um grupo POSIX pessoal, com o nome do próprio usuário e, normalmente, com gid igual ao do usuário Vamos criar o LDIF para a inclusão do grupo fernando. Fernandogrupo.ldif
para adicionar execute o comando:
só como lembrança esses dois arquivos podem ser fundidos em um só como já vimos anteriormente.

## 9. Bibliotecas necessárias para a autenticação

A instalação das bibliotecas PAM que permitem o uso do LDAP pode ser feita via aptget:
Configuração do PAM Edite o arquivo /etc/libnssldap. conf colocando os seguintes valores:
Arquivo /etc/libnssldap.secret
Arquivo /etc/nsswitch.conf:
Arquivo /etc/pam_ldap.conf
Arquivo /etc/pam_ldap.secret
Os arquivos libnssldap.secret e pam_ldap.secret devem pertencer ao usuário e grupo do root e ter permissão 0400 para assegurar que a senha do usuário Amin não seja visível a todos
Ao instalarmos as bibliotecas , o debconf automaticamente configura tais arquivos, contudo é recomendável checar se estão corretos. Devemos agora remover ou renomear o arquivo /etc/ldap/ldasp.conf e criar um link simbólico de /etc/libnssldap. conf para ele, com o seguinte comando:
Como já criamos um usuário com os procedimentos anteriores, vamos testar se já conseguimos consultar a base LDAP em busca de usuários e grupos:
O último passo é configurar o PAM para que ele, durante o processo de autenticação de usuários, consulte o servidor LDAP. Isto é feito no diretório /etc/pam.d , editando os arquivos a seguir:
Arquivo /etc/pam.d/commonaccount
Arquivo /etc/pam.d/commonauth
Arquivo /etc/pam.d/commonsession session required pam_mkhomedir.so skell=/etc/skel umask=0022 silent session sufficient pam_unix.so
Arquivo /etc/pam.d/commonpassword
Após a configuração desses arquivos devemos reiniciar o serviço nscd. Agora chegou o momento de testarmos o processo de autenticação. Abra um terminal e efetue login com o usuário que foi criado. Se tudo estiver correto, além de permitir acesso ao equipamento, será criado automaticamente um diretório pessoal para este usuário, no local indicado pelo atributo homeDirectory (pam_mkhomedir.so). Para deixar tudo no jeito...vamos alterar o arquivo de configuração do servidor, inclua o seguinte índice:
E ainda para permitir a troca de senha do usuário:

## 10. SAMBA

O projeto SAMBA disponibiliza serviço de compartilhamento de arquivos e serviços de impressão para clientes Windows. O servidor disponibiliza também várias funcionalidades para clientes microsoft, ferramenta de migração e administração do servidor, bem como interoperabilidade.
Para instalar o servidor execute a seqüência de comandos:
Agora vamos acertar a configuração do servidor smaba para funcionar com o LDAP Edite o arquivo de configuração localizado em /etc/samba/smb.conf e na seção global adicione os seguintes parâmetros: [global]
Opções de segurança e autenticação
Base de autentiocação do LDAP
Permite que usuários membros do grupo “Domain Admins” insiram estações no domínio samba
Temos que ajustar nosso servidor LDAP para isso copie o arquivo samba.schema da documentação do samba para a pasta /etc/ldap/schema e depois adicione a linha
no arquivo de configuração sldap.conf, adicione também os seguintes índices
e ainda na diretiva access
feito isso pare o servidor LDAP, reindex o servidor em modo offline
Até agora nosso servidor SAMBA está parado. Antes de iniciarmos, é necessário armazenar a senha do Admin em um arquivo de controle do Samba – o secrets.tdb. Isto é feito com o seguinte comando:
Em seguida, o código SID de identificação do domínio também deve ser cadastrado. Desta vez, porém, os dados serão incluídos na base LDAP.
Ale de informar em tela o SID (SecurityIdentification) do domínio Samba, esse comando insere este valor na base LDAP em um registro do tipo sambaDomaine
Por último, antes de iniciarmos nosso servidor samba, devemos criar as "ou" referenciadas no arquivo smb.conf, no nosso caso criaremos somente computers Computers.ldif
Agora iremos iniciar nosso servidor samba:
Como ainda não configuramos as ferramentas smbldaptools a criação de usuários ainda será diretamente no LDIF Usuário.ldif
A senha criada está em texto puro para codificala basta executar o seguinte comando: smbpasswd pflamellas
Inserir usuários dessa maneira é seguro, porém extremamente desgastante para automatizar esta tarefa existe a ferramenta smbldaptools. Para instalala execute o seguinte comando:
Iremos agora configurar os arquivos para correta utilização
editando o arquivo smbldap_bind.conf e adicionar o seguinte
devemos ainda acertar o arquivo smbldap.conf com as informações de nossa rede
Iinformações LDAP
Devemos ainda acertar o arquivo de configuração do samba em /etc/samba/smb.conf logo após a diretiva global
Permite a criação automática de máquinas ao efetuar join no domínio