zatree是监控软件zabbix的一个插件,主要功能是提供host group的树形展示和在item里指定关键字查询及数据排序。
zatree项目地址https://github.com/spide4k/zatree,安装方法进到不同版本目录看readme。
又发现zatree的一个小问题:在zabbix_config.php配置Admin和密码后,任何普通用户在zatree的左侧栏能看到所有的主机组列表,包括没有权限的那些主机组。
zatree是用zabbix_config.php中配置的用户和密码来获取主机组列表的,因为配置的是Admin超级用户,自然能获取到全部的主机组了。
因此优化了zatree左侧边栏,使普通用户只能看到属于自己的主机组列表。原理是zabbix_ajax.php获取cookie中的sessionid,通过这个sessionid获取登录用户的主机组列表。
修改方法如下,这里针对zatree的zabbix-2.2.x版本做修改,方法同样适合zabbix-2.0.x版本:
进入zatree目录,修改以下两个文件:
第一步:zabbix_ajax.php
传递$_COOKIE['zbx_sessionid']给hostgroupGet(),获取当前用户具有readable权限的主机组列表。
$groups = $zabbixApi->hostgroupGet(array("output" => "extend", "monitored_hosts" => true));
修改为:
if(isset($_COOKIE['zbx_sessionid'])){ $groups = $zabbixApi->hostgroupGet(array("output" => "extend", "monitored_hosts" => true), '', $_COOKIE['zbx_sessionid']); } else { $groups = $zabbixApi->hostgroupGet(array("output" => "extend", "monitored_hosts" => true)); }
第二步:ZabbixApiAbstract.class.php
修改2594行hostgroupGet方法,添加$sessionid形参。当传入$sessionid参数时,设置$this->auth的值为$sessionid。
public function hostgroupGet($params=array(), $arrayKeyProperty='') { // get params array for request $params = $this->getRequestParamsArray($params); // request return $this->request('hostgroup.get', $params, $arrayKeyProperty); }
修改为:
public function hostgroupGet($params=array(), $arrayKeyProperty='', $sessionid='') { // get params array for request $params = $this->getRequestParamsArray($params); // request if (isset($sessionid)) $this->auth = $sessionid; return $this->request('hostgroup.get', $params, $arrayKeyProperty); }
链接地址:https://github.com/spide4k/zatree/pull/2