Можно управлять тем, какие ключи элементов данных Zabbix агенту или Zabbix агенту 2 резрешено или запрещено использовать при выполнении проверок элементов данных, удалённых команд или скриптов.
Чтобы это сделать, используйте эти параметры конфигурации агента для для задания разрешающих/запрещающих правил:
AllowKey=<шаблон>DenyKey=<шаблон><Шаблон> должен содержать один ключ элемента данных и поддерживает подстановочный знак (*). Подстановочный знак соответствует любому количеству любых символов в данной позиции, и может использоваться для сопоставления как ключа элемента данных, так и параметров (например, vfs.file.*[*]).
Для улучшения безопасности рекомендуется использовать точные ключи элементов данных, а не подстановочные символы. Более подробную информацию смотрите в разделе Обеспечение безопасности разрешающих/запрещающих правил.
Все элементы данных system.run по умолчанию запрещены (даже когда DenyKey является пустым), как если бы последним правилом было добавлено DenyKey=system.run[*]. Благодаря этому, вы можете разрешить конкретные элементы данных system.run без явного запрета остальных элементов данных system.run.
Элемент данных, указанный в AllowKey, также должен быть указан в DenyKey (за исключением элементов данных system.run); в противном случае Zabbix агент не запустится.
По возможности, используйте AllowKey для разрешения только нужных элементов данных и запретите всё остальное. Некоторые ключи могут быть злонамеренно использованы для чтения непредназначенных для этого файлов через так называемые обходные пути (path traversal) (например, vfs.file.contents["../../../../etc/passwd"]), а новые версии Zabbix агента могут вводить ключи, не покрываемые вашими правилами DenyKey.
Настройки AllowKey и DenyKey не влияют на параметры агента HostnameItem, HostMetadataItem и HostInterfaceItem.
Запрещённые элементы данных становятся неподдерживаемыми без указания причины или какого-либо сообщения об ошибке; например:
--print (-p) не будет показывать запрещённые ключи элементов данных.--test (-t) вернёт состояние «Unsupported item key.» (Неподдерживаемый ключ элемента данных) для запрещённых ключей элементов данных.LogRemoteCommands=1.Можно указать неограниченное количество правил AllowKey или DenyKey, но их порядок имеет значение.
Например, при проверке ключа vfs.file.contents[/etc/passwd] правила обрабатываются следующим образом:
AllowKey=vfs.file.contents[/tmp/app.log] # Шаблон ключа элемента данных не даёт соответствия, агент переходит к следующему правилу.
AllowKey=vfs.file.contents[/etc/passwd] # Шаблон ключа элемента данных даёт соответствие; агент разрешает проверку элемента данных и прекращает проверку правил.
DenyKey=vfs.file.*[*] # Агент игнорирует правило, поскольку проверка правил была прекращена.Следующий порядок правил запретит проверку элемента данных:
DenyKey=vfs.file.*[*] # Шаблон ключа элемента данных даёт соответствие; агент запрещает проверку элемента данных и прекращает проверку правил.
AllowKey=vfs.file.contents[/etc/passwd] # Агент игнорирует правило, поскольку проверка правил была прекращена.
AllowKey=vfs.file.contents[/tmp/app.log] # Агент игнорирует правило, поскольку проверка правил была прекращена.Следующие примеры демонстрируют распространенные шаблоны конфигурации для AllowKey и DenyKey.
Разрешить проверку только двух элементов данных vfs.file и двух команд system.run:
AllowKey=vfs.file.contents[/tmp/app.log]
AllowKey=vfs.file.size[/tmp/app.log]
AllowKey=system.run[/usr/bin/uptime]
AllowKey=system.run[/usr/bin/df -h /]
DenyKey=vfs.file.*[*]Указание DenyKey=system.run[*] не является необходимым, поскольку все остальные команды system.run по умолчанию запрещены.
Разрешение Zabbix агенту выполнять скрипты на узле сети всеми доступными способами:
system.run[myscript.sh])system.run[myscript.sh,nowait])system.run со скриптом, например:
system.run[myscript.sh]system.run[myscript.sh,wait]system.run[myscript.sh,nowait]Чтобы управлять параметром wait/nowait, вам нужно установить другое правило. Например, вы можете разрешить только элементы данных system.run[myscript.sh,wait], исключая таким образом другие способы:
В этом примере показано, как обезопасить чрезмерно разрешительные правила AllowKey или DenyKey.
Consider the following rules:
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
DenyKey=vfs.file.*
DenyKey=system.cpu.load[*]В Windows, вам нужно экранировать пробелы в путях с помощью символа «карет» (^).
Эти правила содержат подстановочный символ (*), который может быть использован неверно:
test.bat может выполняться с любыми аргументами, включая те, которые для этого не предназначены.vfs.file.* соответствует только ключам элементов данных без параметров; однако, для всех элементы данных vfs.file требуются параметры.system.cpu.load[*] соответствует только ключам элементов данных с параметрами; однако, для элементов данных system.cpu.load параметры не требуются.Чтобы сделать эти правила безопасными, явно разрешите выполнение test.bat только с конкретными аргументами, а также запретите правильные шаблоны ключей элементов данных; например:
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat status"]
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat version"]
DenyKey=vfs.file.*[*]
DenyKey=system.cpu.load
DenyKey=system.cpu.load[*]Можно протестировать эти правила, выполняя следующие команды, которые будут возвращать ZBX_NOTSUPPORTED.
cd "C:\Program Files\Zabbix Agent 2"
zabbix_agent2.exe -t system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat debug"]
zabbix_agent2.exe -t vfs.file.size["C:\ProgramData\MyApp\config.ini"]
zabbix_agent2.exe -t vfs.file.contents["C:\Windows\System32\drivers\etc\hosts"]
zabbix_agent2.exe -t system.cpu.load
zabbix_agent2.exe -t system.cpu.load[all,avg1]Следующая таблица показывает, как работает соответствие шаблонов ключей элеменов данных:
vfs.file.contents[* и vfs.file.contents*utf8] являются некорректными шаблонами).| Шаблон | Соответствует | Примеры |
|---|---|---|
* |
Любой ключ с параметрами или без них. | |
vfs.file.* |
Ключ начинается с vfs.file.Без параметров |
Соответствует:vfs.file.sizevfs.file.contentsНе соответствует: vfs.file.contents[]vfs.file.size[/var/log/app.log] |
vfs.*.contents |
Ключ начинается с vfs.Ключ заканчивается на .contentsБез параметров |
Соответствует: vfs..contentsvfs.mount.point.file.contentsНе соответствует: vfs.contentsvfs.file.contents[] |
vfs.file.*[*] |
Ключ начинается с vfs.file.С любыми (в том числе пустыми) параметрами |
Соответствует:vfs.file.get.custom[]vfs.file.size[/var/log/app.log, utf8]Не соответствует: vfs.file.get.custom |
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[/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[]vfs.file.contents[/etc/passwd] |
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]vfs.file.contents[/tmp/test] |
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] |