Servicio de directorio: LDAP
LDAP: Protocolo Ligero de Acceso a Directorios (Lightweight Directory Access Protocol)- Protocolo de red para consulta y modificación de datos de directorios X.500
- X.500: Estándares de la ITU-T para servicios de directorio
- Define, entre otros, un protocolo de acceso a directorios llamado DAP (Directory Access Protocol)
- DAP definido sobre la pila completa de niveles OSI: costoso y complejo
- LDAP es una alternativa ligera al protocolo DAP
- Opera directamente sobre TCP/IP
- Actualmente, la mayoría de servidores de directorio X.500 incorporan LDAP como uno de sus protocolo de acceso
- Diferentes implementaciones del protocolo LDAP
- Más información sobre LDAP
- LDAP Linux HOWTO
- IBM RedBooks: Understanding LDAP - Design and Implementation
- Recursos, ayudas, ...: ldapman.org
OpenLDAP
- Implementación open source del protocolo LDAP
- Basado en software desarrollado en la Universidad de Michigan
- Incluye cuatro componentes principales
- Más información sobre la configuración de OpenLDAP:
Modelo de datos de LDAP
Un directorio es una base de dato optimizada para lectura, navegación y búsqueda- la información se almacena de manera jerárquica
- generalmente no se soportan transacciones complejas ni sistemas de recuperación
- las actualizaciones son cambios simples
- proporcionan respuestas rápidas a grandes volúmenes de búsquedas
- el directorio puede estar replicado y/o distribuido entre varios sistemas (p.e. DNS)
- Cada entrada posee un conjunto de atributos, que pueden ser de diferentes tipos
- cada atributo se identifica por su tipo y uno o más valores
- los tipos son normalmente palabras nemotécnicas, como uid (identificador de usuario), cn (common name), c (country), dc (domain component), etc.
- los diferentes atributos de un nodo están determinados por la clase a la que pertenece
- las clases permiten definir entradas con diferente información: clases para personas, para equipos, administrativas, etc.
- las clases se definen mediante ficheros de esquema (schema)
- Cada nodo debe poseer un nombre único: nombre distinguido o dn (distinguished name)
- el dn identifica de forma unívoca cada objeto en la base de datos
- cada nodo puede tener varios atributos, p.e. el nodo pepe podría tener los siguientes atributos:
dn: cn=Jose Pena,ou=People,dc=midominio,dc=com
objectClass: account
uid: pepe
sn: Pena
description: alumno
mail: pepe@midominio.com - el formato en el que se muestran los atributos del objeto se denomina LDIF (LDAP Data Interchange Format)
- formato de intercambio de datos para importar y exportar datos a un servidor LDAP
Instalación de un servidor LDAP
Describiremos como montar un servidor LDAP simple que nos permita la gestión de usuarios y grupos- el servidor mantendrá la lista de usuarios y grupos del dominio
- en los clientes la autenticación de usuarios y los permisos se basará en el servidor LDAP
Pasos para la instalación del servidor en Debian
- Instalar los siguientes paquetes:
- slapd: servidor OpenLDAP
- ldap-utils: utilidades del paquete OpenLDAP
- incluye comandos como ldapsearch, ldapadd
- El comando slapcat permite ver la estructura creada
- Podemos hacer búsquedas sencillas con ldapsearch
# ldapsearch -x -b dc=midominio,dc=com ´(cn=admin)´
- Ficheros de configuración:
- Fichero /etc/ldap/ldap.conf
- Fichero de configuración global para los clientes LDAP
- Permite especificar la base por defecto, el servidor LDAP, etc. (cambiarlo para poner nuestra configuración, comprobar que tiene permisos 644)
- Para más info, ver man ldap.conf
- Fichero /etc/ldap/sldap.conf
- Fichero de configuración del demonio slapd
- En principio, no es necesario cambiarlo (comprobar que tiene permisos 600)
- Fichero /etc/ldap/ldap.conf
- Crear la estructura de la base de datos: crearemos los nodos de People y Group del árbol LDAP
- Crear el siguiente fichero estructura.ldif en formato LDIF:
dn: ou=People,dc=midominio,dc=com
objectClass: top
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=midominio,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Group - Añadir los nodos a la base de datos:
# ldapadd -x -D 'cn=admin,dc=midominio,dc=com' -W -f estructura.ldif
- -x autenticación simple sin SASL (Simple Authentication and Security Layer)
- -D nombre distinguido con el que nos conectamos a LDAP (ponemos el del administrador)
- -W pide la contraseña de forma interaciva
- -f fichero a cargar
- Crear el siguiente fichero estructura.ldif en formato LDIF:
- Añadir un usuario y un grupo a la base de datos
- Crear un fichero como este, que tiene la información para un usuario y un grupo (¡no useis acentos!):
dn: cn=Jose Pena,ou=People,dc=midominio,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
uid: pepe
cn: Jose Pena
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/pepe
loginShell: /bin/bash
gecos: Jose Pena, Despacho 22,,
dn: cn=pepe,ou=Group,dc=midominio,dc=com
objectClass: top
objectClass: posixGroup
cn: pepe
gidNumber: 2000- define un usuario pepe y un grupo pepe con información similar a la aparece en el fichero /etc/passwd
- puede añadirse más información, como la que aparece en el fichero /etc/shadow: campos shadowMax, shadowExpire, shadowWarning, etc.
- Añadir el fichero con:
# ldapadd -x -D ´cn=admin,dc=midominio,dc=com´ -W -f user-group.ldif
- Probarlo haciendo búsquedas, tipo:
# ldapsearch -x uid=pepe
- Añadir una contraseña al usuario: puede hacerse directamente metiendo un campo userPassword en el fichero anterior, pero es preferible hacerlo mediante el comando ldappasswd
# ldappasswd -x ´cn=Jose Pena,ou=People,dc=midominio,dc=com´ -D ´cn=admin,dc=midominio,dc=com´ -W -S
- Crear un fichero como este, que tiene la información para un usuario y un grupo (¡no useis acentos!):
- Si queremos migrar la información de los ficheros /etc o NIS a LDAP podemos usar el paquete MigrationTools (ver www.padl.com/OSS/MigrationTools.html)
- Por último, también podemos querer instalar el servidor como cliente, por lo que debemos seguir los pasos indicados en la sección de instalación de un cliente
Fichero de configuración slapd.conf
Fichero de configuración del demonio slapdTiene dos partes:
- Directivas globales: distintos tipos de opciones del servidor, entre ellas los esquemas que el directorio debe conocer:
- nis.schema define los atributos de objetos para las cuentas de usuario, grupos, etc.
- se basa en los esquemas básicos core.schema y cosine.schema
- inetorgperson.schema añade objetos con más información personal para los usuarios
- Directivas específicas para las distintas bases de datos
- Incluye el sufijo, directorio donde guardar la base, y el tipo de database a usar (por defecto bdb, Berkeley Database)
- También un conjunto de reglas de acceso de la forma:
access to
[by ]+ es una expresión que especifica a qué datos del directorio se aplica la regla. Tres opciones: - puede indicarse todo el directorio mediante un asterisco (*)
- un subconjunto de entradas cuyo nombre distinguido contiene un cierto sufijo (por ejemplo, dn=".*,dc=midominio,dc=com")
- un atributo concreto de dichos objetos (por ejemplo, dn=".*,ou=People,dc=midominio,dc=com" attr=userPassword)
indica a quién (a qué usuario(s)) se especifica la regla; puede tomar diferentes valores, siendo los más comunes los siguientes: - self el propietario de la entrada
- dn="..." el usuario representado por el nombre distinguido
- users cualquier usuario acreditado
- anonymous cualquier usuarios no acreditado
- * cualquier usuario
indica qué operación concede la regla: - none sin acceso
- auth utilizar la entrada para validarse
- compare comparar
- search búsqueda
- read lectura
- write modificación
- Por ejemplo, la regla por defecto para userPassword permite que los usuarios puedan autenticarse y cambiar sus propias contraseñas y el administrador las de todos
Instalación de un cliente LDAP
Describiremos como como configurar un cliente para que acceda a la información almacenada en el directorio de LDAP del servidor- Dos pasos:
- Configurar el Name Service Switch (fichero /etc/nsswitch.conf)
- Configurar el módulo de autenticación (PAM, Pluggable Authentication Modules)
- Los módulos necesarios para esta configuración pueden descargarse de la página de PADL (www.padl.com) o directamente como paquetes Debian
- En algunas distros (RedHat) existe la herramienta authconfig que facilita esta configuración
Configurar el Name Service Switch
El NSS se encarga, entre otras, de realizar la correspondencia entre los números y nombres de usuario- permite gestionar los permisos de acceso de usuarios a ficheros
- se configura a través del fichero /etc/nsswitch.conf
- la configuración de ese fichero la vimos en el tema 5
- Instalar el paquete libnss-ldap
- En la configuración indicar la IP del servidor LDAP y el DN de la base del directorio LDAP
- esa configuración se guarda en el fichero /etc/libnss-ldap.conf
- En la configuración indicar la IP del servidor LDAP y el DN de la base del directorio LDAP
- Modificar las líneas de passwd, group y shadow del fichero nsswitch.conf
passwd: files ldap
group: files ldap
shadow: files ldap- esto indica al NSS que busque la información primero en los ficheros y, si no la encuentra, en el servidor LDAP
- Probar que funciona:
- Hacer un finger al usuario definido en LDAP
# finger pepe
Login: pepe Name: Jose Pena
Directory: /home/pepe Shell: /bin/bash
... - Crear el directorio /home/pepe y cambiarle el propietario a pepe
- Hacer un su - pepe para ver que podemos cambiar al usuario pepe en el cliente
- Hacer un finger al usuario definido en LDAP
Configurar el módulo de autenticación
Aunque el usuario es válido en el cliente, todavía no podemos autenticarnos (entrar en la cuenta)- Debemos configurar el servicio PAM
- PAM (Pluggable Authentication Module)
- biblioteca de autentificación genérica que cualquier aplicación puede utilizar para validar usuarios, utilizando por debajo múltiples esquemas de autentificación alternativos (ficheros locales, Kerberos, LDAP, etc.)
- permite añadir nuevos mecanismos de autentificación (Kerberos, LDAP,...) sin tener que modificar los servicios de entrada al sistema como login, ftp, ssh, etc.
- PAM utiliza módulos que proporcionan autentificación en los servicios de entrada al sistema:
- Módulos de autentificación (auth): comprobación de contraseñas (utilizado por el proceso de login para averiguar si las credenciales tecleadas por el usuario (nombre y contraseña) son correctas)
- Módulos de cuentas (account): controlan que la autenticación sea permitida (que la cuenta no haya caducado, que el usuario tenga permiso de iniciar sesiones a esa hora del día, etc.)
- Módulos de contraseña (password): permiten cambiar contraseñas
- Módulos de sesión (session): configuran y administran sesiones de usuarios (tareas adicionales que son necesitadas para permitir acceso, como el montaje de directorios, actualización del fichero lastlog, etc.)
- Las librerías de PAM están en /lib/security y los ficheros de configuración en /etc/pam.d/ (en versiones viejas, se configuraba a través del fichero /etc/pam.conf)
- Existe un fichero de configuración para cada servicio que usa PAM
- También existen ficheros comunes que son incluidos por los ficheros de configuración: common-auth, common-account, common-password y common-session
Configuración de PAM para usar LDAP
en el cliente seguimos los siguientes pasos:- Instalar el paquete libpam-ldap
- Cambiar el Root login account al DN del administrador LDAP
- El resto de opciones dejarlas por defecto
- La configuración es en el fichero /etc/pam_ldap.conf
- Para más información, ver la página de manual de pam_ldap.conf
- esta clave se guarda en plano en el fichero /etc/pam_ldap.secret, y se usa para que el root del sistema pueda modificar directamente las contraseñas de los usuarios
- si no se quiere tener ese fichero con la clave, dejar vacío el campo clave y en el fichero /etc/pam_ldap.conf comentar la línea que empieza por rootbinddn
- Cambiar los ficheros common-auth, common-account y common-password, añadiendo la siguiente línea:
sufficient pam_ldap.so por auth, account o password según corresponda - En el fichero common-auth añadir use_first_pass después de pam_unix.so
- esto evita que a los usuarios no-LADP se les pida la contraseña dos veces
- Podemos crear directorios home ``al vuelo'': añadir lo siguiente al principio de common-session
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
- al entrar el usuario en la cuenta, si no existe su HOME, se crea
- Probar que funciona:
- Entrar en la cuenta como un usuario LDAP
- Cambiar la contraseña del usuario
Instalación del paquete nscd
una vez que todo funciona, en el cliente podemos instalar el paquete nscd- Name Service Cache Daemon
- Hace caché para los nombres leidos del servidor LDAP