这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.

12 限制agent检查

概述

可以通过创建监控项黑名单、白名单或白名单/黑名单的组合来限制agent的检查。

为此,请结合使用两个agent 配置 参数:

  • AllowKey=<pattern> - 允许哪些检查; <pattern> 使用通配符 (*)表达式指定
  • DenyKey=<pattern> - 拒绝哪些检查; <pattern> 使用通配符 (*) 表达式指定

请注意:

  • 缺省情况下,所有 system.run[*] 监控项 (远程命令,脚本) 是禁用的,即便没有指定拒绝健;
  • 从 Zabbix 5.0.2 开始,agent参数 EnableRemoteCommands :
    • Zabbix agent 已弃用
    • Zabbix agent2 不支持

因此,要允许所有远程命令,请指定AllowKey=system.run[<command>,*] ,其中* 代表等待模式和非等待模式。还可以指定AllowKey=system.run[*]参数来允许所有命令的等待和非等待模式。要禁止特定的远程命令,在AllowKey=system.run[*] 参数之前添加DenyKey参数,并使用system.run[]来指定命令。

重要规则

  • 没有拒绝规则的白名单只允许 system.run[*]监控项。对于所有其它监控项,如果没有DenyKey参数,则不允许使用AllowKey 参数; 这种只有AllowKey参数情况下, Zabbix agent 将不会启动。
  • 顺序很重要。指定参数在配置文件中按其出现顺序逐一检查:
    • 一旦监控项键值与允许/拒绝规则匹配,该项即被允许或拒绝;并且规则检查停止。因此,如果一个项同时满足允许规则和拒绝规则,那么结果取决于最先匹配到的那个规则。
    • 顺序还影响EnableRemoteCommands参数(如果使用的话)。
  • 支持无限数量的AllowKey/DenyKey参数。
    • AllowKey、DenyKey规则不影响HostnameItem、HostMetadataItem、HostInterfaceItem配置参数。
    • 键模式是一个通配符表达式,其中通配符 (*)与特定位置的任意数量的任意字符匹配。它可以用于关键字名称和参数。
  • 如果在agent配置中不允许某个特定的监控项,则该监控项将被报告为不受支持(没有给出有关原因的提示);
  • Zabbix agent命令行使用带--print(-p)选项将不显示配置为不允许的键值;
  • Zabbix agent命令行使用有--test(-t)选项将会显示配置不允许的键值为"Unsupported item key"状态;
  • 拒绝的远程命令不会记录在agent日志中(如果LogRemoteCommands=1)。

用例

拒绝特定检查
  • 使用 DenyKey 参数将特定检查列入黑名单。匹配到的键值将被禁止。所有未匹配到的键值都将被允许,除了system.run[] 监控项。

例如:

# 拒绝安全数据访问
       DenyKey=vfs.file.contents[/etc/passwd,*]
Copy
✔ Copied

黑名单可能不是一个好的选择,因为新Zabbix 版本中,可能存在没有在当前配置中明确限制的键值,这可能会导致安全缺陷。

拒绝特定命令,允许其他的命令
  • 使用 DenyKey 参数将特定命令列入黑名单。使用 AllowKey 参数将其他命令全部列入白名单。
# 禁止特定命令
       DenyKey=system.run[ls -l /]
        
       # 允许其他脚本
       AllowKey=system.run[*]
Copy
✔ Copied
允许特定检查,拒绝其他检查
  • 使用 AllowKey 参数将特定检查列入白名单,使用DenyKey=*拒绝其他检查 DenyKey=*

例如:

