Saltar para o conteúdo

Ldap/Instalação

Origem: Wikilivros, livros abertos por um mundo aberto.

Implementando um Servidor LDAP com OpenLDAP

[editar | editar código-fonte]

1. Instalando os Pré-requisitos para a instalação do OpenLDAP Biblioteca básica de criptografia para sistemas Linux

# apt-get install openssl libssl0.9.8

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.

# apt-get install db4.2-util

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.

# apt-get install sasl2-bin libsasl2-2 libsasl2-modules libsasl2-modules-ldap

2. Instalação do OpenLDAP

[editar | editar código-fonte]

Instale os pacotes do OpenLDAP com o comando a seguir:

# apt-get install slapd ldap-utils

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.

#/etc/ldap/sldap.conf
#Versão de protocolo utilizado para conexão pelos clientes
allow bind_v2 # por default vem comentada... descomentar para ativá-la

#Schemas e definições de classes de objeto
#inclusão dos arquivos com as definições dos tipos de dados que serão utilizados
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/inertorgperson.schema

#Arquivos de controle dos processos do servidor slapd
#Arquivo que contém o número do processo do servidor
pidfile /var/run/slapd/slapd.pid
#Arquivo que contém os argumentos passados ao servidor em sua inicialização
argsfile /var/run/slapd/slapd.args

#Módulos
#Local onde estão os módulos para os backends utilizados para armazenar os dados do LDAP
modulepath /usr/lib/ldap
#Carga do módulo para o backend que será utilizado
moduleload back_bdb

#Parâmetros específicos do tipo de base
#Define parâmetros específicos para o backend BDB, caso ne cessário
backend bdb

#Base de dados
#Definição do primeiro database a ser utilizado, sendo que armazenaremos todas as informações do
#OpenLDAP em uma base do tipo Berkeley DB.
database bdb
#Estrutura do diretório e administrador
#suffix parte da estrutura que define sob qual hierarquia serão armazenadas os dados do nosso
#serviço de diretório
suffix “dc=fajesu,dc=edu,dc=br”
#rootdn quem será o administrador da base. O usuário root, do sistema operacional não é o
#administrador de uma base LDAP. Você pode até definir que o seja, e pode manter a mesma senha,
#mas normalmente escolhemos um usuário chamado Manager ou admin, o qual deve fazer parte da
#hierarquia definida em suffix.
rootdn “cn=admin,dc=fajesu,dc=edu,dc=br”
#rootpw senha de acesso ao servodor LDAP. Se você colocar aqui uma senha em texto simples, esta
#será a sua senha. Há sempre o problema de se manter senhas em arquivos de configuração, então
#utilizaremos um utilitário chamado slappasswd para criar uma senha criptografada que deverá ser
#colocada neste arquivo.
rootpw senhasecreta

#local de armazenamento dos dados
#directory indica onde ficarão os arquivos binários com a base de nosso servidor.
directory /var/lib/ldap

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:

# slappasswd
New password: 123
Re-enter new password: 123
{SSHA}hLLfSLt73/YwNYEJU/T7PAcLd0A0B0je

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.

#/etc/ldap/sldap.conf
#Versão de protocolo utilizado para conexão pelos clientes
allow bind_v2 # por default vem comentada... descomentar para ativá-la

#Schemas e definições de classes de objeto
#inclusão dos arquivos com as definições dos tipos de dados que serão utilizados
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/inertorgperson.schema

#Arquivos de controle dos processos do servidor slapd
#Arquivo que contém o número do processo do servidor
pidfile /var/run/slapd/slapd.pid
#Arquivo que contém os argumentos passados ao servidor em sua inicialização
argsfile /var/run/slapd/slapd.args
#Módulos
#Local onde estão os módulos para os backends utilizados para armazenar os dados do LDAP
modulepath /usr/lib/ldap
#Carga do módulo para o backend que será utilizado
moduleload back_bdb

