Primeira Configuração – LDAP

Como prometido na semana passada estou dando prosseguimento sobre o servidor LDAP e desta vez com uma configuração (básica) do mesmo.

Configuração do servidor

# apt-get install slapd ldap-utils

Por padrão o debian sempre define o admin na instalação do slapd, informe a senha e confirme.

 

 

Vamos parar o servidor LDAP

# invoke-rc.d slapd stop

Vamos informar ao daemon do ldap que iremos utilizar o arquivo slapd.conf

# vi /etc/default/slapd

SLAPD_CONF="/etc/ldap/slapd.conf"

Apague todos os arquivos de /var/lib/ldap exceto DB_CONFIG

# vi /etc/ldap/slapd.conf

# Allow LDAPv2 binds
allow bind_v2

# This is the main slapd configuration file. See slapd.conf(5) for more
# info on the configuration options.
#####################################################
# Global Directives:
# Schema and objectClass definitions
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema

# Where the pid file is put. The init.d script
# will not stop the server if you change this.
pidfile /var/run/slapd/slapd.pid

# List of arguments that were passed to the server
argsfile /var/run/slapd/slapd.args

# Read slapd.conf(5) for possible values
loglevel 0

# Where the dynamically loaded modules are stored
modulepath /usr/lib/ldap
moduleload back_bdb

# The maximum number of entries that is returned for a search operation
sizelimit 500

# The tool-threads parameter sets the actual amount of cpu's that is used
# for indexing.
tool-threads 1

#####################################################
# Specific Backend Directives for bdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend bdb

checkpoint 512 30

#####################################################
# Specific Directives for database #1, of type bdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database bdb

# The base of your directory in database #1
suffix "dc=cooperati,dc=local"

# Where the database file are physically stored for database #1
directory "/var/lib/ldap"

# For the Debian package we use 2MB as default but be sure to update this
# value if you have plenty of RAM
dbconfig set_cachesize 0 20971520 0

# Sven Hartge reported that he had to set this value incredibly high
# to get slapd running at all. See http://bugs.debian.org/303057
# for more information.
# Number of objects that can be locked at the same time.
dbconfig set_lk_max_objects 1500

# Number of locks (both requested and granted)
dbconfig set_lk_max_locks 1500

# Number of lockers
dbconfig set_lk_max_lockers 1500

# Indexing options for database #1
index objectClass eq

# Save the time that the entry gets modified, for database #1
lastmod on

# The admin dn has full write access, everyone else
# can read everything.
access to attrs=userPassword,shadowLastChange
by anonymous auth
by self write
by * none

access to dn.base="" by * read
access to *
by * read

Descrição das principais opções:

include /diretório/schema – Carrega o schema informado (Arquivos que contem a estrutura dos atributos e objetos que LDAP consegue manipular).

modulepath /diretório – Diretório onde estão os módulos que serão lidos dinamicamente.

moduleload módulo – Qual módulo será carregado. Para carregar outro módulo basta adicionar outra linha como esta.

loglevel nível/chave – Nível de log. Pode utilizar o seguinte formato:

LogLevel 129
LogLevel 0x81
LogLevel 128 1
LogLevel 0x80 0x1
LogLevel acl trace

Obs.: -1 Produz uma grande quantidade de informações e “none”.

backend tipo – Tipo de base de dados utilizado, os principais tipos são:

bdb               Berkeley DB transactional backend
config           backend de configuração do Slapd
dnssrv          DNS SRV backend
hdb               Variante do backend bdb.
ldap              Lightweight Directory Access Protocol (Proxy) backend
ldif                Lightweight Data Interchange Format backend
meta             Meta Directory backend
monitor       Monitor backend
passwd         Prove acesso somente de leitura a passwd(5)
perl               Perl Programmable backend
shell              Shell (programa externo) backend
sql                 SQL Programmable backend

database <índice>banco – Qual o banco de dados utilizado no diretório. O índice ser utilizado para distinguir vários bancos de dados do mesmo tipo, mas pode ser omitido. E banco é um dos tipos listados acima.

cachesize valor – Define o número de entradas que backend LDAP irá manter na memória. Para melhor performance, este número é igual ao número de entradas no seu diretório, mas pode ser menor. Este não é o cache do Banco de Dados, mas o cache interno próprio do OpenLDAP. O valor padrão -e 1000.

sizelimit valor – Especifica o número máximo de entradas retornadas de uma operação de pesquisa.

mode octal – Permissão dos arquivos da base de dados do diretório.

suffix “DN” – Especifica o sufixo DN de consultas que serão passadas para o backend de banco de dados. Podem haver mais linhas suffix, mas somente um é requerido.

rootdn “DN” – Especifica o controle administrativo sobre o diretório, pode ser utilizado um mechanismo SASL ao invés de um usuário administrador.

rootpw senha – Senha para rootdn, pode ser texto puro ou fornecido um HASH com a senha por meio do comando slappasswd.

directory “/diretório” – Local onde os arquivos da base de dados do diretório estão armazenados.

pidfile arquivo – Arquivo contendo o PID do daemon do ldap (slapd).

argsfile arquivo – Arquivo contendo os parâmetros repassados ao slapd.

tool-threads valor – Especifica a quantidade real de CPUs utilizadas para a indexação.

