Autenticación remota y servicios de directorio LDAP
1. Fco. José Ribadas Pena
Sara Carrera Carrera
Departamento de Informática
Universidade de Vigo
Autenticación remota y servicios
de directorio LDAP
Ferramentas de seguridade en GNU/Linux
Curso de Extensión Universitaria
21 de xuño de 2010
2. Indice
Servicios de directorio
LDAP (Lightweight Directory Access Protocol)
Estructura y componentes de LDAP
OpenLDAP
Configuración de OpenLDAP
Autenticación con LDAP
Herramientas de administración
Ejercicios LDAP
2
3. Servicios de directorio
¿ Qué son los servicios de directorio?
Almacenan/organizan info. de usuarios/recursos de una red
Base de datos → lecturas, navegación, búsqueda avanzada
↑ lecturas ↓escrituras
Ni transacciones ni esquemas de vuelta atrás
Actualizaciones simples
Características
Información sobre usuarios
Infraestructura compartida
nombre + conjunto atributos
Proporciona interfaz de acceso + autenticación
Replicar información → disponibilidad y fiabilidad
inconsitencias temporales
servicios a nivel global vs servicios a nivel local
3
4. Servicios de directorio
Implementaciones
NIS (Network Information System)
páginas amarillas
Sun Microsystems
redes de entorno UNIX
sigue un modelo RPC
eDirectory (NetWare Directory Services, NDS)
servicio de directorio de Novell compatible con X.500
arquitecturas: Windows, NetWare, Linux
administración de usuarios
gestión de configuraciones y software
Servidor de directorio RedHat
parte del núcleo de Fedora
4
5. LDAP Lightweight Directory Access Protocol
¿ Qué es LDAP ?
Protocolo ligero → acceso a un servicio de directorio
Basado en X.500: LDAP implementación simplificada del
protocolo DAP (Directory Access Protocol) de X.500
acceso sobre pila de red TCP/IP
orientado a conexión, arquitectura cliente-servidor
satisfacer necesidades usuario
mantiene operaciones básicas DAP:
enlazar (Bind) buscar (Search) crear (Add)
leer (Read) comparar (Compare) borrar (Delete)
listar (List) modificar (Modify) modificar RDN (ModifyRDN)
LDAP como “base de datos”
Optimizado para lectura y consulta
No soporta ingreso/actualización de gran cantidad de datos
Ni transacción ni rollback
Objetivo: organización de la información.
Info. de una organización almacenada en un repositorio 5
centralizado optimizado para la consulta
6. LDAP Lightweight Directory Access Protocol
X.500
Conjunto de estándares sobre servicio de directorio dentro
del modelo de referencia OSI (Open Systems
Interconnection)
Protocolos
protocolo de acceso al directorio (DAP)
protocolo de sistema de directorio
protocolo de ocultación de información
protocolo de gestión de enlaces de directorio
Usos concretos
Como libreta de direcciones compartida
Autenticación de usuarios centralizada
Perfiles de usuarios centralizados
Accesos a equipos de una red
...
6
7. LDAP Lightweight Directory Access Protocol
¿ Por qué usar LDAP?
Plataforma abierta (múltiples implementaciones)
Personalización de aplicaciones
Servidores LDAP → fácil gestión
Distribución de las tareas de administración
Replicación de datos
Permisos de acceso (flexibilidad, listas ACL)
distintas plataformas
Acceso
lugares remotos
7
8. LDAP Lightweight Directory Access Protocol
¿ Cuando usar LDAP?
Lecturas intensivas
Cambios poco frecuentes
teléfonos de empleados vs web e-commerce
Sugerencias
datos disponibles entre varias plataformas
gran número de máquinas
almacenamiento de datos
Protocolo de acceso unificado
Servicio flexible para administración central de servicios
Facilidad de mantenimiento
8
9. LDAP Lightweight Directory Access Protocol
Implementaciones
Active Directory (AD)
Microsoft → almacen centralizado
impresoras, usuarios, equipos...
LDAP v.3
iPlanet
netscape
Oracle Internet Directory
IBM SecureWay
Teamware Office
OpenLDAP
9
10. Estructura y componentes LDAP
estructura
Información estructurada en un árbol
Modelo basado en entradas
organización → estructura jerárquica /almacén de información
Análogo a estructura de directorios de UNIX
cada directorio LDAP es un árbol único
los identificadores (DN) de todas sus entradas tienen un sufijo
común (por convención deriba del nombre de dominio DNS)
10
11. Estructura y componentes LDAP
componentes
Distinguished Name (dn) → identificador único y global de cada
entrada (≈ nodo del árbol)
DN = camino hasta la raíz + RDN (relative DN)
dn base → nivel superior
Ejemplo: Empresa “Datanobo”
Empresa DATANOBO
DN base: dc=datanobo,dc=com
Fusión: dc=cencrea,dc=com
Contenedores → separación lógica
Organizational Units (ou)
ou=people, ou=groups, ou=devices
11
12. Estructura y componentes LDAP
componentes
Entrada = colección de atributos
Tiene un tipo y un conjunto de valores
Clase de objetos (ObjectClass)
Definición de atributos (atributo ∈ clase de objetos)
requeridos vs permitidos
Esquema → reglas de diseño (≈ create table en SQL)
Posibilidad de que una entrada tenga más de una clase
persona → person, inetOrgPerson, organization, ...
cuenta usuario → posixAccount
atributos obligatorios: cn, uid, uidNumber, gidNumber
atributos permitidos: userPassword, loginShell,...
12
13. Estructura y componentes LDAP
componentes
Formato LDIF (LDAP Data Interchange Format)
Exportación/importación de datos
independiente del servidor LDAP
Almacenamiento en disco duro → migración entre servidores
unificar tratamiento de los datos
Formato de texto ASCII:
dn:<nombre distinguido>
objectClass: <nombre clase>
<nombre_atributo>:valor
<nombre_atributo>:valor
número arbitrario de pares atributo-valor
Ventajas
copias de seguridad
importar cambios
13
15. Estructura y componentes LDAP
componentes
Esquemas
Definición de clases y atributos: ejemplo.schema
Cada atributo: nombre, tipo, valores posibles, restricciones, ...
attributetype ( 1.1.2.1.0.0
NAME ’atributo1’
DESC ’El rol de atributo 1’
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{10} )
attributetype ( 1.1.2.1.0.3
NAME ’atributo2’
DESC ’El rol de atributo 2’
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )
objectclass ( 1.1.2.0.0 NAME ’clase1’
DESC ’Descripción de clase 1’
SUP top AUXILIARY
MAY ( atributo1 $ atributo2) )
15
16. Estructura y componentes LDAP
componentes
Algunos esquemas (de interés para servcios de autenticación)
Dan soporte a info. sobre usuarios y grupos
Reemplazan a ficheros de configuración tradicionales en Unix/Linux
/etc/passwd y /etc/shadow
/etc/groups
/etc/hosts, etc
Esquemas definidos
esquemas sobre personas : person, organisationalPerson, inetOrgPerson,
posixAccount, mailLocalRecpient, strongAuthenticationUser
esquemas sobre grupos : groupOfUniqueNames, posixGroup,
organisationalRole, roleMember
esquemas sobre redes/hosts : domain, ipHost, ipNetwork, ipProtocol,
ipService, ieee802Device, bootableDevice
Organización típica para gestión de usuarios y grupos
rama del directorio para usuarios:
dn: uid=XXXX,ou=people,dc=...,dc=...,...
rama del directorio para grupos:
dn: gid=XXXX,ou=groups,dc=...,dc=...,...
16
17. Estructura y componentes LDAP
cómo trabaja
Modelo cliente/servidor
Información del árbol
Cliente preguntas → servidor
respuesta
Visión transparente puntero
Operaciones
Directorio → interrogar y actualizar
Entrada → añadir , borrar y modificar
Consultar información
búsqueda según criterio → filtro
entradas concordantes
Búsqueda por José Pérez
uid=jperez,ou=empleados,dc=datanobo,dc=com
17
18. Estructura y componentes LDAP
versiones
LDAP v2.
Histórico
Interoperabilidad limitada
OpenLDAP → deshabilitado
LDAP v3.
Remplaza a LDAP v2.
Mayores posibilidades respecto a la autenticación
Protección de integridad y confidencialidad
Descubrimiento de esquemas
Extensibilidad
18
19. OpenLDAP
Implementación de código de abiertos del protocolo LDAP
Descripción del proyecto
1998, Kurt Zeilenga
Version 3.3 del servidor LDAP (Universidad de Michigan)
Servidor LDAP → licencia GNU
descarga gratuita
educación / profesional
código fuente → modificaciones propias
Release
OpenLDAP Release (2.4.16)
OpenLDAP Stable Release (2.4.16)
OpenLDAP Test Release
19
20. OpenLDAP
Paquetes DEBIAN
apt-get install slpad → servidor
apt-get install ldap-utils → servidor y cliente
Componentes
SLAPD: servidor OpenLDAP
LDAP v3.
control de acceso a la información mediante listas ACL
varios backends de almacenamiento posibles
peticiones → porciones del árbol diferentes
creación de módulos
frontend → comunicación con clientes
módulos de tareas específicas
configurable para copias/replicación (slurpd)
20
21. OpenLDAP
Componentes
SLURPD
servicio de replicación
distribución de cambios → del maestro a las réplicas
reenvío automático de peticiones fallidas
slapd + slurpd → archivo de texto
BACKEND
base de datos segundo plano
LDBM, Berkeley DB, HDB, ficheros planos, ...
Utilidades:
de servdor: slapcat, slaptest
de cliente: ldapadd, ldapsearch, ldapdelete, ldapmodify
21
22. Configuración OpenLDAP
Ficheros
slapd. conf → servidor
asignación de permisos
ldap.conf → cliente
/bin/chmod -v 600 /etc/ldap/slapd.conf
Nota: desde la version 2.4 la configuración del servidor puede almacenarse también
en el propio directorio (como un árbol más)
Definición del servidor
Backend
database ldbm
suffix "dc=datanobo,dc=com"
rootdn "cn=root,dc=datanobo,dc=com"
rootpw claveacceso
directory /var/lib/ldap
index objectClass,uid,uidNumber,gidNumber
index cn,mail,surname,givenname
22
23. Configuración OpenLDAP
Definición del servidor
Esquemas
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/local.schema
include /etc/openldap/schema/redhat/autofs.schema
Control de acceso: ACL (access control list)
access to <algo> [ by <quién> <niveldeacceso> ]+
access to dn=".*,dc=datanobo,dc=com" attr=userPassw
by dn="cn=root,dc=datanobo,dc=com" write
by self write
by * auth
23
24. Configuración OpenLDAP
Definición del servidor
ACL (access control list)
access to <algo> [ by <quién> <niveldeacceso> ]+
access to dn=".*,dc=datanobo,dc=com" attr=mail
by dn="cn=root,dc=datanobo,dc=com" write
by self write
by * read
access to dn=".*,dc=datanobo,dc=com"
by self write
by * read
<algo>: patrón de entradas sobre las que se restringe el acceso
<quién>: indicación de un usuario (entrada)
* todos los usuarios (incluidos anónimos y no autenticados)
anonymous usuarios anónimos (no autenticados)
users usuarios autenticados
self la propia entrada afectada
<nivel acceso>: tipo de actividad permitida (de menor a mayor): none (sin acceso),
auth (acceso de autenticación), compare, search, read, write, manage 24
25. Configuración OpenLDAP
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/local.schema
include /etc/openldap/schema/redhat/autofs.schema
database ldbm
suffix "dc=datanobo,dc=com"
rootdn "cn=root,dc=datanobo,dc=com"
rootpw claveacceso
directory /var/lib/ldap
index objectClass,uid,uidNumber,gidNumber
index cn,mail,surname,givenname
access to dn=".*,dc=datanobo,dc=com" attr=userPassw
by dn="cn=root,dc=datanobo,dc=com" write
by self write
by * auth
access to dn=".*,dc=datanobo,dc=com" attr=mail
by dn="cn=root,dc=datanobo,dc=com" write
by self write
by * read
access to dn=".*,dc=datanobo,dc=com"
by self write
by * read 25
26. Configuración OpenLDAP
Configuración del lado cliente
Fichero /etc/ldap/ldap.conf
ubicación servidor y DN raíz
host 127.0.0.1
base dc=datanobo,dc=com
usuario (DN de entrada LDAP) para consultar el directorio
binddn cn=user,dc=datanobo,dc=com
bindpw claveacceso
acceso con privilegios (DN del usuario privilegiado del directorio)
rootbinddn cn=root,dc=datanobo,dc=com
autenticación/acceso cifrado
Port 636 # conexiones SSL
ssl yes
TLS_CACERT /etc/tls/CA.cert.pem
26
27. Configuración OpenLDAP
Definición del cliente
Fichero /etc/ldap/ldap.conf
host 127.0.0.1
base dc=datanobo,dc=com
binddn cn=user,dc=datanobo,dc=com
bindpw claveacceso
rootbinddn cn=root,dc=datanobo,dc=com
port 636
TLS_CACERT /etc/tls/CA.cert.pem
27
28. Autentificación en GNU/Linux con LDAP
Requisitos del servidor
Esquemas
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
28
29. Autentificación en GNU/Linux con LDAP
Requisitos del servidor
Esquemas
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
top, posixAccount, shadowAccount, posixGroup
29
30. Autentificación en GNU/Linux con LDAP
Requisitos del servidor
Esquemas
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
top, posixAccount, shadowAccount, posixGroup
dn: uid=jperez,ou=empleados,dc=datanobo,dc=com
uid: jperez
cn: José Pérez
objectclass: posixAccount
objectclass: top
objectclass: shadowAccount
objectclass: posixGroup
userpassword: claveacceso
loginshell:/bin/bash
uidnumber: 1000
gidnumber: 1000
homedirectory:/home/empleados/jperez
30
31. Autentificación en GNU/Linux con LDAP
Requisitos del servidor
Certificado SSL → lado servidor (opcional en cliente)
Recompilar soporte SSL/TLS: OpenSSL ó gnuTLS
OpenSSL/gnuTLS + configuración puerto 389 correcta
TSL/SSL
SSL → 636: comunicación encriptada desde el principio
TSL → inicialmente 389, cambio a modo seguro: 636
Certificado formato PEM
red local → generación local
editar slapd.conf
TLSCipherSuite TLS_RSA_AES_256_CBC_SHA1
TLSCACertificateFile /etc/tls/CA/CA.cert.pem
TLSCertificateFile /etc/tls/ldap.cert.pem
TLSCertificateKeyFile /etc/tls/ldap.key.pem
TLSVerifyClient never
31
32. Autentificación en GNU/Linux con LDAP
Requisitos del cliente
Mapeado: nº id. del usuario vs nombre
servicio de nombres → /etc/nsswitch.conf
Autenticación
subsistema PAM → /etc/pam.d
Ambos ficheros harán uso de LDAP
32
33. Herramientas de administración
Herramientas en modo texto
Ficheros ldif
Comandos
slapcat , slaptest, slappasswd (sólo en el servidor)
ldapadd
ldapadd -x -D “cn=root,dc=datanobo,dc=com” -W -f /tmp/usuario1.ldif
Ldappsearch
ldapsearch -b 'dc=datanobo,dc=com' 'objectclass=*'
ldapsearch -b 'dc=datanobo,dc=com' 'cn=Roberto Gómez'
ldapdelete
ldapdelete 'cn=Roberto Gómez,dc=datanobo,dc=com'
33
34. Herramientas de administración
Herramientas en modo texto
Comandos
ldapmodify
dn: uid=sgonzalez, ou=emplados ,dc=datanobo,dc=com
changetype: modify
replace: mail
mail: modifica@datanobo.com
-
add: title
title: Gran Cañon
-
add: jpegPhoto
jpegPhoto: /tmp/modifica.jpeg
-
delete: description
ldapmodify -r -f /tmp/modif_entrada
34
38. Herramientas de administración
Interfaces de programación:
Perl: librería perl-ldap (http://ldap.perl.org/)
Python: libería python-ldap (http://www.python-ldap.org/)
Java: integrado en JNDI, LDAP Class Libraries for Java (JLDAP)
etc
38
39. Ejemplos
Instalación básica de OpenLDAP
Configuración del cliente y del servidor
Ejemplos de consultas y modificaciones
Uso de phpLDAPadmin
Configuración PAM con LDAP
39
40. Fco. José Ribadas Pena
Sara Carrera Carrera
Departamento de Informática
Universidade de Vigo
Autenticación remota y servicios de
directorio OpenLDAP
Ferramentas de seguridade en GNU/Linux
Curso de Extensión Universitaria
21 de xuño de 2010