#Parâmetros específicos do tipo de base
#Define parâmetros específicos para o backend BDB, caso necessário
backend bdb

#Base de dados
#Definição do primeiro database a ser utilizado, sendo que armazenaremos todas as informações do
#OpenLDAP em uma base do tipo Berkeley DB.
database bdb

#Estrutura do diretório e administrador
#suffix parte da estrutura que define sob qual hierarquia serão armazenadas os dados do nosso
#serviço de diretório
suffix “dc=fajesu,dc=edu,dc=br”
#rootdn quem será o administrador da base. O usuário root, do sistema operacional não é o
#administrador de uma base LDAP. Você pode até definir que o seja, e pode manter a mesma senha,
#mas normalmente escolhemos um usuário chamado Manager ou admin, o qual deve fazer parte da
#hierarquia definida em suffix.
rootdn “cn=admin,dc=fajesu,dc=edu,dc=br”
#rootpw senha de acesso ao servodor LDAP. Se você colocar aqui uma senha em texto simples, esta
#será a sua senha. Há sempre o problema de se manter senhas em arquivos de configuração, então
#utilizaremos um utilitário chamado slappasswd para criar uma senha criptografada que deverá ser
#colocada neste arquivo.
rootpw {SSHA}hLLfSLt73/YwNYEJU/T7PAcLd0A0B0je

#local de armazenamento dos dados
#directory indica onde ficarão os arquivos binários com a base de nosso servidor.
directory /var/lib/ldap

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.

# /etc/init.d/slapd stop
# cp /var/lib/ldap/DB_CONFIG .
# rm /var/lib/ldap/*
# /etc/init.d/slapd start

Verificando se o servidor foi reiniciado:

# netstat -lt | grep ldap
tcp 0 0.0.0.0:389 OUÇA
tcp6 0 0 :::389 OUÇA
# ps -A |grep slapd
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:

# ldapsearch -x -LLL -b ' ' -s base '(objectclass=*)' namingContexts

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

[editar | editar código-fonte]

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

# arquivo fajesu.ldif
dn: dc=fajesu,dc=edu,dc=br
objectClass: dcObject
objectClass: organization
o: Fajesu
dc: FAJESU

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

# ldapadd -x -D “cn=admin,dc=fajesu,dc=edu,dc=br” -W -f fajesu.ldif
Enter LDAP Password:
adding new entry “dc=fajesu,dc=edu,dc=br”

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

# ldapsearch -x -b 'dc=fajesu,dc=edu,dc=br' '(objectClass=*)'

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:

#ldapsearch -x '(objctClass=*)'

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.

dc=fajesu,dc=edu,dc=br
ou=Usuários ou=Grupos
uid=Fernando

Vamos criar um arquivo chamado unidades.ldif utilizando seu editor de texto preferido, com o seguinte conteúdo:

dn: ou=Usuarios,dc=fajesu,dc=edu,dc=br
ou: Usuarios
objectClass: top
objectClass: organizationalUnit
dn: ou=Grupos,dc=fajesu,dc=edu,dc=br
ou: Grupos
objectClass: top
objectClass: organizationalUnit

Agora vamos criar estas duas unidades organizacionais em nosso Diretório

# ldapadd -x -D 'cn=admin,dc=fajesu,dc=edu,dc=br' -W -f unidades.ldif
Enter LDAP Password:
adding new entry “ou=Usuarios,dc=fajesu,dc=edu,dc=br/'
adding new entry “ou=Grupos,dc=fajesu,dc=edu,dc=br”
Enseguida pesquise os dados cadastrados em nossa base cuja a inclusão foi bem sucedida
#ldapsearch -x

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

dn: cn=Fernando,ou=Usuario,dc=fajesu,dc=edu,dc=br
cn: Fernando
sn: Lamellas
objectClass: person

Crie um usuario.ldif com todos os componentes do grupo formado.... Agora vamso inserir os dados destes usuarios na base de dados

