Você está visualizando a documentação da versão de desenvolvimento, que pode estar incompleta.
Esta página inclui conteúdo traduzido 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

Você pode controlar quais keys de item o agent Zabbix ou agent 2 tem permissão ou negação para usar ao executar verificações de item, comandos remotos ou scripts.

Para isso, utilize estes parâmetros de configuração do agent para definir regras de permissão/negação:

  • AllowKey=<pattern>
  • DenyKey=<pattern>

O <pattern> deve conter uma única key de item e suporta curingas (*). O curinga corresponde a qualquer número de caracteres em sua posição e pode ser usado para corresponder a keys de item ou parâmetros (por exemplo, vfs.file.*[*]).

Para melhorar a segurança, recomenda-se usar keys de item exatas em vez de curingas. Para mais detalhes, consulte Protegendo regras de permissão/negação.

Ao contrário de outros parâmetros de configuração do agent, você pode especificar um número ilimitado de parâmetros AllowKey ou DenyKey.

Notas importantes

  • Todos os itens system.run estão desabilitados por padrão (mesmo quando DenyKey está vazio), como se DenyKey=system.run[*] estivesse definido como a última regra. Por causa disso, você pode permitir itens system.run específicos sem negar explicitamente outros itens system.run.

  • Um item especificado em AllowKey também deve ser especificado em DenyKey (exceto para itens system.run); caso contrário, o agent Zabbix não iniciará.

  • Se possível, use AllowKey para permitir apenas os itens necessários e negar todo o resto. Algumas chaves podem ser abusadas para ler arquivos não intencionais via path traversal (por exemplo, vfs.file.contents["../../../../etc/passwd"]), e novas versões do agent Zabbix podem introduzir chaves não cobertas por suas regras DenyKey.

  • A configuração de AllowKey e DenyKey não afeta os parâmetros do agent HostnameItem, HostMetadataItem ou HostInterfaceItem.

  • Itens negados tornam-se não suportados sem qualquer dica ou mensagem de erro; por exemplo:

    • O parâmetro de linha de comando do agent Zabbix --print (-p) não mostrará as chaves de itens negados.
    • O parâmetro de linha de comando do agent Zabbix --test (-t) retornará "Unsupported item key." para as chaves de itens negados.
    • O arquivo de log do agent Zabbix não registrará comandos remotos negados se LogRemoteCommands=1.

Ordem das regras de permitir/negar

Você pode especificar um número ilimitado de regras AllowKey ou DenyKey, embora a ordem delas seja importante.

  • As regras são avaliadas uma a uma, de cima para baixo.
  • Quando uma chave de item corresponde a uma regra, ela é permitida ou negada, e a avaliação das regras é interrompida.

Por exemplo, ao avaliar vfs.file.contents[/etc/passwd], as regras são processadas da seguinte forma:

AllowKey=vfs.file.contents[/tmp/app.log]    # O padrão da chave de item não corresponde, o agent passa para a próxima regra.
       AllowKey=vfs.file.contents[/etc/passwd]     # O padrão da chave de item corresponde; o agent permite a checagem do item e interrompe a avaliação das regras.
       DenyKey=vfs.file.*[*]                       # O agent ignora a regra, pois a avaliação foi interrompida.

A seguinte ordem de regras irá negar a checagem do item:

DenyKey=vfs.file.*[*]                       # O padrão da chave de item corresponde; o agent nega a checagem do item e interrompe a avaliação das regras.
       AllowKey=vfs.file.contents[/etc/passwd]     # O agent ignora a regra, pois a avaliação foi interrompida.
       AllowKey=vfs.file.contents[/tmp/app.log]    # O agent ignora a regra, pois a avaliação foi interrompida.

Exemplos

Os exemplos a seguir mostram padrões comuns de configuração para AllowKey e DenyKey.

Permitindo verificações e comandos específicos

Permitir apenas duas verificações de item vfs.file e dois comandos system.run:

AllowKey=vfs.file.contents[/tmp/app.log]
       AllowKey=vfs.file.size[/tmp/app.log]
       AllowKey=system.run[/usr/bin/uptime]
       AllowKey=system.run[/usr/bin/df -h /]
       DenyKey=vfs.file.*[*]

Definir DenyKey=system.run[*] é desnecessário, pois todos os outros comandos system.run são negados por padrão.

Permitindo scripts

Permita que o agent Zabbix execute scripts nos hosts por todos os métodos disponíveis:

  • Scripts globais que podem ser executados no frontend ou via API (este método sempre usa a chave system.run[myscript.sh])
  • Comandos remotos de operações de ação (este método sempre usa a chave system.run[myscript.sh,nowait])
  • Itens do agent Zabbix system.run com o script, por exemplo:
    • system.run[myscript.sh]
    • system.run[myscript.sh,wait]
    • system.run[myscript.sh,nowait]
