É 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:
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[*].
Por exemplo:
::: 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. :::
# Desabilita comando específico
DenyKey=system.run[ls -l /]
# Permitir outros scripts
AllowKey=system.run[*]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=*^ 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.
| 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 |
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:
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 Alertas → Scripts, 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:
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:
Aqui novamente o usuário não controla os parâmetros "wait"/"nowait".
O que isso significa é que se definirmos AllowKey como:
então
Para permitir todas as variantes descritas, você pode adicionar:
aos parâmetros do agent/agent2.