# ldapadd -x -D 'cn=admin,dc=fajesu,dc=edu,dc=br' -W -f usuario.ldif

Uma consulta simples para verificar os dados inseridos

#ldapsearch -x

3. Pesquisando a base

[editar | editar código-fonte]

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.

#ldapsearch -x

A sintaxe e os principais parâmetros que o comando aceita são:

ldasearch [opções] [filtros[atributos...]]
-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
ldapsearch -x '(sn=Lamellas)'
ldapsearch -x '(cn=c*)'

Pesquisas compostas também podem ser executadas

ldapsearch -x '(&(cn=F*)(sn=Lamellas))'
ldapsearch -x -LLL '(cn=F*)' cn sn

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

index objectClass eq
index cn,sn eq

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:

#/etc/init.d/slapd stop
# slapindex -v
...
# chown openldap: /var/lib/ldap/*

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.

#/etc/init.d/sldap start
# ldapsearch -x '(&(|(cn=Fernando)(cn=Fulano)(sn=silva))'

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

[editar | editar código-fonte]

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

dn: cn=Fernando,ou=Usuarios,dc=fajesu,dc=edu,dc=br
changetype: modify
add: description
description: Professor

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:

#ldapmodify -x -D “cn=Admin,dc=fajesu,dc=edu,dc=br” -W -f modifica.ldif
ldapsearch -x -LLL cn=Fernando

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

dn: cn=fulano,ou=Usuarios,dc=fajesu,dc=edu,dc=br.
changetype: modify
add: telephoneNumber
telephoneNumber:
telephoneNumber:
add: description
description: Aluno
add: objectClass
objectClass: inetOrgPerson
add: mail
mail: fulano@fajesu.edu.br
add: giveName
giviName: fulano
...
add: userPassword
userPassword: {SSHA}


5. Utilizando o comando ldapdelete

[editar | editar código-fonte]

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.

# ldapdelete –x –D “cn=Admin,dc=fajesu,dc=edu,dc=br” –W –v /
“cn=Fernando,ou=Usuarios,dc=fajesu,dc=edu,dc=br"
Enter LDAP Password: "Digite a senha de Admin"

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:

# ldapdelete –x –D “cn=Admin,dc=fajesu,dc=edu,dc=br” -W –r –v /
ou=Usuarios,dc=fajesu,dc=edu,dc=br”
Enter LDAP Password: "Digite a senha de Admin"

Para reconstruir sua base organizacional e os usuários construa o arquivo rebuild.ldif, com o conteúdo semelhante a este:

# mcedit rebuild.ldif

Digite:

dn: ou=usuarios,dc=fajesu,dc=edu,dc=br
objectClass: top
objectClass: organizationalUnit
ou: Usuarios
dn: uid=Fernando,ou=usuarios,dc=fajesu,dc=edu,dc=br
objectClass: top
objectClass: inetOrgPerson
uid: fernando
cn: Fernando Lamellas
sn: Lamellas
mail: pflamellas@gmail.com
userPassword: 123456
telephoneNumber: 34651237
mobile: 99884818
description: Professor
dn: uid=Gleison,ou=usuarios,dc=fajesu,dc=edu,dc=br
objectClass: top
objectClass: inetOrgPerson
uid: gleison
cn: Gleison Soares
sn: Soares
mail: gleison@gmail.com
userPassword: 123456
telephoneNumber: xxxx-xxxx
mobile: xxxx-xxxx
description: Aluno
dn: uid=Ciclano, ou=usuários,dc=fajesu,dc=edu,dc=br
objectClass: top
objectClass: inetOrgPerson
uid: ciclano
cn: Ciclano de tal
sn: Tal
mail: ciclano.tal@gmail.com
userPassword: 123456
telephoneNumber: xxxx-xxxx
mobile: xxxx-xxxx
description: Aluno

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

