21 de xuño de 2010
Ferramentas de seguridade en GNU/LinuxCurso de Extensión Universitaria
Fco. José Ribadas PenaSara Carrera CarreraDepartamento de InformáticaUniversidade de Vigo Autenticación remota y servicios
de directorio LDAP
2
Indice
Servicios de directorioLDAP (Lightweight Directory Access Protocol)Estructura y componentes de LDAPOpenLDAPConfiguración de OpenLDAPAutenticación con LDAPHerramientas de administraciónEjercicios LDAP
3
Servicios de directorio
¿ Qué son los servicios de directorio?Almacenan/organizan info. de usuarios/recursos de una redBase de datos → lecturas, navegación, búsqueda avanzada
↑ lecturas ↓escriturasNi transacciones ni esquemas de vuelta atrásActualizaciones simples
CaracterísticasInformación sobre usuariosInfraestructura compartida
nombre + conjunto atributosProporciona interfaz de acceso + autenticaciónReplicar información → disponibilidad y fiabilidad
inconsitencias temporalesservicios a nivel global vs servicios a nivel local
4
Servicios de directorio
ImplementacionesNIS (Network Information System)
páginas amarillasSun Microsystemsredes de entorno UNIXsigue un modelo RPC
eDirectory (NetWare Directory Services, NDS)servicio de directorio de Novell compatible con X.500arquitecturas: Windows, NetWare, Linuxadministración de usuariosgestión de configuraciones y software
Servidor de directorio RedHatparte del núcleo de Fedora
5
LDAP Lightweight Directory Access Protocol
¿ Qué es LDAP ?Protocolo ligero → acceso a un servicio de directorioBasado en X.500: LDAP implementación simplificada del protocolo DAP (Directory Access Protocol) de X.500
acceso sobre pila de red TCP/IPorientado a conexión, arquitectura cliente-servidor
satisfacer necesidades usuariomantiene 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 consultaNo soporta ingreso/actualización de gran cantidad de datosNi transacción ni rollbackObjetivo: organización de la información.
Info. de una organización almacenada en un repositorio centralizado optimizado para la consulta
6
X.500Conjunto 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 directorioprotocolo de ocultación de informaciónprotocolo de gestión de enlaces de directorio
Usos concretosComo libreta de direcciones compartidaAutenticación de usuarios centralizadaPerfiles de usuarios centralizadosAccesos a equipos de una red...
LDAP Lightweight Directory Access Protocol
7
¿ 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)
Acceso
LDAP Lightweight Directory Access Protocol
distintas plataformaslugares remotos
8
¿ Cuando usar LDAP?
Lecturas intensivas
Cambios poco frecuentesteléfonos de empleados vs web e-commerce
Sugerenciasdatos disponibles entre varias plataformasgran número de máquinasalmacenamiento de datos
LDAP Lightweight Directory Access Protocol
Protocolo de acceso unificadoServicio flexible para administración central de serviciosFacilidad de mantenimiento
Protocolo de acceso unificadoServicio flexible para administración central de serviciosFacilidad de mantenimiento
9
ImplementacionesActive Directory (AD)
Microsoft → almacen centralizadoimpresoras, usuarios, equipos...
LDAP v.3iPlanet
netscapeOracle Internet DirectoryIBM SecureWayTeamware OfficeOpenLDAP
LDAP Lightweight Directory Access Protocol
10
Estructura y componentes LDAP
Información estructurada en un árbolModelo basado en entradas
organización → estructura jerárquica /almacén de informaciónAnálogo a estructura de directorios de UNIX
cada directorio LDAP es un árbol únicolos identificadores (DN) de todas sus entradas tienen un sufijo común (por convención deriba del nombre de dominio DNS)
estructura
11
Estructura y componentes LDAP
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 superiorEjemplo: Empresa “Datanobo”
Contenedores → separación lógicaOrganizational Units (ou)ou=people, ou=groups, ou=devices
componentes
Empresa DATANOBODN base: dc=datanobo,dc=com
Fusión: dc=cencrea,dc=com
Empresa DATANOBODN base: dc=datanobo,dc=com
Fusión: dc=cencrea,dc=com
12
Estructura y componentes LDAP
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 permitidosEsquema → 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, gidNumberatributos permitidos: userPassword, loginShell,...
componentes
13
Estructura y componentes LDAP
Formato LDIF (LDAP Data Interchange Format)Exportación/importación de datos
independiente del servidor LDAPAlmacenamiento en disco duro → migración entre servidores
unificar tratamiento de los datosFormato de texto ASCII:
componentes
número arbitrario de pares atributo-valorVentajas
copias de seguridadimportar cambios
dn:<nombre distinguido>objectClass: <nombre clase><nombre_atributo>:valor<nombre_atributo>:valor
14
Estructura y componentes LDAP
Formato LDIF (cont)componentes
dn: uid=ribadas,ou=users,dc=ccia,dc=uvigo,dc=esuid: ribadasgivenName: Francisosn: Ribadas PenauserPassword:: claveaccesologinShell: /bin/bashuidNumber: 0000gidNumber: 0000homeDirectory: /home/ribadasshadowMin: -1shadowMax: 999999shadowWarning: 7shadowInactive: -1shadowExpire: -1shadowFlag: 0objectClass: topobjectClass: personobjectClass: posixAccountobjectClass: shadowAccountobjectClass: inetOrgPersoncn: Francisco Ribadas PenamodifiersName: cn=admin,ou=people,dc=ccia,dc=uvigo,dc=esobjectClass: inetOrgPerson
15
Estructura y componentes LDAP
EsquemasDefinición de clases y atributos: ejemplo.schemaCada atributo: nombre, tipo, valores posibles, restricciones, ...
componentes
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) )
16
Estructura y componentes LDAP
Algunos esquemas (de interés para servcios de autenticación)Dan soporte a info. sobre usuarios y gruposReemplazan a ficheros de configuración tradicionales en Unix/Linux
/etc/passwd y /etc/shadow/etc/groups/etc/hosts, etc
Esquemas definidosesquemas 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 gruposrama del directorio para usuarios: dn: uid=XXXX,ou=people,dc=...,dc=...,...rama del directorio para grupos:dn: gid=XXXX,ou=groups,dc=...,dc=...,...
componentes
17
Estructura y componentes LDAP
Modelo cliente/servidorInformación del árbolCliente preguntas → servidorVisión transparente
OperacionesDirectorio → interrogar y actualizarEntrada → añadir , borrar y modificarConsultar información
búsqueda según criterio → filtroentradas concordantes
cómo trabaja
respuestapuntero
Búsqueda por José Pérez uid=jperez,ou=empleados,dc=datanobo,dc=comBúsqueda por José Pérez uid=jperez,ou=empleados,dc=datanobo,dc=com
18
Estructura y componentes LDAP
LDAP v2.HistóricoInteroperabilidad limitadaOpenLDAP → deshabilitado
LDAP v3.Remplaza a LDAP v2.Mayores posibilidades respecto a la autenticaciónProtección de integridad y confidencialidadDescubrimiento de esquemasExtensibilidad
versiones
19
OpenLDAP
Implementación de código de abiertos del protocolo LDAPDescripción del proyecto
1998, Kurt ZeilengaVersion 3.3 del servidor LDAP (Universidad de Michigan)Servidor LDAP → licencia GNU
descarga gratuitaeducación / profesionalcódigo fuente → modificaciones propias
ReleaseOpenLDAP Release (2.4.16)
OpenLDAP Stable Release (2.4.16)
OpenLDAP Test Release
20
OpenLDAP
Paquetes DEBIANapt-get install slpad → servidorapt-get install ldap-utils → servidor y cliente
ComponentesSLAPD: 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 clientesmódulos de tareas específicas
configurable para copias/replicación (slurpd)
21
OpenLDAP
ComponentesSLURPD
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, slaptestde cliente: ldapadd, ldapsearch, ldapdelete, ldapmodify
22
Configuración OpenLDAP
Ficherosslapd. conf → servidorldap.conf → cliente
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 servidorBackend
asignación de permisos/bin/chmod -v 600 /etc/ldap/slapd.conf
database ldbmsuffix "dc=datanobo,dc=com"rootdn "cn=root,dc=datanobo,dc=com"rootpw claveaccesodirectory /var/lib/ldapindex objectClass,uid,uidNumber,gidNumber index cn,mail,surname,givenname
23
Configuración OpenLDAP
Definición del servidorEsquemas
Control de acceso: ACL (access control list)access to <algo> [ by <quién> <niveldeacceso> ]+
include /etc/openldap/schema/core.schemainclude /etc/openldap/schema/cosine.schemainclude /etc/openldap/schema/inetorgperson.schemainclude /etc/openldap/schema/nis.schemainclude /etc/openldap/schema/local.schemainclude /etc/openldap/schema/redhat/autofs.schema
access to dn=".*,dc=datanobo,dc=com" attr=userPasswby dn="cn=root,dc=datanobo,dc=com" writeby self writeby * auth
24
Configuración OpenLDAP
Definición del servidorACL (access control list)
access to <algo> [ by <quién> <niveldeacceso> ]+
access to dn=".*,dc=datanobo,dc=com" attr=mailby dn="cn=root,dc=datanobo,dc=com" writeby self writeby * read
access to dn=".*,dc=datanobo,dc=com"by self writeby * 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 autenticadosself 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
25
Configuración OpenLDAPinclude /etc/openldap/schema/core.schemainclude /etc/openldap/schema/cosine.schemainclude /etc/openldap/schema/inetorgperson.schemainclude /etc/openldap/schema/nis.schemainclude /etc/openldap/schema/local.schemainclude /etc/openldap/schema/redhat/autofs.schemadatabase ldbmsuffix "dc=datanobo,dc=com"rootdn "cn=root,dc=datanobo,dc=com"rootpw claveaccesodirectory /var/lib/ldapindex objectClass,uid,uidNumber,gidNumber index cn,mail,surname,givenname access to dn=".*,dc=datanobo,dc=com" attr=userPasswby dn="cn=root,dc=datanobo,dc=com" writeby self writeby * authaccess to dn=".*,dc=datanobo,dc=com" attr=mailby dn="cn=root,dc=datanobo,dc=com" writeby self writeby * readaccess to dn=".*,dc=datanobo,dc=com"by self writeby * read
26
Configuración OpenLDAP
Configuración del lado clienteFichero /etc/ldap/ldap.conf
ubicación servidor y DN raíz
usuario (DN de entrada LDAP) para consultar el directorio
acceso con privilegios (DN del usuario privilegiado del directorio)
autenticación/acceso cifrado
host 127.0.0.1base dc=datanobo,dc=com
binddn cn=user,dc=datanobo,dc=combindpw claveacceso
rootbinddn cn=root,dc=datanobo,dc=com
Port 636 # conexiones SSLssl yesTLS_CACERT /etc/tls/CA.cert.pem
27
Configuración OpenLDAP
Definición del clienteFichero /etc/ldap/ldap.conf
host 127.0.0.1base dc=datanobo,dc=combinddn cn=user,dc=datanobo,dc=combindpw claveaccesorootbinddn cn=root,dc=datanobo,dc=comport 636TLS_CACERT /etc/tls/CA.cert.pem
28
Autentificación en GNU/Linux con LDAP
Requisitos del servidorEsquemas
include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema
29
Autentificación en GNU/Linux con LDAP
Requisitos del servidorEsquemas
top, posixAccount, shadowAccount, posixGroup
include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema
30
Autentificación en GNU/Linux con LDAP
Requisitos del servidorEsquemas
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=comuid: jperezcn: José Pérezobjectclass: posixAccountobjectclass: topobjectclass: shadowAccountobjectclass: posixGroupuserpassword: claveaccesologinshell:/bin/bashuidnumber: 1000gidnumber: 1000homedirectory:/home/empleados/jperez
31
Autentificación en GNU/Linux con LDAP
Requisitos del servidorCertificado SSL → lado servidor (opcional en cliente)Recompilar soporte SSL/TLS: OpenSSL ó gnuTLS
OpenSSL/gnuTLS + configuración puerto 389 correctaTSL/SSL
SSL → 636: comunicación encriptada desde el principioTSL → inicialmente 389, cambio a modo seguro: 636
Certificado formato PEMred local → generación localeditar slapd.conf
TLSCipherSuite TLS_RSA_AES_256_CBC_SHA1TLSCACertificateFile /etc/tls/CA/CA.cert.pemTLSCertificateFile /etc/tls/ldap.cert.pemTLSCertificateKeyFile /etc/tls/ldap.key.pemTLSVerifyClient never
32
Autentificación en GNU/Linux con LDAP
Requisitos del clienteMapeado: nº id. del usuario vs nombre
servicio de nombres → /etc/nsswitch.confAutenticación
subsistema PAM → /etc/pam.d
Ambos ficheros harán uso de LDAP
33
Herramientas de administración
Herramientas en modo textoFicheros ldifComandos
slapcat , slaptest, slappasswd (sólo en el servidor)ldapadd
Ldappsearch
ldapdelete
ldapadd -x -D “cn=root,dc=datanobo,dc=com” -W -f /tmp/usuario1.ldif
ldapsearch -b 'dc=datanobo,dc=com' 'objectclass=*'ldapsearch -b 'dc=datanobo,dc=com' 'cn=Roberto Gómez'
ldapdelete 'cn=Roberto Gómez,dc=datanobo,dc=com'
34
Herramientas de administración
Herramientas en modo textoComandos
ldapmodify
dn: uid=sgonzalez, ou=emplados ,dc=datanobo,dc=comchangetype: modify replace: mail mail: [email protected] add: title title: Gran Cañon - add: jpegPhoto jpegPhoto: /tmp/modifica.jpeg - delete: description
ldapmodify -r -f /tmp/modif_entrada
35
Herramientas de administración
Interfaces gráficosGNOME → LAT(ldap administration tool)
KDE → LUMA
36
Herramientas de administración
Interfaces WEBphpLDAPadmin(http://thesmithfam.org/phpldapadmindemo/htdocs/index.php)
LDAP-account-manager
37
Herramientas de administración
Interfaces WEBgosa
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
39
Ejemplos
Instalación básica de OpenLDAPConfiguración del cliente y del servidorEjemplos de consultas y modificacionesUso de phpLDAPadmin
Configuración PAM con LDAP
21 de xuño de 2010
Ferramentas de seguridade en GNU/LinuxCurso de Extensión Universitaria
Fco. José Ribadas PenaSara Carrera CarreraDepartamento de InformáticaUniversidade de Vigo Autenticación remota y servicios de
directorio OpenLDAP