Tras el primer insight donde comentamos los pasos básicos de conexión de un Desarrollo Drupal con un Sistema LDAP, en esta nueva entrega profundizamos en algunos aspectos más avanzados o particulares. Analizaremos como conseguir configurar 3 restricciones de acceso que son muy útiles y ampliamente utilizadas:

  • Acceso con permisos propios de un rol.
  • Acceso restringido a determinados roles de usuario
  • Acceso restringido por grupos.

Punto de partida y objetivos

Empezamos este nuevo insight sobre Desarrollo Drupal y LDAP en el punto donde dejamos el anterior, considerando que ya tenemos nuestro proyecto web Drupal conectado con un sistema LDAP en el que delegamos las autenticaciones de cualquier usuario que quiera hacer login en nuestra plataforma.

Pero efectivamente, en este escenario cualquier usuario correcto del LDAP, pudiera entrar como usuario logado en nuestro Drupal, y eso no siempre es conveniente, puede resultar demasiado permisivo... Si bien, en el momento que el usuario logado entra en el sistema Drupal, empiezan a aplicarse los permisos y limitaciones del rol asignado, y hasta el momento no le hemos asignado ningún rol concreto a nuestro usuario logado, por lo que adquiere simplemente el rol de usuario logeado.

Comencemos entonces la securización de nuestro sistema web Drupal conectado al LDAP, mediante la asignación de roles a los usuarios que se conectan, y proseguiremos limitándolos en base al rol del LDAP y a su grupo. 

1
Proyecto Desarrollo Web Drupal conexión LDAP

Asignación de rol de usuario: acceso con permisos de rol.

En primer lugar tenemos que tener definido un rol de usuario y los permisos que queramos que los usuarios logados contra LDAP se le asignen por defecto. Para ello realizamos la gestión de roles como habitualmente se realizan en los sistemas Drupal (/admin/people/roles), y en este caso crearemos el rol Cooperante. No nos extendemos más en este punto, al no ser el objeto principal del insight.

Una vez tenemos ya bien configurado el rol, vamos a la gestión mapeos de usuarios LDAP (/admin/config/people/ldap/user), para indicarle la asignación de un rol en la creación/actualización de los usuarios del proyecto web Drupal que se crean como espejos de los del sistema LDAP.

De toda esta configuración, nos interesa la sección PROVISIONING FROM LDAP TO DRUPAL MAPPINGS:

User mapping

Como puede verse en la imagen, de forma automática el módulo contribuido LDAP ya asigna determinados valores necesarios a la hora de hacer la creación del usuario, y nos permite 4 valores para asignar a nuestra elección. Utilizaremos estos para asignar roles a los usuarios, en 2 modos:

  • Fijo: asignamos el nombre del rol (Cooperador en este caso) en la caja de la izquierda, y en su correspondiente combo de selección ("Seleccionar target"), seleccionamos "Field: Rols" y guardamos.
  • Variable: igual que en el paso anterior, pero en este caso en la caja de la izquierda utilizamos un campo importado entre [ ], como pueda ser el identificador de rol o grupo del LDAP [ou]. En el caso de tener varios, podemos utilizar el modificador numeral ([ou:0], [ou:1]) o bien tomar el ultimo valor [ou:last]

Tras esta configuración, simplemente salvamos, y los usuarios irán tomando estos roles según se vayan creando o actualizando en el proceso de login. 

Acceso restringido solo a determinados roles

Una vez ya tenemos a los usuarios procedentes del LDAP con su rol perfectamente asignado, limitemos el sistema para que solamente ciertos roles puedan autenticar mediante el LDAP. Para conseguir esto, en primer lugar hemos de instalar un par de módulos contribuidos a nuestro proyecto web Drupal: 

La instalación de estos módulos contribuidos, se hace como de costumbre, utilizando el composer require...

composer require drupal/nombre_del_modulo

Una vez instalados y habilitados vamos ya con la configuración, dirigiéndonos al nuevo apartado Authorization Profile dentro de la sección de configuración (/admin/config/people/authorization/profile), donde nos ofrecerá la típica pantalla de listado y creación para dar de alta Perfiles de Autorización.

El Perfil de Autorización nos va a permitir asignar permisos de Rol Drupal a los usuarios LDAP, con independencia de los roles que ya tenga asignados al crearse en el sistema. La diferencia con el paso anterior es que no le asigna un Rol como tal al usuario, si no solo aplica los permisos de un determinado ROL. Esto, a parte de ser necesario para configurar el control de acceso, puede ser util para dar o revocar permisos particulares solo a los usuarios de determinados roles que procedan de una Autenticación LDAP.

