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