Instalación servidor LDAP, ldap-utils: ldapsearch

De Manuais Informática - IES San Clemente.
Ir a la navegación Ir a la búsqueda

Introdución

  • Neste apartado aparte de instalar os paquetes necesarios e tamén imos pararnos un pouco en revisar os ficheiros de LDAP para familiarizarnos un pouco máis coa súa estrutura.
  • A imaxe amosa o escenario 1.E

00 Dominios Linux Escenarios parte 01 E.jpg

  • IMPORTANTE: para manter a compatibilidade na parte V con SAMBA o nome de dominio non debe exceder os 15 caracteres (Neste caso iescalquera ten 11).


Instalar os paquetes necesarios

  • En primeiro lugar, teremos que instalar no servidor os paquetes necesarios para a execución do servidor LDAP (slapd (Standalone LDAP Daemon)) .
  • Logo instalaremos as utilidades básicas para manexar a súa información. O comando que usaremos será este:

</source>

Agregar os esquemas básicos

  • Como xa indicamos na parte introdutoria ao instalar o servizo LDAP en Debian (slapd), este xa instala por defecto os catro esquemas que se indicaron anteriormente: core, COSINE, NIS, inetOrgPerson.
  • Pronto o comprobaremos.
  • Se non estiveran instalados, ou quixeramos instalar algún outro debemos executar:
ldapadd -Y EXTERNAL -H ldapi:/// -f /ruta ao esquema/esquema.ldif
  • O comando ldapadd instalarémolo máis adiante, este atópase no paquete ldap-utils que non instalamos por agora.
  • Se observásemos a saída da execución dese comando, veriamos que se produce un erro se intentamos engadir un esquema que xa existe, por exemplo core, debido a que xa está engadido:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=core,cn=schema,cn=config"
ldap_add: Other (e.g., implementation specific) error (80)
	additional info: olcAttributeTypes: Duplicate attributeType: "2.5.4.2"

Se se engade un esquema que non existe o resultado sería semellante a, por exemplo o esquema openldap:

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=openldap,cn=schema,cn=config"

Instalar e configurar slapd

  • A continuación imos instalar slapd, examinar os ficheiros de ldap e configurar o paquete para o noso dominio iescalquera.local.

Instalación do paquete