# 允许访问读日志:
       AllowKey=vfs.file.*[/var/log/*]
       
       # 允许本地时间检查
       AllowKey=system.localtime[*]
       
       # 拒绝所有其他键
       DenyKey=*
Copy
✔ Copied
Allow script with spaces in path and arguments
  • Whitelist a script located in a path that contains spaces and allow passing arguments to it. On Windows, escape spaces using ^ when specifying the path.

For example:

# Allow running test.bat with or without arguments
       AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
Copy
✔ Copied

To test:

PS C:\Program Files\Zabbix Agent 2> .\zabbix_get.exe -s 127.0.0.1 -k system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat caret"]
Copy
✔ Copied

This configuration allows execution of the script regardless of whether arguments are passed (such as caret) and ensures that system.run is permitted even if the script path contains spaces.

模式示例

模式 描述 匹配 不匹配
* 匹配所有可能的带或不带参数的键。 任何
vfs.file.contents 匹配不带参数的vfs.file.contents vfs.file.contents vfs.file.contents[/etc/passwd]
vfs.file.contents[] 匹配带有空参数的vfs.file.contents vfs.file.contents[] vfs.file.contents
vfs.file.contents[*] 匹配 vfs.file.contents 和任何参数;不匹配没有方括号的 vfs.file.contents vfs.file.contents[]
vfs.file.contents[/path/to/file]
vfs.file.contents
vfs.file.contents[/etc/passwd,*] 匹配 vfs.file.contents 与第一个参数匹配 /etc/passwd 和所有其他参数具有任何值(也可以为空)。 vfs .file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[/etc/passwd]
vfs. file.contents[/var/log/zabbix_server.log]
vfs.file.contents[]
vfs.file.contents[*passwd*] 匹配 vfs.file.contents,第一个参数匹配 *passwd* 而没有其他参数。 vfs.file.contents[/etc /passwd] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[*passwd*,*] 匹配 vfs.file.contents,只有第一个参数匹配 *passwd* 和所有后续参数具有任何值(也可以为空)。 vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[/etc/passwd]<br >vfs.file.contents[/tmp/test]
vfs.file.contents[/var/log/zabbix_server.log,*,abc] 匹配 vfs.file.contents 与第一个参数匹配 /var/log/zabbix_server.log , 第三个参数匹配 'abc' 和任何(也可以为空)第二个参数。 vfs.file.contents[/var/log/zabbix_server.log,,abc]
vfs.file.contents[/ var/log/zabbix_server.log,utf8,abc]
vfs.file.contents[/var/log/zabbix_server.log,,abc,def]
vfs.file.contents[/etc/passwd,utf8] 匹配 vfs.file.contents,第一个参数匹配 /etc/passwd,第二个参数匹配 'utf8',没有其他参数。 vfs. file.contents[/etc/passwd,utf8] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]
vfs.file.* 匹配任何以 vfs.file. 开头且不带任何参数的键。 vfs.file.contents
vfs.file.size
vfs.file.contents[]< br>vfs.file.size[/var/log/zabbix_server.log]
vfs.file.*[*] 匹配任何以 vfs.file. 开头的键和任何参数。 vfs.file.size.bytes[]
vfs.file.大小[/var/log/zabbix_server.log, utf8]
vfs.file.size.bytes
vfs.*.contents 匹配任何以 vfs. 开头并以 .contents 结尾且不带任何参数的键。 vfs.mount.point.file.contents
vfs..contents
vfs.contents

system.run 和 AllowKey

假设有一个“myscript.sh”这样脚本,它可以通过Zabbix agent以多种方式在主机上执行:

1.作为被动或主动检查中的项目键,例如:

  • system.run[myscript.sh]
  • system.run[myscript.sh,wait]
  • system.run[myscript.sh.nowait]

在这里,用户可以添加“wait”、“nowait”或省略第二个参数,使用system.run[]的默认值 。

2.作为全局脚本(由用户在前端或 API 中启动)。

用户在 AdministrationScripts 中配置此脚本,设置“在Zabbix agent上执行”并将“myscript.sh”放入脚本的“命令”输入字段。当从前端或 API 调用时,由Zabbix server发送到agent上:

  • system.run[myscript.sh,wait] - 最高到 Zabbix 5.0.4
  • system.run[myscript.sh] - 从 5.0.5 开始

这里用户不需要控制“wait”/“nowait”参数。

3.作为动作的远程命令。 Zabbix server发送到agent:

  • system.run[myscript.sh,nowait]

在这里,用户再次不控制“wait”/“nowait”参数。

这意味着如果我们将 AllowKey 设置为:

AllowKey=system.run[myscript.sh]
Copy
✔ Copied

然后

  • system.run[myscript.sh] - 将被允许
  • system.run[myscript.sh,wait], system.run[myscript.sh,nowait]将不允许 - 如果作为行动步骤

要允许所有描述的变体,您可以添加:

AllowKey=system.run[myscript.sh,*]
       DenyKey=system.run[*]
Copy
✔ Copied

到 agent/agent2 参数。

To toggle search highlight, press Ctrl+Alt+H
Have an improvement suggestion for this page? Select the text that could be improved and press Ctrl+Enter to send it to the editors.