Это перевод страницы документации с английского языка. Помогите нам сделать его лучше.

15 Ограничение проверок агента

Обзор

Можно ограничить проверки на стороне агента, создав черный список элементов, белый список или комбинацию белого/черного списка.

Для этого используйте комбинацию из двух параметров конфигурации агента:

  • AllowKey=<шаблон> - какие проверки разрешены; <шаблон> указывается с использованием выражения с подстановочным знаком (*)
  • DenyKey=<шаблон> - какие проверки запрещены; <шаблон> указывается с использованием выражения с подстановочным знаком (*)

Обратите внимание, что:

  • Все элементы данных system.run[*] (скрипты, удаленные команды) по умолчанию отключены, даже если не указаны запрещающие ключи;
  • Начиная с Zabbix 5.0.2 параметр агента EnableRemoteCommands:
   * признан устаревшим для Zabbix агента
          * не поддерживается для Zabbix агента 2

Поэтому, чтобы разрешить все удаленные команды, укажите параметр AllowKey=system.run[*]. (До Zabbix 5.0.2, в конфигурации агента также требуется указать EnableRemoteCommands=1.)

Чтобы разрешить только некоторые удаленные команды, создайте белый список более конкретных параметров AllowKey[]. Чтобы запретить определенные удаленные команды, добавьте параметры DenyKey перед параметром AllowKey=system.run[*].

Важные правила

  • Белый список без правила запрещения ключей разрешен только для элементов данных system.run [*]. Для всех остальных элементов параметры AllowKey не допускаются без параметра DenyKey; в этом случае Zabbix агент не запустится только с параметрами AllowKey.
  • Очередность имеет значение. Указанные параметры проверяются по очереди в соответствии с порядком их появления в файле конфигурации:
    • Как только ключ элемента данных соответствует разрешающему/запрещающему правилу, элемент разрешается или запрещается; и проверка правил прекращается. Таким образом, если элемент соответствует и разрешающему правилу, и запрещающему правилу, результат будет зависеть от того, какое правило будет первым.
  *Порядок влияет также на параметр EnableRemoteCommands (если используется).
       * Поддерживается неограниченное количество параметров AllowKey/DenyKey.
       * Правила AllowKey, DenyKey не влияют на параметры конфигурации HostnameItem, HostMetadataItem, HostInterfaceItem.
       * Шаблон ключа - это выражение с подстановочным знаком, в котором подстановочный знак (*) соответствует любому количеству любых символов в определенной позиции. Его можно использовать как в имени ключа, так и в параметрах.
       * Если конкретный ключ элемента запрещен в конфигурации агента, элемент будет отмечен как неподдерживаемый (без указания причины);
       * Агент Zabbix с параметром командной строки --print (-p) не будет показывать ключи, которые не разрешены конфигурацией;
       * Агент Zabbix с параметром командной строки --test (-t) вернет статус %%"%% Unsupported item key. %%"%% (Неподдерживаемый ключ элемента данных) для ключей, которые не разрешены конфигурацией;
       * Отклоненные удаленные команды не будут записаны в журнал агента (если LogRemoteCommands = 1).

Примеры использования

Запретить конкретную проверку
  • Добавить в черный список конкретную проверку с параметром DenyKey. Соответствующие ключи будут запрещены. Разрешены все несовпадающие ключи, кроме элементов system.run[].

Например:

# Deny secure data access
       DenyKey=vfs.file.contents[/etc/passwd,*]

Черный список может быть не лучшим выбором, потому что новая версия Zabbix может иметь новые ключи, которые не полностью ограничиваются существующей конфигурацией. Это может вызвать брешь в безопасности.

Запретить конкретную команду, разрешить другие
  • Добавить в черный список конкретную команду с параметром DenyKey. Добавьте в белый список все остальные команды с помощью параметра AllowKey.
# Disallow specific command
       DenyKey=system.run[ls -l /]
        
       # Allow other scripts
       AllowKey=system.run[*]
Разрешить конкретную проверку, запретить другие
  • Внесите определенные проверки в белый список с параметрами AllowKey, запретите другие с помощью 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

system.run and AllowKey

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:

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

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 AdministrationScripts, 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:

  • system.run[myscript.sh,wait] - up to Zabbix 5.0.4
  • system.run[myscript.sh] - since 5.0.5

Here the user does not control the "wait"/"nowait" parameters.

3. As a remote command from an action. The Zabbix server sends to agent:

  • system.run[myscript.sh,nowait]

Here again the user does not control the "wait"/"nowait" parameters.

What that means is if we set AllowKey like:

AllowKey=system.run[myscript.sh]

then

  • system.run[myscript.sh] - will be allowed
  • system.run[myscript.sh,wait], system.run[myscript.sh,nowait] will not be allowed - the script will not be run if invoked as a step of action

To allow all described variants you may add:

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

to the agent/agent2 parameters.