[editar | editar código-fonte]

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:

# aptget install phpldapadmin apache2 php5 libapache2modphp5

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

[editar | editar código-fonte]

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

[editar | editar código-fonte]

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

dn: uid=Fernando, ou=Usuários,dc=fajesu,dc=edu,dc=br
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: Fernando
sn: lamellas
uid: fernando
uidNumber:1001
gidNumber: 1001
homeDirectory: /home/fernando
loginShell: /bin/bash
gecos: Fernando Lamellas
userPassword: 123456
shadowLastChange: 12862
shadowMin: 0
sahdowMax: 99999
shadowWarning: 7

Estes dados podem ser inseridos na base:

Ldapadd –x –D “cn=Admin,dc=fajesu,dc=edu,dc=br” –W –f fernando.ldif

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

dn: cn=fernando, ou=Grupos,dc=fajesu,dc=edu,dc=br
objectClass: posixGroup
cn: fernando
gidNumber: 1001
userPassword: {CRYPT} x
memberUid: fernando

para adicionar execute o comando:

ldapadd –x –D “cn=Admin,dc=fajesu,dc=edu,dc=br”W
–f Fernandogrupo.ldif

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

[editar | editar código-fonte]

A instalação das bibliotecas PAM que permitem o uso do LDAP pode ser feita via aptget:

#aptget install libpam-ldap libnss-ldap nscd

Configuração do PAM Edite o arquivo /etc/libnssldap. conf colocando os seguintes valores:

host ipdoservidorldap
base dc=fajesu,dc=edu,dc=br
ldap_version 3
rootbinddn cn=Admin,dc=fajesu,dc=edu,dc=br

Arquivo /etc/libnssldap.secret

A senha do root.... no caso 123

Arquivo /etc/nsswitch.conf:

Passwd: files ldap
Group: files ldap
Shadow: files ldap

Hosts: files dns
Networks: files

Protocols: db files
Services: db files
Ethers: db files
Rpc: db files
Netgroup: ldap

Arquivo /etc/pam_ldap.conf

host ipdoservidorldap
base dc=fajesu,dc=edu,dc=br
ldap_version 3
rootbinddn cn=Admin,dc=fajesu,dc=edu,dc=br
pam_password md5

Arquivo /etc/pam_ldap.secret

123

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