index atributo tipo – Cria índices para acelerar as buscas do atributo informado e indica qual o tipo de índice utilizado.

Tipos              Descrição

pres                  Relacione com o tipo de atributo, ao invés do valor do atributo.

eq                      Relaciona com o valor exato do atributo, como (cn=Ricardo) retorna somente as combinações exatas de “Ricardo”.

sub                    Indexa buscas com coringas, como em (cn=admin*). E as variantes:

subinitial         (cn=admin*)

subany              (cn=*user1*)

subfinal            (cn=*admin)

lastmod on – Grava a hora da última operação de gravação no banco de dados.

access – Lista de controle de acesso, controle de quem pode acessar o que e como será o acesso.

Criar o hash com a senha do admin do ldap

# slappasswd -h {SSHA} | tee -a /etc/ldap/slapd.conf

Como podem reparar o hash foi apresentado na saída padrão e direcionada para o final do arquivo slapd.conf

Voltando ao arquivo slapd.conf

# vi /etc/ldap/slapd.conf

Vá para o final do arquivo localize e selecione o hash da senha

Copie o hash para a memória e adicione na linha rootpw, substituindo a criptografia existente

 

Após a substituição comente as 3 últimas linhas do slapd.conf, ou se preferir apague-as. Agora podemos iniciar o daemon do ldap.

# invoke-rc.d slapd start

Vamos alterar o arquivo hosts para incluir estaticamente o nome do servidor ldap

# vi /etc/hosts

10.1.1.178        ldap-server

Vamos configurar o cliente ldap

# vi /etc/ldap/ldap.conf

BASE        dc=cooperati,dc=local
URI        ldap://10.1.1.178

Vamos adicionar o domínio e admin a base

# cd /etc/ldap
# mkdir LDIF
# cd LDIF
# vi init.ldif 

# Entrada do domínio
dn: dc=cooperati,dc=local
objectClass: organization
objectClass: dcObject
o: cooperati.local
dc: cooperati

# Entrada da conta de administração
dn: cn=admin,dc=cooperati,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: Administrador LDAP
userPassword: {SSHA}tpUEoR8iJk0tA1qAM/NDDmpk34mAsewF

Obs.: Copiei o hash da senha do admin do arquivo slapd.conf e passei para ‘userPassword:’

Vamos adicionar as entradas na base

# ldapadd -x -D ‘cn=admin,dc=cooperati,dc=local’ -W -f init.ldif

Vamos conferir se está tudo certo:

# ldapsearch -x -D ‘cn=admin,dc=cooperati,dc=local’ -W

-x - Autenticação simples, sem SASL
-D - Vinculo com a DN informada
-W - Solicita a senha

Vamos criar 2 OU para usuários e grupos

# vi OUs.ldif

# OU para usuarios
dn: ou=People,dc=cooperati,dc=local
objectClass: top
objectclass: organizationalUnit
ou: People

# OU para grupos
dn: ou=Group,dc=cooperati,dc=local
objectClass: top
objectclass: organizationalUnit
ou: Group

Para adicionar ao LDAP execute:

# ldapadd -x -D ‘cn=admin,dc=cooperati,dc=local’ -W -f OUs.ldif

Vamos criar um usuário para fins de teste:

# adduser user1

Vamos instalar o migrationtools para converter usuários e grupos Unix para o ldap

# apt-get install migrationtools

Copie os arquivos password e group do migrationtools de /usr/share/migrationtools para seu diretorio atual.

# cp /usr/share/migrationtools/migrate_passwd.pl .
# cp /usr/share/migrationtools/migrate_group.pl .
# cp /usr/share/migrationtools/migrate_common.ph .

Modifique o arquivo migrate_common.ph nas linhas 71, 74, 90:

# vi migrate_common.ph

# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "cooperati.local";
# Default base
$DEFAULT_BASE = "dc=cooperati,dc=local";
# turn this on to support more general object clases
# such as person.
$EXTENDED_SCHEMA = 1;

## Comente a variavel DEFAULT_REALM que configura o EXTENDED schema nas linhas 135, 136:
# $DEFAULT_REALM = $DEFAULT_MAIL_DOMAIN;
# $DEFAULT_REALM =~ tr/a-z/A-Z/;

Para usar o migrationtools para migrar as contas para o arquivo passwd.ldif:

# grep user1 /etc/passwd > user1
# ./migrate_passwd.pl user1 > user1.ldif

O arquivo user1.ldif deve conter entradas apenas para o usuário user1.

Adicione o novo usuário a base de dados:

# ldapadd -x -D ‘cn=admin,dc=cooperati,dc=local’ -W -f user1.ldif

Crie o arquivo de grupo usando migrate_group.pl script:

# grep user1 /etc/group > group
# ./migrate_group.pl group > group.ldif

O arquivo group.ldif deve conter apenas a entrada para o grupo user1.
Adicione o novo grupo a base de dados:

# ldapadd -x -D ‘cn=admin,dc=cooperati,dc=local’ -W -f group.ldif

A parte pesada de configuração, e explicação, do servidor já foi concluída. No próximo post iremos exportar o home dos usuários, e iremos configurar o cliente.

Espero que tenham gostado do post e aguardo seus comentários.