En Drupal un administrador de usuarios es superpoderoso

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.

Todavía no hay comentarios

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Etiquetas HTML permitidas: <a> <blockquote> <br> <cite> <code> <dd> <div> <dl> <dt> <em> <h1> <h2> <h3> <h4> <h5> <h6> <hr> <img> <li> <ol> <p> <pre> <span> <strong> <swf> <table> <tbody> <td> <th> <tr> <ul>
    Allowed Style properties: background-color, background-image, border, border-bottom, border-bottom-color, border-bottom-style, border-bottom-width, border-color, border-left, border-left-color, border-left-style, border-left-width, border-right, border-right-color, border-right-style, border-right-width, border-spacing, border-style, border-top, border-top-color, border-top-style, border-top-width, border-width, color, direction, font, font-family, font-size, font-style, font-variant, font-weight, height, left, line-height, list-style-type, margin, margin-bottom, margin-left, margin-right, margin-top, padding, padding-bottom, padding-left, padding-right, padding-top, right, text-align, text-decoration, top, width
  • Syntax highlight code surrounded by the {syntaxhighlighter OPTIONS}...{/syntaxhighlighter} tags.
  • E-Mail addresses are hidden with reCAPTCHA Mailhide.

Más información sobre opciones de formato

CAPTCHA
Esta pregunta es para comprobar si eres un ser humano y evitar el envío automático desde sistemas de spam