Es posible restringir las comprobaciones en el lado del agente creando una lista negra de métricas, una lista blanca o una combinación de ambas.
Para ello, utilice una combinación de dos parámetros de configuración del agente:
AllowKey=<patrón>
- qué comprobaciones están permitidas; <patrón> se especifica utilizando una expresión comodín (*)DenyKey=<patrón>
- qué comprobaciones están denegadas; <patrón> se especifica utilizando una expresión comodín (*)Tenga en cuenta que:
Por lo tanto, para permitir comandos remotos, especifique AllowKey=system.run[<comando>,*] para cada comando permitido, * representa los modos wait y nowait. También es posible especificar AllowKey=system.run[*] para permitir todos los comandos con los modos wait y nowait. Para denegar comandos remotos específicos, añada parámetros DenyKey con comandos system.run[] antes del parámetro AllowKey=system.run[*].
Por ejemplo:
Una lista negra puede no ser una buena elección, porque una nueva versión de Zabbix puede tener nuevas métricas que no estén explícitamente restringidas por la configuración existente. Esto podría causar una vulnerabilidad de seguridad.
# Denegar comando específico
DenyKey=system.run[ls -l /]
# Permitir otros scripts
AllowKey=system.run[*]
DenyKey=*
Por ejemplo:
# Permitir la lectura de logs:
AllowKey=vfs.file.*[/var/log/*]
# Permitir comprobaciones de hora local
AllowKey=system.localtime[*]
# Denegar todas las demás claves
DenyKey=*
^
al especificar la ruta.Por ejemplo:
# Permitir ejecutar test.bat con o sin argumentos
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
Para probar:
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 configuración permite la ejecución del script independientemente de si se pasan argumentos (como caret
) y asegura que system.run
esté permitido incluso si la ruta del script contiene espacios.
Patrón | Descripción | Coincide | No coincide |
---|---|---|---|
* | Coincide con todas las claves posibles con o sin parámetros. | Cualquiera | Ninguna |
vfs.file.contents | Coincide con vfs.file.contents sin parámetros. |
vfs.file.contents | vfs.file.contents[/etc/passwd] |
vfs.file.contents[] | Coincide con vfs.file.contents con parámetros vacíos. |
vfs.file.contents[] | vfs.file.contents |
vfs.file.contents[*] | Coincide con vfs.file.contents con cualquier parámetro; no coincidirá con vfs.file.contents sin corchetes. |
vfs.file.contents[] vfs.file.contents[/path/to/file] |
vfs.file.contents |
vfs.file.contents[/etc/passwd,*] | Coincide con vfs.file.contents con el primer parámetro coincidiendo con /etc/passwd y todos los demás parámetros con cualquier valor (también vacío). |
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*] | Coincide con vfs.file.contents con el primer parámetro coincidiendo con *passwd* y sin otros parámetros. |
vfs.file.contents[/etc/passwd] | vfs.file.contents[/etc/passwd,] vfs.file.contents[/etc/passwd, utf8] |
vfs.file.contents[*passwd*,*] | Coincide con vfs.file.contents con solo el primer parámetro coincidiendo con *passwd* y todos los parámetros siguientes con cualquier valor (también vacío). |
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] | Coincide con vfs.file.contents con el primer parámetro coincidiendo con /var/log/zabbix_server.log, el tercer parámetro coincidiendo con 'abc' y cualquier (también vacío) 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] | Coincide con vfs.file.contents con el primer parámetro coincidiendo con /etc/passwd, el segundo parámetro coincidiendo con 'utf8' y sin otros argumentos. |
vfs.file.contents[/etc/passwd,utf8] | vfs.file.contents[/etc/passwd,] vfs.file.contents[/etc/passwd,utf16] |
vfs.file.* | Coincide con cualquier clave que comience con vfs.file. sin ningún parámetro. |
vfs.file.contents vfs.file.size |
vfs.file.contents[] vfs.file.size[/var/log/zabbix_server.log] |
vfs.file.*[*] | Coincide con cualquier clave que comience con vfs.file. con cualquier parámetro. |
vfs.file.size.bytes[] vfs.file.size[/var/log/zabbix_server.log, utf8] |
vfs.file.size.bytes |
vfs.*.contents | Coincide con cualquier clave que comience con vfs. y termine con .contents sin ningún parámetro. |
vfs.mount.point.file.contents vfs..contents |
vfs.contents |
Un script hipotético como 'myscript.sh' puede ejecutarse en un equipo a través del agente Zabbix de varias maneras:
1. Como una clave de métrica en una comprobación pasiva o activa, por ejemplo:
Aquí el usuario puede añadir "wait", "nowait" u omitir el segundo argumento para usar su valor por defecto en system.run[].
2. Como un script global (iniciado por el usuario en la interfaz web o API).
Un usuario configura este script en Alertas → Scripts, establece "Ejecutar en: Agente Zabbix" y coloca "myscript.sh" en el campo de entrada "Comandos" del script. Cuando se invoca desde la interfaz web o API, el servidor Zabbix envía al agente:
Aquí el usuario no controla los parámetros "wait"/"nowait".
3. Como un comando remoto desde una acción. El servidor Zabbix envía al agente:
Aquí nuevamente el usuario no controla los parámetros "wait"/"nowait".
Esto significa que si configuramos AllowKey así:
entonces
Para permitir todas las variantes descritas, puede añadir:
a los parámetros del agente/agent2.