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.
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:
--print (-p) não mostrará as chaves de itens negados.--test (-t) retornará "Unsupported item key." para as chaves de itens negados.LogRemoteCommands=1.Você pode especificar um número ilimitado de regras AllowKey ou DenyKey, embora a ordem delas seja importante.
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.Os exemplos a seguir mostram padrões comuns de configuração para AllowKey e DenyKey.
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.
Permita que o agent Zabbix execute scripts nos hosts por todos os métodos disponíveis:
system.run[myscript.sh])system.run[myscript.sh,nowait])system.run com o script, por exemplo:
system.run[myscript.sh]system.run[myscript.sh,wait]system.run[myscript.sh,nowait]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:
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:
test.bat pode ser executado com quaisquer argumentos, incluindo argumentos não intencionais.vfs.file.* corresponde apenas a chaves de item sem parâmetros; no entanto, todos os itens vfs.file exigem parâmetros.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]A tabela a seguir mostra como os padrões de chave de item são correspondidos:
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.sizevfs.file.contentsNão corresponde: vfs.file.contents[]vfs.file.size[/var/log/app.log] |
vfs.*.contents |
A chave começa com vfs.A chave termina com .contentsSem parâmetros |
Corresponde: vfs..contentsvfs.mount.point.file.contentsNão corresponde: vfs.contentsvfs.file.contents[] |
vfs.file.*[*] |
A chave começa com vfs.file.Qualquer parâmetro ou vazio |
Correspondevfs.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.contentsSem parâmetros |
Corresponde:vfs.file.contentsNã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.contentsQualquer 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.contentsO primeiro parâmetro é /etc/passwdQualquer 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.contentsO primeiro parâmetro inclui passwdSem 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.contentsO primeiro parâmetro inclui passwdQualquer 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.contentsO primeiro parâmetro é /etc/passwdO 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] |