zabbix, no dashboard

zabbix usa un sistema de permisos un poco especial para mostrar los menús. Por defecto tiene creados tres tipos de grupos de usuarios diferentes. Un usuario únicamente puede pertenecer a uno de los grupos y en función de éste, tendrá acceso a unas pestañas u otras. Los datos a los que tengan acceso, están definidos por los grupos de usuarios + grupos de host's. Los 3 tipos de grupos de permisos que hay son:


  • USER_TYPE_ZABBIX_USER
    Definido con el ID 1 y de nombre "Zabbix User" establece los permisos para todas las pestañas a las que puede tener acceso un usuario normal, sin privilegios.
  • USER_TYPE_ZABBIX_ADMIN
    Definido con el ID 2 y con nombre "Zabbix Admin" contiene los permisos para aquellas pestañas a las que un usuario puede tener acceso, pero con algo más de privilegios. Por ejemplo a las pestañas de creación y configuración de host's, mapas, etc.
  • USER_TYPE_SUPER_ADMIN
    Definido con el ID 3 representa al "Zabbix Super Admin" y es el usuario que tiene acceso a todas las pestañas.
En el fichero include/menu.inc.php es donde se usan estas variables para definir si un usuario puede o no puede ver una pestaña. Por ejemplo,
array(
   'url'=>'maps.php',
   'label'=>S_MAPS,
   'sub_pages'=>array('map.php'),
   'user_type'=>USER_TYPE_ZABBIX_USER
),
Aquí de define que la pestaña "maps" es visible para los usuarios con permisos mayor o igual a 'USER_TYPE_ZABBIX_USER'. Prácticamente todas las pestañas o grupos de pestañas tienen estos permisos y siempre se define el de menor permiso que lo puede ver. Saber si un usuario puede o no ver una pestaña por lo tanto es muy simple de calcular.
Vamos a definir ahora el caso que nos atañe, tenemos un grupo de usuarios al que no nos interesa que pueda ver la pestaña dashboard (o cualquier otra). Por defecto esto zabbix no lo permite hacer, por lo que vamos a crear un pequeño parche para ofrecer esta funcionalidad extra.
Primeramente creamos un grupo de usuarios llamado "No dashboard". Todos los usuarios que pertenezcan a este grupo no verán dicha pestaña. Una vez lo tengamos creado, simplemente agregamos ahí a los usuarios que nos interesen. Luego, editamos el fichero include/menu.inc.php y lo dejamos tal que así,
global $ZBX_MENU;
global $USER_DETAILS;

$users = CUser::get(array('filter' => array(
  'userid' => USER_DETAILS['userid']),
  'output' => API_OUTPUT_EXTEND,
  'select_usrgrps' => API_OUTPUT_EXTEND));

$usrgrps = $users[0]['usrgrps'];
$show = 1;
foreach($usrgrps as $ugnum => $usrgrp){
   if(strtolower($usrgrp['name']) == strtolower("No dashboard")) {
      $show = 0;
   }
}

if($show) {
   $dash = array(
      'url'=>'dashboard.php',
      'label'=>S_DASHBOARD,
      'sub_pages'=>array('dashconf.php')
   );
} else {
   $dash = array(
      'url'=>'dashboard.php',
      'label'=>S_DASHBOARD,
      'sub_pages'=>array('dashconf.php'),
      'user_type'=>USER_TYPE_SUPER_ADMIN
   );
}

$ZBX_MENU = array(
   'view'=>array(
   'label'           => S_MONITORING,
   'user_type'       => USER_TYPE_ZABBIX_USER,
   'node_perm'       => PERM_READ_LIST,
   'default_page_id' => 0,
   'pages'=>array(
      $dash,
      array(
         ...
Con este pequeño cambio se consigue una funcionalidad extra muy interesante. Dejo aquí colgado el parche, por si a alguien le interesa.


3 comentarios :

  1. Este parche sólo sirve para la versión 1.8 de zabbix. Para la versión 2.0 habría que adaptarlo.

    ResponderEliminar
  2. This patch don´t work on zabbix 2.4 :-(

    ResponderEliminar
  3. This patch don´t work on zabbix 2.4 :-(

    ResponderEliminar

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios