Você está visualizando a documentação da versão de desenvolvimento, que pode estar incompleta.
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 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[<comando>,*] 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 whitelist sem uma regra de negação só é permitida para itens system.run[*]. Para todos os outros itens, os parâmetros AllowKey não são permitidos sem um parâmetro DenyKey; neste caso, o agent Zabbix não iniciará apenas com parâmetros AllowKey.
  • A ordem importa. Os parâmetros especificados são verificados um a um de acordo com sua ordem de aparição 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 é interrompida. Portanto, se um item corresponder tanto a uma regra de permissão quanto a uma regra de negação, o resultado dependerá de qual regra vem primeiro.
    • A ordem também afeta o parâmetro EnableRemoteCommands (se usado).
  • É suportado um número ilimitado de parâmetros AllowKey/DenyKey.
  • As regras AllowKey, DenyKey não afetam os parâmetros de configuração HostnameItem, HostMetadataItem, HostInterfaceItem.
  • O padrão de chave é uma expressão curinga onde o caractere curinga (*) corresponde a qualquer número de quaisquer caracteres em determinada posição. Pode ser usado tanto no nome da chave quanto nos parâmetros.
  • Se uma chave de item específica for negada na configuração do agent, o item será relatado como não suportado (nenhuma dica é fornecida quanto ao motivo);
  • O agent Zabbix com a opção de linha de comando --print (-p) não mostrará chaves que não são permitidas pela configuração;
  • O agent Zabbix com a opção de linha de comando --test (-t) retornará o status "Unsupported item key." para chaves que não são permitidas pela configuração;
  • Comandos remotos negados não serão registrados no log do agent (se LogRemoteCommands=1).

Casos de uso

Negar uma verificação específica
  • Coloque uma verificação específica na lista negra com o parâmetro DenyKey. As keys correspondentes serão proibidas. Todas as keys que não corresponderem serão permitidas, exceto os items system.run[].

Por exemplo:

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

Uma lista negra pode não ser uma boa escolha, pois uma nova versão do Zabbix pode ter novas keys que não estão explicitamente restritas pela configuração existente. Isso pode causar uma falha de segurança.

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

Por exemplo:

# Permitir leitura de logs:
       AllowKey=vfs.file.*[/var/log/*]
       
       # Permitir verificações de localtime
       AllowKey=system.localtime[*]
       
       # Negar todas as outras keys
       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 de 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 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 nenhum outro parâmetro. 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 nenhum outro argumento. 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 2º 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] - a partir do 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.