Enlaces e información

Comenta lo que creas oportuno.


Otros posts
Un WTF para variar

En Drupal un administrador de usuarios es superpoderoso

Escrito por Roberto M. Oliva en Octubre 23rd, 2009

En Drupal, inicialmente, hay tres tipos de usuarios: Anónimos, autenticados y el usuario con ID 1. A este usario 1 yo le denomino usuario root por su analogía con el mundo Linux. El usuario con ID 1 tiene, por defecto, permiso para todo. Drupal, cuando comprueba que el ID del usuario es 1, ya no comprueba nada más le concede permiso directamente.

Nosotros montamos una versión personalizada de Drupal. Lo cual, siguiendo con la analogía Linux, lo podríamos considerar como una distribución propia de Drupal. En pocos minutos tenemos una web totalmente configurada y preparada con la funcionalidad establecida para que nuestro cliente se ponga manos a la obra, para él creamos un rol denominado administrador, de tal manera que introducimos un nuevo tipo de usuario entre medias. Él no accede a Drupal, accede directamente a un gestor de contenidos donde mantener y categorizar noticias, enlaces imágenes, etc… y usuarios! y aquí es donde aparece la discordia.

Un administrador de una de estas webs tiene que poder administrar usuarios y al administrar usuarios lo hace también del usuario root 8/. Por lo que puede, perfectamente, cambiarle la contraseña y acceder como él. Existen muchos comentarios sobre este asunto (Security: The “administer users” permission exposes user/1), pero para mí claramente es una brecha de seguridad. El usuario root debería de estar por encima de cualquier administrador y nadie (y menos un “simple” administrador de usuarios) debería de poder modificar sus datos.

Por otro lado, evidentemente, esto es software libre (nunca daremos suficientes gracias a la comunidad que hay detrás) y podemos modificarlo a nuestro gusto. No es que me guste modificar el core de Drupal, de hecho es una de las mejores características de Drupal: no es necesario tocar el núcleo para conseguir la funcionalidad buscada, basta con añadir los módulos necesarios. Pero en este caso no hay más remedio y, teniendo en cuenta que mi prioridad es modificar lo menos posible, implementé la siguiente modificación (modules/user/user.module):

< ?php
function user_save($account, $array = array(), $category = 'account') {
  global $user;
  if($account->uid==1 && $user->uid != 1) {
     drupal_set_message(t("Only root user can change its user information"), "error");
     return user_load($account->uid);
  }

  // Dynamically compose a SQL query:
  $user_fields = user_fields();
   ...
}

Reconozco que no es muy elegante, pero cumple su función: Por mucho que asigne administración de usuarios a cualquier usuario ninguno podrá acceder como root al sitio y, además modifico mínimamente el core de Drupal.



Escriba un comentario

Dediquele un momento a comentar lo que piensa. Esta permitido usar HTML básico para formatear el escrito.

Comentarios de los lectores

Sea el primero en dejar un comentario.