Можно ограничить проверки на стороне агента, создав черный список элементов, белый список или комбинацию белого/черного списка.
Для этого используйте комбинацию из двух параметров конфигурации агента:
AllowKey=<шаблон>
- какие проверки разрешены; <шаблон> указывается с использованием выражения с подстановочным знаком (*)DenyKey=<шаблон>
- какие проверки запрещены; <шаблон> указывается с использованием выражения с подстановочным знаком (*)Обратите внимание, что:
system.run[*]
(скрипты, удаленные команды) по умолчанию отключены, даже если не указаны запрещающие ключи;Поэтому, чтобы разрешить все удаленные команды, укажите параметр AllowKey=system.run[*]. (До Zabbix 5.0.2, в конфигурации агента также требуется указать EnableRemoteCommands=1.)
Чтобы разрешить только некоторые удаленные команды, создайте белый список более конкретных параметров AllowKey[]. Чтобы запретить определенные удаленные команды, добавьте параметры DenyKey перед параметром AllowKey=system.run[*].
*Порядок влияет также на параметр EnableRemoteCommands (если используется).
* Поддерживается неограниченное количество параметров AllowKey/DenyKey.
* Правила AllowKey, DenyKey не влияют на параметры конфигурации HostnameItem, HostMetadataItem, HostInterfaceItem.
* Шаблон ключа - это выражение с подстановочным знаком, в котором подстановочный знак (*) соответствует любому количеству любых символов в определенной позиции. Его можно использовать как в имени ключа, так и в параметрах.
* Если конкретный ключ элемента запрещен в конфигурации агента, элемент будет отмечен как неподдерживаемый (без указания причины);
* Агент Zabbix с параметром командной строки --print (-p) не будет показывать ключи, которые не разрешены конфигурацией;
* Агент Zabbix с параметром командной строки --test (-t) вернет статус %%"%% Unsupported item key. %%"%% (Неподдерживаемый ключ элемента данных) для ключей, которые не разрешены конфигурацией;
* Отклоненные удаленные команды не будут записаны в журнал агента (если LogRemoteCommands = 1).
Например:
Черный список может быть не лучшим выбором, потому что новая версия Zabbix может иметь новые ключи, которые не полностью ограничиваются существующей конфигурацией. Это может вызвать брешь в безопасности.
# Disallow specific command
DenyKey=system.run[ls -l /]
# Allow other scripts
AllowKey=system.run[*]
DenyKey = *
Например:
# Allow reading logs:
AllowKey=vfs.file.*[/var/log/*]
# Allow localtime checks
AllowKey=system.localtime[*]
# Deny all other keys
DenyKey=*
Шаблон | Описание | Соответствует | Не соответствует |
---|---|---|---|
* | Соответствует всем возможным ключам с параметрами или без них. | Любой | Нет |
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] 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[] vfs.file.size[/var/log/zabbix_server.log] |
vfs.file.*[*] | Соответствует любым ключам, начинающимся с vfs.file. , с любыми параметрами. |
vfs.file.size.bytes[] vfs.file.size[/var/log/zabbix_server.log, utf8] |
vfs.file.size.bytes |
vfs.*.contents | Соответствует любому ключу, начинающемуся с vfs. и заканчивающемуся .contents без каких-либо параметров. |
vfs.mount.point.file.contents vfs..contents |
vfs.contents |
A hypothetical script like 'myscript.sh' may be executed on a host via Zabbix agent in several ways:
1. As an item key in a passive or active check, for example:
Here the user may add "wait", "nowait" or omit the 2nd argument to use its default value in system.run[].
2. As a global script (initiated by user in frontend or API).
A user configures this script in Administration → Scripts, sets "Execute on: Zabbix agent" and puts "myscript.sh" into the script's "Commands" input field. When invoked from frontend or API the Zabbix server sends to agent:
Here the user does not control the "wait"/"nowait" parameters.
3. As a remote command from an action. The Zabbix server sends to agent:
Here again the user does not control the "wait"/"nowait" parameters.
What that means is if we set AllowKey like:
then
To allow all described variants you may add:
to the agent/agent2 parameters.