AllowKey=system.run[myscript.sh,*]

Para controlar o parâmetro wait/nowait, você deve definir uma regra diferente. Por exemplo, você pode permitir apenas itens system.run[myscript.sh,wait], excluindo assim outros métodos:

AllowKey=system.run[myscript.sh,wait]
Protegendo regras allow/deny

Este exemplo mostra como proteger regras AllowKey ou DenyKey excessivamente permissivas.

Considere as seguintes regras:

AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
       DenyKey=vfs.file.*
       DenyKey=system.cpu.load[*]

No Windows, você deve escapar espaços no caminho usando um acento circunflexo (^).

Essas regras contêm um caractere curinga (*), que pode ser mal utilizado:

  • O script test.bat pode ser executado com quaisquer argumentos, incluindo argumentos não intencionais.
  • O padrão vfs.file.* corresponde apenas a chaves de item sem parâmetros; no entanto, todos os itens vfs.file exigem parâmetros.
  • O padrão system.cpu.load[*] corresponde apenas a chaves de item com parâmetros; no entanto, os itens system.cpu.load não exigem parâmetros.

Para proteger essas regras, permita explicitamente a execução de test.bat apenas com argumentos específicos e negue padrões corretos de chaves de item; por exemplo:

AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat status"]
       AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat version"]
       DenyKey=vfs.file.*[*]
       DenyKey=system.cpu.load
       DenyKey=system.cpu.load[*]

Você pode testar as regras executando os seguintes comandos, que retornarão ZBX_NOTSUPPORTED.

cd "C:\Program Files\Zabbix Agent 2"
       zabbix_agent2.exe -t system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat debug"]
       zabbix_agent2.exe -t vfs.file.size["C:\ProgramData\MyApp\config.ini"]
       zabbix_agent2.exe -t vfs.file.contents["C:\Windows\System32\drivers\etc\hosts"]
       zabbix_agent2.exe -t system.cpu.load
       zabbix_agent2.exe -t system.cpu.load[all,avg1]
Exemplos de padrões

A tabela a seguir mostra como os padrões de chave de item são correspondidos:

  • Uma chave corresponde ao padrão somente se atender a todas as condições na coluna Corresponde.
  • Os parâmetros devem estar totalmente entre colchetes (por exemplo, vfs.file.contents[* e vfs.file.contents*utf8] são padrões inválidos).
Padrão Corresponde Exemplos
* Qualquer chave com ou sem parâmetros
vfs.file.* A chave começa com vfs.file.
Sem parâmetros
Corresponde:
vfs.file.size
vfs.file.contents

Não corresponde:
vfs.file.contents[]
vfs.file.size[/var/log/app.log]
vfs.*.contents A chave começa com vfs.
A chave termina com .contents
Sem parâmetros
Corresponde:
vfs..contents
vfs.mount.point.file.contents

Não corresponde:
vfs.contents
vfs.file.contents[]
vfs.file.*[*] A chave começa com vfs.file.
Qualquer parâmetro ou vazio
Corresponde
vfs.file.get.custom[]
vfs.file.size[/var/log/app.log, utf8]

Não corresponde:
vfs.file.get.custom
vfs.file.contents A chave é vfs.file.contents
Sem parâmetros
Corresponde:
vfs.file.contents

Não corresponde:
vfs.file.contents[/etc/passwd]
vfs.file.contents[] A chave é vfs.file.contents[]
Parâmetros vazios
Corresponde:
vfs.file.contents[]

Não corresponde:
vfs.file.contents
vfs.file.contents[*] A chave é vfs.file.contents
Qualquer parâmetro ou vazio
Corresponde:
vfs.file.contents[/path/to/file]

Não corresponde:
vfs.file.contents
vfs.file.contents[/etc/passwd,*] A chave é vfs.file.contents
O primeiro parâmetro é /etc/passwd
Qualquer segundo parâmetro ou vazio
Corresponde:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

Não corresponde:
vfs.file.contents[]
vfs.file.contents[/etc/passwd]
vfs.file.contents[*passwd*] A chave é vfs.file.contents
O primeiro parâmetro inclui passwd
Sem segundo parâmetro
Corresponde:
vfs.file.contents[/etc/passwd]

Não corresponde:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[*passwd*,*] A chave é vfs.file.contents
O primeiro parâmetro inclui passwd
Qualquer segundo parâmetro ou vazio
Corresponde:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

Não corresponde:
vfs.file.contents[/etc/passwd]
vfs.file.contents[/tmp/test]
vfs.file.contents[/etc/passwd,utf8] A chave é vfs.file.contents
O primeiro parâmetro é /etc/passwd
O segundo parâmetro é utf8
Corresponde:
vfs.file.contents[/etc/passwd,utf8]

Não corresponde:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]