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

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

Обзор

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

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

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

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

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

Поэтому, чтобы разрешить удалённые команды, укажите AllowKey=system.run[<команда>,*] по каждой разрешенной команде, * заменяет режимы wait и nowait. Также можно указать параметр AllowKey=system.run[*], чтобы разрешить все команды с режимами wait и nowait. Чтобы запретить определённые удалённые команды, добавьте параметры DenyKey с командами system.run[] до параметра AllowKey=system.run[*].

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

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

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

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

Например:

# Запрет доступа к защищенным данным
       DenyKey=vfs.file.contents[/etc/passwd,*]

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

Запрет конкретной команды, разрешение остальных
  • Добавьте в черный список конкретную команду с параметром DenyKey. Добавьте в белый список все остальные команды при помощи параметра AllowKey.
# Отключение конкретной команды
       DenyKey=system.run[ls -l /]
        
       # Включение остальных скриптов
       AllowKey=system.run[*]
Разрешение конкретной проверки, запрет остальных
  • Внесите нужные проверки в белый список, используя параметры AllowKey, запретите остальные при помощи DenyKey=*

Например:

# Разрешение чтения журналов (логов):
       AllowKey=vfs.file.*[/var/log/*]
       
       # Разрешение проверок локального времени
       AllowKey=system.localtime[*]
       
       # Запрет всех остальных ключей
       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[/путь/к/файлу]
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 и AllowKey

Гипотетический скрипт, такой как 'myscript.sh', можно выполнять на узле сети через Zabbix агент несколькими способами:

1. В виде ключа элемента данных пассивной или активной проверкой, например:

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

Здесь пользовать может добавить "wait", "nowait" или опустить второй аргумент и использовать значение по умолчанию для system.run[].

2. В виде глобального скрипта (инициируется пользователем через веб-интерфейс или по API).

Пользователь настраивает этот скрипт в АдминистрированиеСкрипты, задает "Выполнять на: Zabbix агент" и помещает "myscript.sh" в поле ввода скрипта "Команды". При вызове из веб-интерфейса или по API Zabbix сервер отправляет на агент:

  • system.run[myscript.sh,wait] - до Zabbix 5.0.4
  • system.run[myscript.sh] - с 5.0.5

Здесь пользователь не управляет параметрами "wait"/"nowait".

3. В виде удаленной команды на действие. Zabbix сервер отправляет на агента:

  • system.run[myscript.sh,nowait]

Здесь также пользователь не управляет параметрами "wait"/"nowait".

Это означает, что если мы зададим AllowKey как:

AllowKey=system.run[myscript.sh]

тогда

  • system.run[myscript.sh] - будет разрешен
  • system.run[myscript.sh,wait], system.run[myscript.sh,nowait] не будут разрешены - скрипт не запустится, если будет вызван шагом действия

Чтобы разрешить все описанные варианты, вы можете добавить:

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

к параметрам агента / агента 2.