LDAP (Lightweight Directory Access Protocol)

Anuncio
Laboratorio LDAP- Servicios Telemáticos
LDAP (Lightweight Directory Access Protocol)
Permite el acceso a un servicio de directorio ordenado y distribuido para
buscar y almacenar diversa información en un entorno de red. LDAP
también se considera una base de datos (aunque su sistema de
almacenamiento puede ser diferente) a la que pueden realizarse consultas.
LDAP es un protocolo de comunicación independiente de la plataforma, lo
que lo hace muy interesante cuando se quiere almacenar información
sobre muchos usuarios. Una gran ventaja de este servicio es que se puede
integrar con otros como método de autenticación o búsqueda de
información.
Integración de LDAP con otros sistemas: Una vez que hayamos configurado e instalado LDAP lo
podemos usar como repositorio de datos para multitud de aplicaciones que disponen de soporte.
• HTTP (Apache2)
• Telnet y SSH
• DNS
• Mail Transfer Agents (Openwebmail)
• Libretas de direcciones
• Servidores FTP (vsftpd, ProFTPd)
• Servidores de certificados de seguridad
La versión actual es LDAPv3 y este servicio opera en el puerto 389/TCP.
La forma en la que este servicio almacena la información es jerárquica, así se pueden implementar
directorios en organizaciones, universidades, etc. La siguiente figura muestra un ejemplo de la jerarquía
en una universidad.
Figura 1. Ejemplo de árbol jerárquico de una universidad.
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Laboratorio LDAP- Servicios Telemáticos
En nuestro laboratorio trabajaremos con
OpenLDAP, el cual es una implementación libre y
de código abierto del protocolo LDAP, esta
herramienta nos ofrece soporte para configurar
cliente y servidor y para ir más allá se puede hacer
réplicas de directorios en otros servidores.
Principales archivos de OpenLDAP en SerTele:
/etc/openldap/ldap.conf, Archivo de configuración del cliente.
/etc/openldap/slapd.conf, Archivo de configuración del servidor.
/etc/openldap/schema/, Este subdirectorio contiene el esquema usado por el demonio slapd.
Almacena los archivos de esquema de entrada para el directorio y los archivos ldif para intercambio de
información.
/var/lib/ldap/, En este directorio se almacenan las bases de datos y sus configuración.
Montaje de laboratorio
Configurando nuestro Servidor LDAP
El archivo de configuración del servidor en SerTele es /etc/openldap/slapd.conf, en este archivo se
especifican las directivas con las cuales funcionará nuestro servidor. La ubicación del archivo puede
variar dependiendo de la distribución GNU/Linux con la que estemos trabajando.
En este archivo se especifica la base con la que se quiere trabajar (en nuestro ejemplo telematica.net),
además del password del administrador, la ruta donde se almacenarán las bases de datos, etc. En el
siguiente ejemplo se muestra la configuración típica de un archivo slapd.conf.
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Laboratorio LDAP- Servicios Telemáticos
database
suffix
checkpoint
cachesize
rootdn
rootpw
directory
bdb
“dc=telematica,dc=net”
1024 5
10000
“cn=admin,dc=telematica,dc=net”
tele
/var/lib/ldap
# Berkeley database
# Esta es nuestra base
# dn del admin del server
# password del administrador
# Directorio de las libs y dbs
Como puedes observar la contraseña del root es visible en el archivo /etc/openldap/slapd.conf, hay
una forma de establecer una contraseña que sea cifrada para que cuando alguien vea el archivo no pueda
saber que contraseña tiene el administrador del servidor, y se hace con el comando slappasswd.
Por ejemplo:
# slappasswd
New password:
Re-enter new password:
{SSHA}d+gU1rRUZtZp8vMuDGAPNO7fzaSGP0AI
Esta última línea corresponde al password cifrado que se digitó luego de usar el comando slapppaswd, y
se puede copiar sobre slapd.conf con el fin de que la contraseña no sea visible por quien puedan ver el
archivo de configuración. Entonces el atributo rootpw quedaría así:
rootpw
{SSHA}d+gU1rRUZtZp8vMuDGAPNO7fzaSGP0AI
#password del administrador
Iniciar y detener el servidor
# /etc/init.d/ldap [start-stop-status-restart]
Equivalente:
# rcldap [start-stop-restart-status]
Preguntas
1. Inicie el servicio LDAP en el servidor y diga por cuál puerto se gestiona el servicio, indique si es
TCP o UDP.
Verifique el firewall de OpenSuse (Sertele) este off.
# /sbin/SuSEfirewall2 off
2. Realice una búsqueda en el servidor de forma local con:
# ldapsearch –h 127.0.0.1 -x -b dc=telematica,dc=net
Y muestre los resultados obtenidos. ¿Con que versión de LDAP se está trabajando?
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Laboratorio LDAP- Servicios Telemáticos
3. Observe las siguientes entradas y dibuje el árbol correspondiente a esta jerarquía.
dn: dc=telematica,dc=net
objectClass: top
objectClass: dcObject
objectClass: organization
dc: telematica
o: telematica
dn: ou=profesores,dc=telematica,dc=net
objectClass: top
objectClass: organizationalUnit
ou: profesores
dn: ou=alumnos,dc=telematica,dc=net
objectClass: top
objectClass: organizationalUnit
ou: alumnos
dn: cn=aleal,ou=profesores,dc=telematica,dc=net
objectClass: top
objectClass: account
objectClass: posixAccount
gidNumber: 1001
cn: aleal
homeDirectory: /home/aleal
loginShell: /bin/bash
uid: alex_leal
uidNumber: 1002
userPassword: {SSHA}cp/MynK09WdeVsYCiq007EEDFWqPKfbt
dn: cn=leo,ou=alumnos,dc=telematica,dc=net
objectClass: top
objectClass: account
objectClass: posixAccount
gidNumber: 1002
cn: leo
homeDirectory: /home/lions
loginShell: /bin/bash
uid: leo_vargas
uidNumber: 1003
userPassword: {SSHA}cp/MynK09WdeVsYCiq007EEDFWqPKfbt
3. A partir del árbol mostrado en la figura 1, muestra como sería el archivo .ldif para ingresarlo como
información al servidor.
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Laboratorio LDAP- Servicios Telemáticos
Agregando entradas a nuestro servidor LDAP
Las entradas que se quieran agregar deben estar en un archivo .ldif, cada entrada está compuesta de un dn
y cuando la entrada termina se deja una línea en blanco.
Un ejemplo de una entrada seria:
dn: ou=profesores,dc=telematica,dc=net
objectClass: top
objectClass: organizationalUnit
ou: profesores
4. Toma las entradas del punto 2, escribiéndolas en un archivo cualquiera.ldif y con el siguiente
comando ingresándolas al servidor.
NOTA: Es muy recomendable tener el servicio LDAP apagado cuando se quieran ingresar datos al
servidor.
# rcldap stop
# slapadd -v -l cualquiera.ldif
# Detenemos el servidor
# Agregamos la entrada
Verifica que se agregaron y muestra la salida de este comando. Para verificar que se agregaron se
muestra un porcentaje a la salida, si este valor es 100% todo está bien, además el slapd muestra las
entradas que pudo agregar.
Verifique que esté instalado ldap-utils en el cliente.
Si no lo está lo puede instalar con:
# apt-get install ldap-utils
5. Inicie nuevamente el servidor a partir del comando # rcldap start y realice una búsqueda desde
el cliente con el comando:
# ldapsearch –h IP_SERVER -x -b dc=telematica,dc=net
¿Cuál es la diferencia de las entradas del archivo cualquiera.ldif con la información mostrada en la
salida del comando anterior? Pista: Observe los usuarios “aleal” y “leo”.
Explique porque cree que se da esta diferencia.
6. Inicie Wireshark y capture los paquetes que intercambian Cliente y servidor cuando se hace la
consulta. ¿Viaja la información cifrada o en texto plano?
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Laboratorio LDAP- Servicios Telemáticos
Servidor LDAP como directorio de autenticación para usuarios locales y remotos con SSH
Como se observa en este esquema, se configurara nuestro cliente LDAP para que se convierta en un
servidor SHH, de tal forma que los usuarios que permita conectar sean los del directorio LDAP. El cliente
SSH hará una petición con un usuario al servidor SSH, este último preguntara al servidor LDAP si el
usuario existe y su contraseña, de tal forma que hará la autenticación a partir de la información
consultada.
A continuación se muestran los pasos para configurar el cliente LDAP para que permita autenticar
usuarios en su sistema.
Configuración para el cliente corriendo [Linux Mint-Ubuntu]
Esta guía está diseñada para clientes corriendo versiones de Linux Mint (Ubuntu) 12, 13, 14, 15.
Hay que verificar conectividad desde nuestro cliente a nuestro servidor y que cuando se haga una
búsqueda LDAP el servidor responda con los datos ingresados en los puntos anteriores.
Editar el archivo /etc/ldap/ldap.conf indicando la base y la direccion de nuestro servidor LDAP.
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Laboratorio LDAP- Servicios Telemáticos
#
# LDAP Defaults
#
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
BASE
URI
dc=telematica,dc=net
ldap://IP_SERVER
#SIZELIMIT
#TIMELIMIT
#DEREF
12
15
never
# TLS certificates (needed for GnuTLS)
#TLS_CACERT /etc/ssl/certs/ca-certificates.crt
7. Para poder autenticar usuarios necesitamos las librerias PAM.Consulte que es PAM (Pluggable
Authentication Modules), escriba una breve definicion y diga para que sirve.
Verifique si la librería libpam-ldap esta instalada, sino la puede instalar con el siguiente
comando:
# apt-get install libpam-ldap
Luego de instalar la librería, modifique el archivo /etc/ldap.conf modificando la BASE y el la IP der
server. Para nuestro laboratorio nos quedaría así:
BASE
dc=telematica,dc=net
uri
ldap://IP_SERVER_LDAP
ldap_version 3
# Nota: Solo se muestran las líneas que hay que modificar
Modificacion la cache para el servicio de nombres
Nscd es un servicio que proporciona una caché para la mayoría de peticiones comunes para las bases de
datos passwd, group, y hosts. El uso de caché es especialmente útil si selecciona distribuir información
sobre grupos y usuarios sobre la red usando NIS, LDAP, o hesiod.
# apt-get install nscd
NSCD: demonio de caché para el servicio de nombres
El Name Service Switch o NSS provee una interfaz para configurar y acceder a diferentes bases de
datos de cuentas de usuarios y claves como /etc/passwd, /etc/group, /etc/hosts, LDAP, etc.
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Laboratorio LDAP- Servicios Telemáticos
Editamos el archivo nsswitch.conf
#
#
#
#
#
/etc/nsswitch.conf
Example configuration of GNU Name Service Switch functionality.
If you have the `glibc-doc-reference' and `info' packages installed, try:
`info libc "Name Service Switch"' for information about this file.
passwd:
group:
shadow:
ldap compat
ldap compat
ldap compat
hosts:
networks:
files mdns4_minimal [NOTFOUND=return] dns mdns4
files
protocols:
services:
ethers:
rpc:
db
db
db
db
netgroup:
nis
files
files
files
files
Nota: Las líneas en rojo son las líneas que hay que modificar
Editar los módulos PAM de la siguiente forma:
Los archivos que se editaran son los siguientes:
Common-auth
Common-account
Common-session
Common-password
Realice copias de estos archivos con el fin de restablecer los módulos PAM luego de terminado
este laboratorio.
A continuación se muestran las líneas que deben ir en cada archivo. EL RESTO VAN
COMENTADAS.
El directorio correspondiente es: /etc/pam.d
Archivo Common-auth:
auth
auth
auth
sufficient
required
required
pam_unix.so nullok_secure
pam_ldap.so use_first_pass
pam_permit.so
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Laboratorio LDAP- Servicios Telemáticos
archivo Common-account
account
account
sufficient
required
pam_unix.so
pam_ldap.so
archivo Common-session
session
session
required
required
pam_unix.so
pam_mkhomedir.so skel=/etc/skel/ umask=0022
archivo Common-password
password
password
sufficient
required
pam_unix.so nullok obscure sha512
pam_ldap.so
A continuación se debe reanudar NSS con el siguiente comando
# /etc/init.d/nscd restart
Con esto ya está configurada la autenticación de los usuarios en este sistema a partir del
directorio LDAP del servidor. Verifique que tiene instalado el servidor SSH para que se
haga la prueba desde otro equipo intentando conectarse. En caso de que no lo tenga
instalado intente:
# apt-get install ssh
Primero intente autenticándose como root o un usuario del sistema, luego de que verifique
que ssh funciona correctamente intente autenticándose como un usuario almacenado en el
directorio LDAP.
8. Observe que cuando el usuario se autentica en el servidor SSH entra a una carpeta con su
CN(common_name), la carpeta está ubicada en /home/. (Puede verificarlo con el comando
“pwd”). Mirando los archivos anteriormente modificados en /etc/pam.d/ cual crees que es la
opción para que se cree la carpeta correspondiente al usuario que se autentica en el servidor
SSH?
Es posible que en el cliente SSH cuando se intente conectar se informe de que la identificación en el
servidor SSH ha cambiado, y nuestra estación cliente con el fin de mantener nuestra seguridad no nos
permita conectar. Para corregir esto digitamos el siguiente comando:
# ssh-keygen –f “/root/.ssh/known_hosts” –R IP_SERVER_SSH
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Laboratorio LDAP- Servicios Telemáticos
Acceso a carpetas privadas con autenticación por LDAP con Apache2.
Verifica antes que nada que tengas instalado el apache2 en tu estación. Lo primero que debemos de tener
en cuenta es que para que podamos autenticar a los usuarios en apache mediante LDAP, hemos de
habilitar un módulo especial en nuestro servidor web para que apache pueda validar el acceso a las
carpetas deseadas a través de la base de usuarios del servidor LDAP. Dicho módulo se habilita ejecutando
el siguiente comando:
// Habilitar módulo de autenticación de apache con ldap
# a2enmod authnz_ldap
El siguiente paso es crear una carpeta de nombre "privada" en "/var/www", lugar donde ubicamos las
páginas privadas de nuestro servidor web. Dentro de esta carpeta puedes poner un index.html con un
mensaje que puedas distinguir.
Luego vamos a editar el archivo /etc/apache2/sites-enabled/000-default que es el archivo de
configuración para el vhost que funciona por el puerto 80. La ubicación de este archivo puede variar
dependiendo de la distribución Linux.
Simplemente vamos a agregar las opciones para que cuando se quiera conectar a una carpeta de nombre
privada el servidor HTTP consulte al servidor LDAP por los usuarios que almacena, y pueda hacer la
autenticación para que el usuario pueda ingresar a la carpeta.
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Laboratorio LDAP- Servicios Telemáticos
<VirtualHost *:80>
[….]
<Directory "/var/www/privada/">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName "Acceso protegido para profesores"
AuthBasicProvider ldap
AuthzLDAPAuthoritative
Off
AuthLDAPURL ldap://IP_SERVER_LDAP:389/dc=telematica,dc=net?uid
Require user alex_leal
</Directory>
[….]
</VirtualHost>
En el parámetro AuthLDAPUrl sustituiremos IP_SERVER_LDAP por la dirección IP del servidor LDAP si
fuera otro servidor distinto al servidor apache y en el parámetro.
En el parámetro AuthLDAPUrl vemos que al final termina con '?uid'. Significa que lo que debe de
introducir el usuario es su uid (login del usuario).
El parámetro 'require user' seguido de una lista de usuarios permitidos, ejemplo 'require user alex_leal'
solo permite el acceso a ese usuario. Para permitir a cualquier usuario que exista en el servidor LDAP,
podemos usar 'requiere valid-user'.
Guardamos los cambios realizados y para completar el proceso reiniciaremos el servidor "apache"
# service apache2 restart
9. Ubicado desde el cliente ingrese con un navegador a la dirección del servidor especificando la
carpeta que tiene restringido el acceso solo para un usuario. Haga el login y verifique con Wireshark
si el password va cifrado o no.
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Laboratorio LDAP- Servicios Telemáticos
REFERENCIAS
• http://www.novell.com/support/kb/doc.php?id=3000394
• http://es.opensuse.org/Squid_con_soporte_ldap
• http://activedoc.opensuse.org/book/opensuse-security-guide/chapter-4-ldap-a-directory-service
• https://help.ubuntu.com/lts/serverguide/openldap-server.html#openldap-auth-config
• http://www.linuxparatodos.net/portal/staticpages/index.php?page=como-ldap-auth
• http://www.forosuse.org/forosuse/showthread.php?t=16557&highlight=vsftpd
• http://www.ite.educacion.es/formacion/materiales/85/cd/linux/m6/acceso_a_carpetas_privadas_c
on_autentificacin_por_ldap.html
Juan Esteban Cano Pineda - Leonardo Vargas Sampedro
Ingeniería de Telecomunicaciones
Universidad de Antioquia
Descargar