De este modo, vamos a crear un primer perfil de Autorización (pueden ser varios), y haciendo click en el botón "Add Authorization Profile" que nos lleva a la siguiente pantalla de configuración:

Perfiles de Autorización

Tras de asignarle un nombre y activar el Perfil de Autorización, en la sección de Base Configuration seleccionamos el servidor LDAP donde nos interesa aplicar y es conveniente activar el check para aplicar esta configuración de autorización solo a los usuarios provenientes de este servicio LDAP.

El siguiente bloque de configuración ("LDAP TO DRUPAL ROLES MAPPING AND FILTERING"), simplemente es util  para facilitar la consulta sobre los grupos a los que aplicar el rol, tomando la consulta solo sobre la primera partícula del DN, que habitualmente es la que dispone esta información. Además de simplificar, agiliza enormemente el procesamiento, por lo que suele ser buena práctica el habilitar este check.

A continuación tenemos un par de cuestiones para la configuración de:

  • Cuando aplicar los permisos de Rol al usuario: si se activa se aplicarán estos permisos solo cuando el login se haga obligatoriamente a través de este módulo de autorización LDAP. Aunque el perfil de Autorización esté creado y activo, no tiene porque ser utilizado por el proceso de login LDAP. De hecho, tras la creación del perfil de autorización que estamos realizando, aun no está siendo aplicada, necesita un paso más a continuación. Si no activamos este check, estos permisos se van aplicar siempre, con independencia de obligar o no al login a través de este LDAP Authorization. 
  • Qué acciones se ejecuta cuando se aplican estos roles.

Y finalmente la configuración principal de mapeo de Queries LDAP a Roles. Es aquí donde vamos a establecer que grupos (cn/ou) de la definición del sistema LDAP, se asignan a qué Roles del Sistema Drupal, lo cual es necesario para establecer un control de acceso basado en Roles. De forma sencilla indicamos la consulta sobre el DN o el texto de la primera partícula de este (si marcamos la anterior opción) y a que rol le correspondemos. En nuestro ejemplo, hemos marcado la opción e introducimos el literal de Cooperador en la casilla izquierda para seleccionar los usuarios LDAP con grupo Cooperador, y le asignamos el rol Drupal Cooperador.

Con esto ya guardamos y vamos a terminar de limitar el acceso al sistema Drupal via LDAP, a aquellos usuarios con rol de Cooperador. Para ello volvemos a Configuración > LDAP Servers > Autentificación (/admin/config/people/ldap/authentication) y localizamos el bloque de configuración LDAP USER "WHITELISTS" AND RESTRICTIONS, donde podemos marcar el check para obligar a pasar por el módulo de Perfiles de Autorización para poder hacer login exitoso en el sistema Drupal.

Obligatoriedad Perfil Autenticación

De esta manera, solo pueden acceder usuarios LDAP que atiendan al mapeo de Perfiles dado. En en nuestro caso, solamente podrían acceder los usuarios con grupo LDAP Cooperador, que es el que hemos perfilado. El resto, de usuarios, aunque solucionen correctamente el user/pass, se les deniega el acceso, que era nuestro objetivo principal: el control de acceso basado en Roles.

Acceso restringido a grupos

Pero si simplemente queremos hacer una restricción de acceso en base al grupo de los usuarios en el LDAP, podemos utilizar el mismo ultimo bloque de configuración comentado (LDAP USER "WHITELISTS" AND RESTRICTIONS), y utilizar en este caso la funcionalidad de Whitelist para indicar solamente los grupos que queramos dar acceso:

Whitelist

En nuestro caso, simplemente poniendo ou=Cooperador, hará un chequeo sobre todas las partículas del DN del usuario para en caso coincidente dar acceso (pero no permisos de Roles) al sistema Drupal. De manera similar pudiéramos excluir determinados grupos (u otras formas de estructuración) del acceso al sistema Drupal. 

Conclusiones

Con este insight hemos aprendido a dotar de una capa adicional de control y seguridad de permisos/roles, al acceso a los desarrollos Drupal organizado en base a la delegación en un sistema LDAP. De esta forma hemos completado los conocimientos para establecer de forma segura y sencilla esta relación en cualquier desarrollo Drupal, desmontando el mito de las dificultades de este tipo de integraciones.

Más allá se pueden plantear muchas casuísticas y particularidades en cada proyecto, que pueden ser resueltas gracias a los conocimientos más avanzados que aportan las empresas integradoras y desarrollo Drupal como Boream.