Il est possible de restreindre les vérifications côté agent en créant une liste noire, une liste blanche ou une combinaison de liste blanche/liste noire d'éléments.
Pour ce faire, utilisez une combinaison de deux paramètres de configuration d'agent :
AllowKey=<pattern>
- quelles vérifications sont autorisées ; <pattern> est spécifié à l'aide d'une expression générique (*)DenyKey=<pattern>
- quelles vérifications sont refusées ; <pattern> est spécifié à l'aide d'une expression générique (*)Notez que:
system.run[*]
(commandes distantes, scripts) sont désactivés par défaut, même lorsqu'aucune clé de refus n'est spécifiée ;Par conséquent, pour autoriser les commandes à distance, spécifiez une clé AllowKey=system.run[<commande>,*] pour chaque commande autorisée, * représente le mode wait et nowait. Il est également possible de spécifier le paramètre AllowKey=system.run[*] pour autoriser toutes les commandes avec les modes wait et nowait. Pour interdire des commandes distantes spécifiques, ajoutez des paramètres DenyKey avec les commandes system.run[] avant le paramètre AllowKey=system.run[*].
Par exemple :
Une blacklist peut ne pas être un bon choix, car une nouvelle version de Zabbix peut avoir de nouvelles clés qui ne sont pas explicitement restreintes par la configuration existante. Cela pourrait provoquer une faille de sécurité.
# Interdire une commande spécifique
DenyKey=system.run[ls -l /]
# Autoriser d'autres scripts
AllowKey=system.run[*]
DenyKey=*
Par exemple :
# Autoriser la lecture des journaux :
AllowKey=vfs.file.*[/var/log/*]
# Autoriser les vérifications de l'heure locale
AllowKey=system.localtime[*]
# Refuser toutes les autres clés
DenyKey=*
Motif | Description | Correspondances | Aucune correspondance |
---|---|---|---|
* | Correspond à toutes les clés possibles avec ou sans paramètres. | Tout | Aucun |
vfs.file.contents | Correspond à vfs.file.contents sans paramètres. |
vfs.file.contents | vfs.file.contents[/etc/passwd] |
vfs.file.contents[] | Correspond à vfs.file.contents avec des paramètres vides. |
vfs.file.contents[] | vfs.file.contents |
vfs.file.contents[*] | Correspond à vfs.file.contents avec n'importe quel paramètre ; ne correspondra pas à vfs.file.contents sans crochets. |
vfs.file.contents[] vfs.file.contents[/path/to/file] |
vfs.file.contents |
vfs.file.contents[/etc/passwd,*] | Correspond à vfs.file.contents avec les premiers paramètres correspondant à /etc/passwd et tous les autres paramètres ayant une valeur (également vide). |
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*] | Correspond à vfs.file.contents avec le premier paramètre correspondant à *passwd* et aucun autre paramètre. |
vfs.file.contents[/etc/passwd] | vfs.file.contents[/etc/passwd,] vfs.file.contents[/etc/passwd, utf8] |
vfs.file.contents[*passwd*,*] | Correspond à vfs.file.contents avec seulement le premier paramètre correspondant à *passwd* et tous les paramètres suivants ayant n'importe quelle valeur (également vide). |
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] | Correspond à vfs.file.contents avec le premier paramètre correspondant à /var/log/zabbix_server.log, le troisième paramètre correspondant à 'abc' et tout deuxième paramètre (également vide). |
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] | Correspond à vfs.file.contents avec le premier paramètre correspondant à /etc/passwd, le second paramètre correspondant à 'utf8' et aucun autre argument. |
vfs.file.contents[/etc/passwd,utf8] | vfs.file.contents[/etc/passwd,] vfs.file.contents[/etc/passwd,utf16] |
vfs.file.* | Correspond à toutes les clés commençant par vfs.file. sans aucun paramètre. |
vfs.file.contents vfs.file.size |
vfs.file.contents[] vfs.file.size[/var/log/zabbix_server.log] |
vfs.file.*[*] | Correspond à toutes les clés commençant par vfs.file. avec tous les paramètres. |
vfs.file.size.bytes[] vfs.file.size[/var/log/zabbix_server.log, utf8] |
vfs.file.size.bytes |
vfs.*.contents | Correspond à n'importe quelle clé commençant par vfs. et se terminant par .contents sans aucun paramètre. |
vfs.mount.point.file.contents vfs..contents |
vfs.contents |
Un script hypothétique comme 'myscript.sh' peut être exécuté sur un hôte via l'agent Zabbix de plusieurs manières :
1. En tant que clé d'élément dans une vérification passive ou active, par exemple :
Ici, l'utilisateur peut ajouter "wait", "nowait" ou omettre le 2ème argument pour utiliser sa valeur par défaut dans system.run[].
2. En tant que script global (initié par l'utilisateur dans le frontend ou l'API).
Un utilisateur configure ce script dans Administration → Scripts, définit "Exécuter sur : agent Zabbix" et place "monscript.sh" dans le champ de saisie "Commandes" du script. Lorsqu'il est invoqué depuis l'interface ou l'API, le serveur Zabbix envoie à l'agent :
Ici, l'utilisateur ne contrôle pas les paramètres "wait"/"nowait".
3. Comme une commande à distance d'une action. Le serveur Zabbix envoie à l'agent :
Là encore l'utilisateur ne contrôle pas les paramètres "wait"/"nowait".
Cela signifie que si nous définissons AllowKey comme :
alors
Pour autoriser toutes les variantes décrites, vous pouvez ajouter :
aux paramètres agent/agent2.