Fonte: http://sites.google.com/site/brenosobral/linux/ldap
- slapd: este é daemon isolado do LDAP. Ele escuta por conexões LDAP na porta 389 (636 para SSL)
- slurpd: este prorroga as alterações de um banco de dados LDAP para outra topologia mestre/escrava em uso.
Arquivo de configuração
/etc/openldap/slapd.conf ou /etc/ldap/sldapd.conf
LDAP significa Lightweight Directory Access Protocol, ou seja, Protocolo de Leve Acesso a Diretórios. Como o nome sugere, é um protocolo leve para acessar serviços de diretório. O LDAP roda em cima do protocolo TCP/IP ou outras conexões de transferência de serviços.
A forma de armazenamento dos dados em um servidor de Diretórios segue a hierarquia dos objetos a que pertence a entrada. No exemplo abaixo, para identificarmos o usuário, teremos algo como:
cn=Joao Maria,ou=People,o=empresa,st=para,c=br
Este tipo de entrada é chamada de DN (Distinguished Name) ou nome único. O DN deve sempre indicar todos os ramos da árvore LDAP, desde a base (dc=br) até a parte final, a identificação do usuário propriamente dita.
OBS: o DN deve ser único em todo o Diretório LDAP.
OBS: DIT é o topo da árvore de direorio (exemplo: dc=exemplo,dc=com,dc=br)
OBS: o serviço de LDAP pode ser acesso via LDAP URL's. Exemplo: ldap(s)://host:port/dn?attributes?scope?filter?extensions.
Uma outra forma de construir sua árvore de Diretórios é utilizando componentes de dominio Internet (dc). Desta forma o LDAP fica que nem o DNS, exemplo:
uid=joao.maria,ou=People,dc=exemplo,dc=com,dc=br
ObjectClass
O LDAP permiti que você controle quais atributos são necessários ou quais são permitidos para uma entrada, por meio de um atributo especial chamado objectClass. Por exemplo, para cadastrarmos o topo da árvore do Diretório (dc=exemplo,dc=com,dc=br), devemos utilizar uma objectClass do tipo dcObject (Objetos Componentes de Dominios); cara criação de uma unidade organizacional (ou=People,dc=exemplo,dc=com,dc=br), utilizamos organizationaUnit; e de modo geral, para usuários, utilizamos inetOrgPerson.
Criação de arquivo LDIF
Criando o DIT
#arquivo empresa.ldif
dn: dc=exemplo,dc=com,dc=br
objectClass: dcObject
objectClass: organization
o: Exemplo Ltda
dc: exemplo
# ldapadd -x -h servidor -D "cn=admin,dc=exemplo,dc=com,dc=br" -f empresa.ldif –W
Onde:
-x : autenticação simples
-h : servidor ldap
-D : usuário que fará a operação
-f : indica o nome do arquivo ldif
-W : solicita a senha para ser executa (poderia usar -w <senha>)
Criando as Unidades Organizacionais
#arquivo unidades.ldif
dn: ou=People,dc=exemplo,dc=com,dc=br
objectClass: top
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=exemplo,dc=com,dc=br
objectClass: top
objectClass: organizationalUnit
ou: Group
# ldapadd -x -h servidor -D "cn=admin,dc=exemplo,dc=com,dc=br" -f unidades.ldif –W
Criando um Usuário
#arquivo usuario.ldif
dn: uid=joa.maria,ou=People,dc=exemplo,dc=com,dc=br
cn: Joao Maria
sn: Silva
givenName: Joao
uid: joao.maria
uidNumber: 10000
gidNumber: 1000
homeDirectory: /home/joao.maria
loginShell: /bin/bash
gecos: Joao Maria
mail: joao.maria@exemplo.com.br
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
userPassword: dsdsadasdasdasdsa
# ldapadd -x -h servidor -D "cn=admin,dc=exemplo,dc=com,dc=br" -f unidades.ldif –W
Removendo um DN de uma Base de LDAP
Exemplo, neste caso vamos remover o DN uid=joa.maria,ou=People,dc=exemplo,dc=com,dc=br
# ldapdelete -x -D "cn=admin,dc=exemplo,dc=com,dc=br" -W -v "uid=joa.maria,ou=People,dc=exemplo,dc=com,dc=br"
Modificando um DN de uma Base de LDAP
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; caso este atributo já exista, será acrescentado mais um valor ao atributo.
-delete: remove o valor daquele atributo e, caso este valor seja único, remove o atributo.
-replace: substitui o valor do atributo pelo valor indicado.
Exemplo (changetype add)
#arquivo mudanca.ldif
dn: cn=Internet,ou=Group,dc=exemplo,dc=com,dc=br
changetype: modify ---> Estou dizendo que vou modificar o atributo do DN
add: memberUid ---> Estou dizendo que irei acrescentar um atributo
memberUid: joa.maria ---> O atributo que estou adicionando
OBS: Nesta entrada (DN), existe vários atributos memberUid, os quais seriam os usuários que pertencem ao grupo Internet.
# ldapmodify -x -D "cn=admin,dc=exemplo,dc=com,dc=br" -W -f mudanca.ldif
Exemplo (changetype replace)
#arquivo mudanca.ldif
dn: uid=joa.maria,ou=People,dc=exemplo,dc=com,dc=br"
changetype: modify --> Estou dizendo que vou modificar o atributo do DN
replace: userPassword ---> Estou dizendo que irei alterar o valor de um atributo
userPassword: senhanova --> O atributo que estou alterando
# ldapmodify -x -D "cn=admin,dc=exemplo,dc=com,dc=br" -W -f mudanca.ldif
Exemplo (changetype delete)
#arquivo mudanca.ldif
dn: cn=Internet,ou=Group,dc=exemplo,dc=com,dc=br
changetype: modify ---> Estou dizendo que vou modificar o atributo do DN
delete: memberUid ---> Estou dizendo que irei deletar um atributo
memberUid: joao.maria ---> O atributo que estou deletando
OBS: Nesta entrada (DN), existe vários atributos memberUid, os quais seriam os usuários que pertencem ao grupo Internet.
# ldapmodify -x -D "cn=admin,dc=exemplo,dc=com,dc=br" -W -f mudanca.ldif
Pesquisando uma Base Ldap
Sintaxe
ldasearch [opções] [filtros] [atributos ...]
-x : autenticação simples
-h : servidor ldap
-b : base de pesquisa
-L : formato da saída do LDIF. Se omitido é utilizado o formato estendido, pode ser -LL (suprime comentários) e -LLL (suprime versão)
[filtros] : condição de pesquisa, se omitido assume '(objectClass)'
[atributos] : atributos que devem ser retornados na pesquisa
Exemplos:
# ldapsearch -x '(objectClass)'
# ldapsearch -x '(cn=br*)'
# ldapsearch -x -LLL
Comandos úteis
* Para criar uma copia de segurança da base do servidor OpenLDAP execute:
# slapcat -l copia.ldif
* Para restaurar uma copia de segurança da base do servidor OpenLDAP execute:
# slapadd -l copia.ldif
* Para reindexar a base do servidor OpenLDAP execute:
# slapindex
* Testa os arquivos de configurações
# slaptest
* ara alterar a senha de uma entrada LDAP
# ldappasswd
* Gerar um senha SSHA
# slappasswd -h {SSHA}
* Para recuperar a base do servidor OpenLDAP, dentro da pasta /var/lib/ldap execute:
# db4.2_recover
PAM - LDAP
OBS: To control the ldap based authentication through the PAM, Auth is not a required test.
[root@caete pam.d]# cat login
#%PAM-1.0
auth required pam_securetty.so
auth required pam_stack.so service=system-auth
auth required pam_nologin.so
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
session optional pam_console.so
[root@caete pam.d]# cat system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required /lib/security/$ISA/pam_env.so
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok ---> Local autenticação
auth sufficient /lib/security/$ISA/pam_ldap.so use_first_pass ---> LDAP autenticação
auth required /lib/security/$ISA/pam_deny.so
account required /lib/security/$ISA/pam_unix.so
account sufficient /lib/security/$ISA/pam_localuser.so
password required /lib/security/$ISA/pam_cracklib.so retry=3
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password sufficient /lib/security/$ISA/pam_ldap.so use_authtok
password required /lib/security/$ISA/pam_deny.so
session optional /lib/security/$ISA/pam_mkhomedir.so silent umask=0027
session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so
session optional /lib/security/$ISA/pam_ldap.so
Exemplo de LDAP com SAMBA
/etc/ldap/slapd.conf
#######################################################################
# Secção Global
#######################################################################
# Permite LDAPv2
allow bind_v2
# Definições de Schema e objectClass
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema
# Permite a checagem dos "schemas" forçando entradas serem verificadas
# através de seus respectivos objectclass
schemacheck on
# Onde o arquivo .pid está. O script /e/tc/init.d/slapd
# não conseguirá parar o serviço se você alterar isso.
pidfile /var/run/slapd/slapd.pid
# Lista dos argumentos que são passados ao servidor
argsfile /var/run/slapd/slapd.args
# ===== Habilita a geracao de log's =====
# Quando em producao colocar 0 se nao precisar de log
loglevel 256
# Diretorio dos modulos dinamicos
modulepath /usr/lib/ldap
moduleload back_bdb
#======================================================================
# Descomente as seguintes linhas para habilitar o SSL e usar o
# certificado default snakeoil.
#TLSCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
#TLSCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
#======================================================================
########################################################################
## Secção Específica para Backend,
## do tipo bdb:
########################################################################
backend bdb
########################################################################
### Secção Específica para:
### Database #1 dc=teste:
#########################################################################
database bdb
## A base de diretório
suffix "dc=teste"
## Usuario LDAP_ROOT_DN
rootdn cn=admin,dc=teste
## Senha do LDAP_ROOT_DN criptografada com
## slappasswd -h {SSHA} -s testesenha
rootpw {SSHA}jHhKoD6nS4yHSkJyS9qkoyPYuSMzsZwS
## Checkpoint do dtabase bdb após 256kb escritos ou 5 minutos terem passado
## desde o último checkpoint
checkpoint 256 5
## Onde os arquivos do database são fisicamente armazenados
directory "/var/lib/ldap"
## Estruturas de Indices
index cn,sn,uid,displayName pres,sub,eq
index memberUID,mail,givenname eq,subinitial
index objectClass,uidNumber,gidNumber eq
index sambaSID,sambaPrimaryGroupSID,sambaDomainName eq
index uniqueMember,entryCSN,entryUUID eq
## Armazenar a data/hora que os registros forem modificados
lastmod on
## Os campos sambaLMPassword,sambaNTPassword,userPassword,
## sambaPasswordHistory e sambaPwdLastSet podem ser alterados
## pelos prórios usuários - se iverem se autenticado.
## Outros usuários não podem Ver estes campos.
access to attrs=sambaLMPassword,sambaNTPassword,userPassword,sambaPasswordHistory,sambaPwdLastSet
by dn="cn=admin,dc=teste" write
by anonymous auth
by self write
by * none
## Note that this is covered by the 'access to *'
## ACL below too but if you change that as people
## are wont to do you'll still need this if you
## want SASL (and possible other things) to work
## happily.
access to dn.base="" by * read
## O dn administrador tem acesso completo, o restante
## podem apenas Ler.
access to *
by dn="cn=admin,dc=teste" write
by * read
Exemplo do LDAP SLAVE:
/etc/ldap/slapd.conf
# This is the main slapd configuration file. See slapd.conf(5) for more
# info on the configuration options.
#######################################################################
# Global Directives:
# Features to permit
#allow bind_v2
# 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 none
# Where the dynamically loaded modules are stored
modulepath /usr/lib/ldap
moduleload back_hdb
# 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 hdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend hdb
#######################################################################
# Specific Backend Directives for 'other':
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
#backend <other>
#######################################################################
# Specific Directives for database #1, of type hdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database hdb
# The base of your directory in database #1
#suffix "dc=dg,dc=teste"
suffix "dc=teste"
rootdn "uid=admin,ou=Usuarios,dc=teste"
rootpw {SSHA}V+UUol0tJnPQdnRMinAwYxaoB/kVaD8u
# rootdn directive for specifying a superuser on the database. This is needed
# for syncrepl.
# rootdn "uid=admin,ou=Usuarios,dc=teste"
# Where the database file are physically stored for database #1
directory "/var/lib/ldap"
# The dbconfig settings are used to generate a DB_CONFIG file the first
# time slapd starts. They do NOT override existing an existing DB_CONFIG
# file. You should therefore change these settings in DB_CONFIG directly
# or remove DB_CONFIG and restart slapd for changes to take effect.
# 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 2097152 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
index cn,sn eq
###########
index entryCSN eq
index entryUUID eq
##########
syncrepl rid=001
provider=ldap://10.10.48.2
binddn="uid=admin,ou=Usuarios,dc=teste"
bindmethod=simple
credentials=@testesenha
searchbase="dc=teste"
filter="(objectClass=*)"
attrs="*,+"
type=refreshOnly
interval=00:00:05:00
retry="60 10 300 3"
scope=sub
updateref ldap://10.10.48.2
############
###########
#index cn,sn,uid,displayName pres,sub,eq
#index memberUID,mail,givenname eq,subinitial
#index objectClass,uidNumber,gidNumber eq
##########
# Save the time that the entry gets modified, for database #1
lastmod on
# Checkpoint the BerkeleyDB database periodically in case of system
# failure and to speed slapd shutdown.
checkpoint 512 30
# Where to store the replica logs for database #1
# replogfile /var/lib/ldap/replog
# The userPassword by default can be changed
# by the entry owning it if they are authenticated.
# Others should not be able to see it, except the
# admin entry below
# These access lines apply to database #1 only
access to attrs=userPassword,shadowLastChange
by dn="uid=admin,ou=Usuarios,dc=teste" write
by anonymous auth
by self write
by * none
# Ensure read access to the base for things like
# supportedSASLMechanisms. Without this you may
# have problems with SASL not knowing what
# mechanisms are available and the like.
# Note that this is covered by the 'access to *'
# ACL below too but if you change that as people
# are wont to do you'll still need this if you
# want SASL (and possible other things) to work
# happily.
access to dn.base="" by * read
# The admin dn has full write access, everyone else
# can read everything.
access to *
by dn="uid=admin,ou=Usuarios,dc=teste" write
by * read
# For Netscape Roaming support, each user gets a roaming
# profile for which they have write access to
#access to dn=".*,ou=Roaming,o=morsnet"
# by dn="uid=admin,ou=Usuarios,dc=teste" write
# by dnattr=owner write
#######################################################################
# Specific Directives for database #2, of type 'other' (can be hdb too):
# Database specific directives apply to this databasse until another
# 'database' directive occurs
#database <other>
# The base of your directory for database #2
#suffix "dc=debian,dc=org"
OBS:
No servidor master acrescente as seguintes linhas no /etc/ldap/slapd.conf
moduleload syncprov
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
#mais os indexes
index entryCSN eq
index entryUUID eq
Como estamos acrescentando novos índices:
# /etc/init.d/slapd stop
# slapindex -v
# chown openldap: /var/lib/ldap/*
# /etc/init.d/slapd start
Nenhum comentário:
Postar um comentário