Chmod 0400 /etc/*ldap.secret

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:

cd /etc/ldap
mv ldap.conf ldap.conf.old
ln –s ../libnssldap.conf ldap.conf

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:

getent passwd
getent group

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

account     sufficient      pam_ldap.so
account     required        pam_ldap.so try_first_pass

Arquivo /etc/pam.d/commonauth

auth    required      pam_nologin.so
auth    required      pam_ev.so
auth    sufficient    pam_ldap.so
auth    required      pam_unix.so nullok_secure try_first_pass

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

password     sufficient    pam_ldap.so
password     required      pam_unix.so nullock obscure min=4 max=8 md5 try_first_pass

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:

index     uid,uidNumber,gidNumber,memberUid,loginShell    eq

E ainda para permitir a troca de senha do usuário:

access to attrs=shadowLastChange
by self write
by * none

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:

# apt-get install samba smbclient sambadoc smbfs ntp

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]

workgroup = FAJESU
server string = Servidor Samba Controlador de Domínio
netbios name = PDC

Opções de segurança e autenticação

security = user
encrypt passwords = yes
passdb backend = ldapsam:ldap://ipdoservidorldap

Base de autentiocação do LDAP

ldap admin dn = cn=Admin,dc=fajesu,dc=edu,dc=br
ldap ssl = of
ldap delete dn = no
ldap user suffix = ou=Usuários
ldap group suffix = ou=Grupos
ldap machine suffix = ou =Computers
ldap suffix = dc=fajesu,dc=edu,dc=br

Permite que usuários membros do grupo “Domain Admins” insiram estações no domínio samba

enable privileges = yes

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

cd /etc/ldap/schema
cp /usr/share/doc/sambadoc/
examples/LDAP/samba.schema ./
include /etc/ldap/schema/samba.schema

no arquivo de configuração sldap.conf, adicione também os seguintes índices

index sambaID eq
index sambaPrimaryGroupSID eq
index SambaDomainName eq

e ainda na diretiva access

access to attrs=userPassword,sambaLMPassword,sambaNTPassword
by anonymos auth
by self write
by * none

feito isso pare o servidor LDAP, reindex o servidor em modo offline

/etc/init.d/sldap stop
slapindex –v
chown openldap: /var/lib/ldap/*
/etc/init..d/slapd start

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:

Smbpasswd –w senhadoAdmin

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.

net getlocalsid FAJESU

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

ldapsearch –x LLL
–b 'dc=fajesu,dc=edu,dc=br'

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

dn: ou=Computers,dc=fajesu,dc=edu,dc=br
ou: Computers
objectClass: top
objectClass: organizationalUnit
ldapadd –x –D "cn=Admin,dc=fajesu,dc=edu,dc=br" –W –f computers.ldif

Agora iremos iniciar nosso servidor samba:

/etc/init.d/samba start

Como ainda não configuramos as ferramentas smbldaptools a criação de usuários ainda será diretamente no LDIF Usuário.ldif

Dn: uid=fernando,ou=Usuários,dc=fajesu,dc=edu,dc=br
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: sambaSamAccount
cn: Fernando Lamellas
givenName: Fernando
sn: Lamellas
uid: pflamellas
uidNumber: 1000
gidNumber: 513
homeDirectory: /home/pflamellas
loginShell: /bin/bash
gecos: System User
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 214483647
sambaPwdCanChange: 0
displayName: System User
sambaLogonScript: logon.cmd
sambaProfilePath:
sambaHomePath:
sambaHomeDrive: Z:
sambaLMPassword: 123456
sambaAcctFlags: [U]
sambaNTPassword: 123456
sambaPwdLastSet: 1122827572
sambaPwdMustChange: 1130603572
userPassword: 123456

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:

#aptget install smbldaptools

Iremos agora configurar os arquivos para correta utilização

cd /etc/smbldaptools
cp /usr/share/doc/smvldaptools/
examples/smbldap_bind.conf .
cp /usr/share/doc/smbldaptools/
examples/smbldap.conf.gz .
gunzip smbldap.conf.gz

editando o arquivo smbldap_bind.conf e adicionar o seguinte

slaveDN=”cn=Admin,dc=fajesu,dc=edu,dc=br”
slavePw=”123”
masterDN=”cn=Admin,dc=fajesu,dc=edu,dc=br”
masterPw=”123”

devemos ainda acertar o arquivo smbldap.conf com as informações de nossa rede

SID=” obtido anteriormente”
sambaDomain=”FAJESU”

Iinformações LDAP

slaveLDAP=“ïpdoservidorLDAP”
slavePort=”389”
masterLDAP=”ipdoservidorLDAP”
masterPort=”389”

Devemos ainda acertar o arquivo de configuração do samba em /etc/samba/smb.conf logo após a diretiva global

ldap suffix = dc=fajesu,dc=edu,dc=br

Permite a criação automática de máquinas ao efetuar join no domínio

add user script = /usr/sbin/smbldapuseradd -m “%u”
delete user script = /usr/sbin/smbldapuserdel “%u”
add machine script = /usr/sbin/smbldapuseradd -t 0 -w “%u”
add group script = /usr/sbin/smbldapgroupadd -p “%g”
add user to group script = /usr/sbin/smbldapgroupmod -m “%u” “%g”
delete user from group script = /usr/sbin/smbldapgroupmod -x “%u” “%g”
set primary group script = /usr/sbin/smbldapusermod -g '%g' '%u'