Instalación servidor LDAP, ldap-utils: ldapsearch

De Manuais Informática - IES San Clemente.
Revisión del 07:53 7 oct 2017 de Carrion (discusión | contribuciones) (Configuración de slapd)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
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.
 1 root@dserver00:~#  ldapsearch -x -b '' -s base objectclass=* namingcontexts
 2 # extended LDIF
 3 #
 4 # LDAPv3
 5 # base <> with scope baseObject
 6 # filter: objectclass=*
 7 # requesting: namingcontexts 
 8 #
 9 
10 #
11 dn:
12 namingContexts: dc=iescalquera,dc=local
13 
14 # search result
15 search: 2
16 result: 0 Success
17 
18 # numResponses: 2
19 # 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).
 1 root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local'
 2 # extended LDIF
 3 #
 4 # LDAPv3
 5 # base <dc=iescalquera,dc=local> with scope subtree
 6 # filter: (objectclass=*)
 7 # requesting: ALL
 8 #
 9 
10 # iescalquera.local
11 dn: dc=iescalquera,dc=local
12 objectClass: top
13 objectClass: dcObject
14 objectClass: organization
15 o: iescalquera
16 dc: iescalquera
17 
18 # admin, iescalquera.local
19 dn: cn=admin,dc=iescalquera,dc=local
20 objectClass: simpleSecurityObject
21 objectClass: organizationalRole
22 cn: admin
23 description: LDAP administrator
24 
25 # search result
26 search: 2
27 result: 0 Success
28 
29 # numResponses: 3
30 # 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
 1 root@dserver00:~#  ldapsearch -Y EXTERNAL -H ldapi:// -b 'dc=iescalquera,dc=local'
 2 SASL/EXTERNAL authentication started
 3 SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
 4 SASL SSF: 0
 5 # extended LDIF
 6 #
 7 # LDAPv3
 8 # base <dc=iescalquera,dc=local> with scope subtree
 9 # filter: (objectclass=*)
10 # requesting: ALL
11 #
12 
13 # iescalquera.local
14 dn: dc=iescalquera,dc=local
15 objectClass: top
16 objectClass: dcObject
17 objectClass: organization
18 o: iescalquera
19 dc: iescalquera
20 
21 # admin, iescalquera.local
22 dn: cn=admin,dc=iescalquera,dc=local
23 objectClass: simpleSecurityObject
24 objectClass: organizationalRole
25 cn: admin
26 description: LDAP administrator
27 
28 # search result
29 search: 2
30 result: 0 Success
31 
32 # numResponses: 3
33 # 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.
 1 root@dserver00:~#  ldapsearch -D cn=admin,dc=iescalquera,dc=local -w abc123. -H ldap://localhost -b 'dc=iescalquera,dc=local'
 2 # extended LDIF
 3 #
 4 # LDAPv3
 5 # base <dc=iescalquera,dc=local> with scope subtree
 6 # filter: (objectclass=*)
 7 # requesting: ALL
 8 #
 9 
10 # iescalquera.local
11 dn: dc=iescalquera,dc=local
12 objectClass: top
13 objectClass: dcObject
14 objectClass: organization
15 o: iescalquera
16 dc: iescalquera
17 
18 # admin, iescalquera.local
19 dn: cn=admin,dc=iescalquera,dc=local
20 objectClass: simpleSecurityObject
21 objectClass: organizationalRole
22 cn: admin
23 description: LDAP administrator
24 userPassword:: e1NTSEF9Qm5mRG9QTWVSUnUyalNpZUNXMEhWbnhvMlBnUWNrK1o=
25 
26 # search result
27 search: 2
28 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,
1 root@dserver00:~#  ldapsearch -D cn=admin,dc=iescalquera,dc=local -W -H ldap://dserver00 -b 'dc=iescalquera,dc=local'
2 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
 1 root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' -s base
 2 # extended LDIF
 3 #
 4 # LDAPv3
 5 # base <dc=iescalquera,dc=local> with scope baseObject
 6 # filter: (objectclass=*)
 7 # requesting: ALL
 8 #
 9 
10 # iescalquera.local
11 dn: dc=iescalquera,dc=local
12 objectClass: top
13 objectClass: dcObject
14 objectClass: organization
15 o: iescalquera
16 dc: iescalquera
17 
18 # search result
19 search: 2
20 result: 0 Success
21 
22 # numResponses: 2
23 # 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.
 1 root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' -s one
 2 # extended LDIF
 3 #
 4 # LDAPv3
 5 # base <dc=iescalquera,dc=local> with scope oneLevel
 6 # filter: (objectclass=*)
 7 # requesting: ALL
 8 #
 9 
10 # admin, iescalquera.local
11 dn: cn=admin,dc=iescalquera,dc=local
12 objectClass: simpleSecurityObject
13 objectClass: organizationalRole
14 cn: admin
15 description: LDAP administrator
16 
17 # search result
18 search: 2
19 result: 0 Success
20 
21 # numResponses: 2
22 # 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
 1 root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' obJecTcLass=*
 2 # extended LDIF
 3 #
 4 # LDAPv3
 5 # base <dc=iescalquera,dc=local> with scope subtree
 6 # filter: obJecTcLass=*
 7 # requesting: ALL
 8 #
 9 
10 # iescalquera.local
11 dn: dc=iescalquera,dc=local
12 objectClass: top
13 objectClass: dcObject
14 objectClass: organization
15 o: iescalquera
16 dc: iescalquera
17 
18 # admin, iescalquera.local
19 dn: cn=admin,dc=iescalquera,dc=local
20 objectClass: simpleSecurityObject
21 objectClass: organizationalRole
22 cn: admin
23 description: LDAP administrator
24 
25 # search result
26 search: 2
27 result: 0 Success
28 
29 # numResponses: 3
30 # 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
 1 root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' objectclass=dcobject
 2 # extended LDIF
 3 #
 4 # LDAPv3
 5 # base <dc=iescalquera,dc=local> with scope subtree
 6 # filter: objectclass=dcobject
 7 # requesting: ALL
 8 #
 9 
10 # iescalquera.local
11 dn: dc=iescalquera,dc=local
12 objectClass: top
13 objectClass: dcObject
14 objectClass: organization
15 o: iescalquera
16 dc: iescalquera
17 
18 # search result
19 search: 2
20 result: 0 Success
21 
22 # numResponses: 2
23 # 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
 1 root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' cn=*
 2 # extended LDIF
 3 #
 4 # LDAPv3
 5 # base <dc=iescalquera,dc=local> with scope subtree
 6 # filter: cn=*
 7 # requesting: ALL
 8 #
 9 
10 # admin, iescalquera.local
11 dn: cn=admin,dc=iescalquera,dc=local
12 objectClass: simpleSecurityObject
13 objectClass: organizationalRole
14 cn: admin
15 description: LDAP administrator
16 
17 # search result
18 search: 2
19 result: 0 Success
20 
21 # numResponses: 2
22 # 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
 1 root@dserver00:~#  ldapsearch -x -b 'dc=iescalquera,dc=local' cn=admin
 2 # extended LDIF
 3 #
 4 # LDAPv3
 5 # base <dc=iescalquera,dc=local> with scope subtree
 6 # filter: cn=admin
 7 # requesting: ALL
 8 #
 9 
10 # admin, iescalquera.local
11 dn: cn=admin,dc=iescalquera,dc=local
12 objectClass: simpleSecurityObject
13 objectClass: organizationalRole
14 cn: admin
15 description: LDAP administrator
16 
17 # search result
18 search: 2
19 result: 0 Success
20 
21 # numResponses: 2
22 # numEntries: 1


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