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权限的主机组列表。
|
1
|
$groups
=
$zabbixApi
->hostgroupGet(
array
(
"output"
=>
"extend"
,
"monitored_hosts"
=> true));
|
修改为:
|
1
2
3
4
5
|
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。
|
1
2
3
4
5
6
7
8
|
public
function
hostgroupGet(
$params
=
array
(),
$arrayKeyProperty
=
''
)
{
// get params array for request
$params
=
$this
->getRequestParamsArray(
$params
);
// request
return
$this
->request(
'hostgroup.get'
,
$params
,
$arrayKeyProperty
);
}
|
修改为:
|
1
2
3
4
5
6
7
8
9
10
|
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
本文转自 张斌_青岛 51CTO博客,原文链接:http://blog.51cto.com/qicheng0211/1531637