Ficheiros de ldap

  • Unha vez instalado o paquete imos ver un pouco os ficheiros que que xestiona o servizo slapd. Estes atópanse en:
    • /etc/ldap/*: ficheiros de configuración do directorio ldap.
    • /etc/default/sldap: ficheiro de configuración do servizo slapd.
    • /var/lib/ldap/*: onde están as bases de datos que usa slapd.
    • /usr/lib/ldap/*: contén módulos que pode usar slapd.


  • Instalamos o paquete tree para axudarnos coa estrutura de ficheiros:
    apt-get install tree
  • Imos ver por arriba a estrutura da seguinte imaxe

Esquema config1.png

Configuración de slapd

  • Trala lectura do punto anterior, que tal se lle damos unha segunda volta? e logo imos configurar por fin o servidor.
  • A continuación imos personalizar a configuración do directorio ldap para o noso dominio iescalquera.local.
  • O que imos facer a continuación con pantallas de configuración vai xerar uns ficheiros ldif, que poderíamos xerar nós á man, e logo cargar.
  • Podemos realizar a configuración tantas veces como precisemos, por se nos trabucamos, usando o comando dpkg-reconfigure que se usa para a reconfiguración dos paquetes unha vez instalados:
dpkg-reconfigure slapd
  • Pero precisamos algo máis para ler e escribir na BD pois agora toca traballar con ficheiros LDIF, para iso instalaremos ldap-utils.

Utilidades ldap: paquete ldap-utils

  • A continuación imos instalar o paquete ldap-utils que nos vai proporcionar utilidades:
  • para consultar o directorio de LDAP
  • engadir/modificar/eliminar obxectos
  • poder cambiar o contrasinal dun usuario, etc.

Instalación de ldap-utils


Consultar a BD: ldapsearch

  • A continuación imos testar que todo funciona e para iso usaremos o comando ldapsearch.
  • No seguinte enlace pódese consultar o manual de ldapsearch: http://linux.die.net/man/1/ldapsearch
  • A continuación amosamos algúns dos parámetros que imos usar nesta primeira aproximación ao comando:
    • -x: usar autenticación simple.
    • -Y EXTERNAL: usa autenticación SASL (Simple Authentication and Security Layer - capa de seguridade e autenticación simple)
    • -D dn: dn para conectarse ao LDAP indicando o nome de usuario co que nos imos conectar.
    • -w contrasinal: Indicar o contrasinal para conectarse ao LDAP.
    • -W: Obrigamos a que o comando pide o contrasinal para conectarse ao LDAP en lugar de recibilo como parámetro.
    • -H ldapuri: Especificar a URI coa que nos imos conectar ao servidor ldap. Por exemplo ldap://localhost ou ldapi://
    • filtro indica que nos devolva as entradas que coincidan cos valores dos atributos que indicamos no filtro.
    • -b base de busca: para indicar en que obxecto da árbore comezar a buscar
    • -s base|one|sub: indica se queremos que nos devolva os atributos e valores:
      • base: só do obxecto que estamos consultando
      • one: só dos obxectos que están un nivel por debaixo do obxecto consultado.
      • sub: do obxecto consultado e de toda a súa subárbore. É o valor por defecto.


  • O formato do comando é (non precisamente nesa orde):
ldapsearh método_autenticación base ldapuri filtros
  • Os valores que indicamos para os parámetros poden ir ou non entre comiñas simples ('valores') se vemos que se poden confundir cos parámetros, pero non é obrigatorio.


Consultar o dominio creado

  • Indicamos como base o tope da xerarquía e como filtros calquera clase de obxecto.
  • Observar que o propio comando nas liñas 4-7 amosa que é o que pretendemos consultar.
  • O que nos interesa está na liña 12.
root@dserver00:~#  ldapsearch -x -b '' -s base objectclass=* namingcontexts
# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: objectclass=*
# requesting: namingcontexts 
#

#
dn:
namingContexts: dc=iescalquera,dc=local

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


Consultar obxectos da rama dc=iescalquera,dc=local

  • Imos agora facer unha serie de consultas na nosa rama de interese. Por agora non temos moito nesa rama, faltan usuarios, grupos, etc, que crearemos no seguinte apartado.
  • Sen autenticación:
    • Observar as liñas marcadas (En formato PDF non se poden observar as liñas marcadas).
root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local'
# extended LDIF
#
# LDAPv3
# base <dc=iescalquera,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# iescalquera.local
dn: dc=iescalquera,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: iescalquera
dc: iescalquera

# admin, iescalquera.local
dn: cn=admin,dc=iescalquera,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2


  • Con autenticación SASL implícita:
    • precisamos indicar o servidor, neste caso con -H ldapi://
    • Obtemos a mesma información que no caso anterior
root@dserver00:~#  ldapsearch -Y EXTERNAL -H ldapi:// -b 'dc=iescalquera,dc=local'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
# extended LDIF
#
# LDAPv3
# base <dc=iescalquera,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# iescalquera.local
dn: dc=iescalquera,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: iescalquera
dc: iescalquera

# admin, iescalquera.local
dn: cn=admin,dc=iescalquera,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2


  • Indicando o usuario e contrasinal co que nos conectamos
    • Observar a liña 24, pois como somos o usuario admin ensínanos o hash asociado ao seu contrasinal.
    • Observar como con -D indicamos o usuario e con -w o contrasinal.
    • Nesta ocasión como uri usamos ldap://localhost, pero podería ser ldap://dserver00, ldap://dserver00.iescalquera.local (consultaríase o DNS), etc.
root@dserver00:~#  ldapsearch -D cn=admin,dc=iescalquera,dc=local -w abc123. -H ldap://localhost -b 'dc=iescalquera,dc=local'
# extended LDIF
#
# LDAPv3
# base <dc=iescalquera,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# iescalquera.local
dn: dc=iescalquera,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: iescalquera
dc: iescalquera

# admin, iescalquera.local
dn: cn=admin,dc=iescalquera,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9Qm5mRG9QTWVSUnUyalNpZUNXMEhWbnhvMlBnUWNrK1o=

# search result
search: 2
result: 0 Success


  • Indicando o usuario co que nos conectamos, pero non o contrasinal
    • Observar a liña 2, como pide o contrasinal de admin.
    • Nesta ocasión como uri usamos ldap://dserver00,
root@dserver00:~#  ldapsearch -D cn=admin,dc=iescalquera,dc=local -W -H ldap://dserver00 -b 'dc=iescalquera,dc=local'
Enter LDAP Password:


  • Indicando que so queremos consultar os valores do obxecto base, non os fillos
    • Para iso usamos o parámetro -s base
    • Observar a liña 5
root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' -s base
# extended LDIF
#
# LDAPv3
# base <dc=iescalquera,dc=local> with scope baseObject
# filter: (objectclass=*)
# requesting: ALL
#

# iescalquera.local
dn: dc=iescalquera,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: iescalquera
dc: iescalquera

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


  • Indicando que só queremos consultar os valores dos obxectos fillos do base, non os do obxecto base
    • Para iso usamos o parámetro: -s one
    • Lembrar que por defecto o valor do parámetro é: -s sub
    • Pero só temos un fillo.
    • Observar a liña 5.
root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' -s one
# extended LDIF
#
# LDAPv3
# base <dc=iescalquera,dc=local> with scope oneLevel
# filter: (objectclass=*)
# requesting: ALL
#

# admin, iescalquera.local
dn: cn=admin,dc=iescalquera,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


  • Poñemos un filtro no que indicamos que desexamos consultar os obxectos que teñan o atributo objectClass independentemente do valor que teña ese atributo
    • Para iso poñemos un filtro cos atributos e os valores buscados.
    • Obviamente o atributo objectClass teno todo obxecto.
    • Observar que non é sensible ás maiúsculas.
    • Observar a liña 6
root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' obJecTcLass=*
# extended LDIF
#
# LDAPv3
# base <dc=iescalquera,dc=local> with scope subtree
# filter: obJecTcLass=*
# requesting: ALL
#

# iescalquera.local
dn: dc=iescalquera,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: iescalquera
dc: iescalquera

# admin, iescalquera.local
dn: cn=admin,dc=iescalquera,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2


  • Poñemos un filtro no que indicamos que desexamos consultar os obxectos que teñan o atributo objectClass co valor dcObject
    • Para iso poñemos un filtro co atributo e o valor desexado.
    • Agora só obtemos os obxectos que cumpren coa condición.
    • Observar a liña 6
root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' objectclass=dcobject
# extended LDIF
#
# LDAPv3
# base <dc=iescalquera,dc=local> with scope subtree
# filter: objectclass=dcobject
# requesting: ALL
#

# iescalquera.local
dn: dc=iescalquera,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: iescalquera
dc: iescalquera

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
  • Outros exemplos sobre o mesmo.
  • Poñemos un filtro no que indicamos que desexamos consultar os obxectos que teñan o atributo 'cn' independentemente do valor que teña ese atributo
    • Temos un só obxecto que cumpre co filtro.
    • Observar a liña 6
root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' cn=*
# extended LDIF
#
# LDAPv3
# base <dc=iescalquera,dc=local> with scope subtree
# filter: cn=*
# requesting: ALL
#

# admin, iescalquera.local
dn: cn=admin,dc=iescalquera,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


  • Poñemos un filtro no que indicamos que desexamos consultar os obxectos que teñan o atributo cn co valor admin
    • Temos o mesmo obxecto anterior que cumpre co filtro.
    • Observar a liña 6
root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' cn=admin
# extended LDIF
#
# LDAPv3
# base <dc=iescalquera,dc=local> with scope subtree
# filter: cn=admin
# requesting: ALL
#

# admin, iescalquera.local
dn: cn=admin,dc=iescalquera,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


-- Antonio de Andrés Lema e Carlos Carrión Álvarez