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.