Esta página foi traduzida automaticamente. Se você notar um erro, selecione-o e pressione Ctrl+Enter para reportá-lo aos editores.

12 Restringindo verificações do agent

Visão geral

É possível restringir as verificações no lado do agent criando uma blacklist de item, uma whitelist ou uma combinação de whitelist/blacklist.

Para isso, use uma combinação de dois parâmetros de configuração do agent:

  • AllowKey=<pattern> - quais verificações são permitidas; <pattern> é especificado usando uma expressão curinga (*)
  • DenyKey=<pattern> - quais verificações são negadas; <pattern> é especificado usando uma expressão curinga (*)

Observe que:

  • Todos os itens system.run[*] (comandos remotos, scripts) são desabilitados por padrão, mesmo quando nenhuma chave de negação é especificada, deve-se assumir que DenyKey=system.run[*] é implicitamente adicionado.
  • Desde o Zabbix 5.0.2, o parâmetro EnableRemoteCommands do agent está:
    • obsoleto para o Zabbix agent
    • não suportado pelo Zabbix agent2

Portanto, para permitir comandos remotos, especifique um AllowKey=system.run[<command>,*] para cada comando permitido, * representa os modos wait e nowait. Também é possível especificar AllowKey=system.run[*] para permitir todos os comandos com os modos wait e nowait. Para negar comandos remotos específicos, adicione parâmetros DenyKey com comandos system.run[] antes do parâmetro AllowKey=system.run[*].

Regras importantes

  • Uma lista branca sem uma regra de negação só é permitida para system.run[*] Itens. Para todos os outros itens, os parâmetros AllowKey não são permitidos sem um parâmetro DenyKey; neste caso o agente Zabbix não irá start apenas com parâmetros AllowKey.
  • A ordem importa. Os parâmetros especificados são verificados um a um de acordo com sua ordem de aparência no arquivo de configuração:
    • Assim que uma chave de item corresponder a uma regra de permissão/negação, o item será permitido ou negado; e a verificação de regras pára. Então, se um item corresponde a uma regra de permissão e uma regra de negação, o resultado será depende de qual regra vem primeiro.
    • A ordem afeta também o parâmetro EnableRemoteCommands (se usado).
  • Números ilimitados de parâmetros AllowKey/DenyKey são suportados.
  • As regras AllowKey, DenyKey não afetam HostnameItem, Parâmetros de configuração HostMetadataItem, HostInterfaceItem.
  • O padrão de chave é uma expressão curinga em que o curinga (*) caractere corresponde a qualquer número de caracteres em determinada posição. Pode ser usado tanto no nome da chave quanto nos parâmetros.
  • Se uma chave de item específica não for permitida na configuração do agente, o item será relatado como não suportado (nenhuma dica é dada quanto ao razão);
  • O agente Zabbix com a opção de linha de comando --print (-p) não será exibido chaves que não são permitidas pela configuração;
  • O agente Zabbix com a opção de linha de comando --test (-t) retornará "Chave de item não compatível." status para chaves que não são permitidas por configuração;
  • Comandos remotos negados não serão registrados no log do agente (se LogRemoteCommands=1).

Casos de uso

Negar verificação específica
  • Lista negra de uma verificação específica com o parâmetro DenyKey. Chaves correspondentes será desautorizado. Todas as chaves não correspondentes serão permitidas, exceto system.run[] itens.

Por exemplo:

# Negar acesso seguro a dados
       DenyKey=vfs.file.contents[/etc/passwd,*]

::: não importante Uma lista negra pode não ser uma boa escolha, porque um nova versão do Zabbix pode ter novas chaves que não são explicitamente restritas pela configuração existente. Isso pode causar uma segurança falha. :::

Negar comando específico, permitir outros
  • Lista negra de um comando específico com o parâmetro DenyKey. Colocar todos na lista de permissões outros comandos, com o parâmetro AllowKey.
# Desabilita comando específico
       DenyKey=system.run[ls -l /]
        
       # Permitir outros scripts
       AllowKey=system.run[*]
Permitir verificação específica, negar outras
  • Verificações específicas da lista de permissões com parâmetros AllowKey, negue outras com DenyKey=*

Por exemplo:

# Permitir a leitura de logs:
       AllowKey=vfs.file.*[/var/log/*]
       
       # Permitir verificações de hora local
       AllowKey=system.localtime[*]
       
       # Negar todas as outras chaves
       DenyKey=*
Permitir script com espaços no caminho e argumentos
  • Coloque na lista de permissões um script localizado em um caminho que contenha espaços e permita a passagem de argumentos para ele. No Windows, escape os espaços usando ^ ao especificar o caminho.

Por exemplo:

# Permitir a execução do test.bat com ou sem argumentos
       AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]

Para testar:

PS C:\Program Files\Zabbix Agent 2> .\zabbix_get.exe -s 127.0.0.1 -k system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat caret"]

Esta configuração permite a execução do script independentemente de argumentos serem passados (como caret) e garante que o system.run seja permitido mesmo que o caminho do script contenha espaços.

Exemplos de padrões

Padrão Descrição Corresponde Não corresponde
* Corresponde a todas as possíveis keys com ou sem parâmetros. Qualquer Nenhuma
vfs.file.contents Corresponde a vfs.file.contents sem parâmetros. vfs.file.contents vfs.file.contents[/etc/passwd]
vfs.file.contents[] Corresponde a vfs.file.contents com parâmetros vazios. vfs.file.contents[] vfs.file.contents
vfs.file.contents[*] Corresponde a vfs.file.contents com quaisquer parâmetros; não corresponderá a vfs.file.contents sem colchetes. vfs.file.contents[]
vfs.file.contents[/path/to/file]
vfs.file.contents
vfs.file.contents[/etc/passwd,*] Corresponde a vfs.file.contents com o primeiro parâmetro igual a /etc/passwd e todos os outros parâmetros com qualquer valor (inclusive vazio). 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*] Corresponde a vfs.file.contents com o primeiro parâmetro igual a *passwd* e sem outros parâmetros. vfs.file.contents[/etc/passwd] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd, utf8]
vfs.file.contents[*passwd*,*] Corresponde a vfs.file.contents com apenas o primeiro parâmetro igual a *passwd* e todos os parâmetros seguintes com qualquer valor (inclusive vazio). 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] Corresponde a vfs.file.contents com o primeiro parâmetro igual a /var/log/zabbix_server.log, o terceiro parâmetro igual a 'abc' e qualquer (inclusive vazio) segundo parâmetro. 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] Corresponde a vfs.file.contents com o primeiro parâmetro igual a /etc/passwd, o segundo parâmetro igual a 'utf8' e sem outros argumentos. vfs.file.contents[/etc/passwd,utf8] vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]
vfs.file.* Corresponde a qualquer key começando com vfs.file. sem quaisquer parâmetros. vfs.file.contents
vfs.file.size
vfs.file.contents[]
vfs.file.size[/var/log/zabbix_server.log]
vfs.file.*[*] Corresponde a qualquer key começando com vfs.file. com quaisquer parâmetros. vfs.file.size.bytes[]
vfs.file.size[/var/log/zabbix_server.log, utf8]
vfs.file.size.bytes
vfs.*.contents Corresponde a qualquer key começando com vfs. e terminando com .contents sem quaisquer parâmetros. vfs.mount.point.file.contents
vfs..contents
vfs.contents

system.run e AllowKey

Um script hipotético como 'myscript.sh' pode ser executado em um host via Zabbix agent de várias maneiras:

1. Como uma chave de item em uma verificação passiva ou ativa, por exemplo:

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

Aqui o usuário pode adicionar "wait", "nowait" ou omitir o segundo argumento para usar seu valor padrão em system.run[].

2. Como um script global (iniciado pelo usuário no frontend ou API).

Um usuário configura este script em AlertasScripts, define "Executar em: Zabbix agent" e coloca "myscript.sh" no campo de entrada "Comandos" do script. Quando invocado pelo frontend ou API, o Zabbix server envia para o agent:

  • system.run[myscript.sh,wait] - até o Zabbix 5.0.4
  • system.run[myscript.sh] - desde 5.0.5

Aqui o usuário não controla os parâmetros "wait"/"nowait".

3. Como um comando remoto de uma ação. O Zabbix server envia para o agent:

  • system.run[myscript.sh,nowait]

Aqui novamente o usuário não controla os parâmetros "wait"/"nowait".

O que isso significa é que se definirmos AllowKey como:

AllowKey=system.run[myscript.sh]

então

  • system.run[myscript.sh] - será permitido
  • system.run[myscript.sh,wait], system.run[myscript.sh,nowait] não serão permitidos - o script não será executado se invocado como uma etapa de ação

Para permitir todas as variantes descritas, você pode adicionar:

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

aos parâmetros do agent/agent2.