12 Restriction des contrôles de l'agent
Aperçu
Vous pouvez contrôler quelles clés d’élément l’agent Zabbix ou l’agent 2 est autorisé à utiliser ou à refuser lors de l’exécution des vérifications d’élément, des commandes distantes ou des scripts.
Pour ce faire, utilisez ces paramètres de configuration de l’agent pour définir des règles d’autorisation/refus :
AllowKey=<pattern>DenyKey=<pattern>
Le <pattern> doit contenir une seule clé d’élément et prend en charge les caractères génériques (*).
Le caractère générique correspond à n’importe quel nombre de caractères à sa position et peut être utilisé pour faire correspondre des clés d’élément ou des paramètres (par exemple, vfs.file.*[*]).
Pour améliorer la sécurité, il est recommandé d’utiliser des clés d’élément exactes au lieu de caractères génériques. Pour plus de détails, voir Sécurisation des règles d’autorisation/refus.
Contrairement aux autres paramètres de configuration de l’agent, vous pouvez spécifier un nombre illimité de paramètres AllowKey ou DenyKey.
Remarques importantes
-
Tous les éléments
system.runsont désactivés par défaut (même lorsqueDenyKeyest vide), comme siDenyKey=system.run[*]était défini comme la dernière règle. De ce fait, vous pouvez autoriser des élémentssystem.runspécifiques sans refuser explicitement les autres élémentssystem.run. -
Un élément spécifié dans
AllowKeydoit également être spécifié dansDenyKey(à l'exception des élémentssystem.run) ; sinon, l'agent Zabbix ne démarrera pas. -
Si possible, utilisez
AllowKeypour n'autoriser que les éléments requis et refuser tout le reste. Certaines clés peuvent être exploitées pour lire des fichiers non prévus via une traversée de chemin (par exemple,vfs.file.contents["../../../../etc/passwd"]), et les nouvelles versions de l'agent Zabbix peuvent introduire des clés non couvertes par vos règlesDenyKey. -
La configuration de
AllowKeyetDenyKeyn'affecte pas les paramètres d'agentHostnameItem,HostMetadataItemouHostInterfaceItem. -
Les éléments refusés deviennent non pris en charge sans aucun indice ni message d'erreur ; par exemple :
- Le paramètre de ligne de commande
--print (-p)de l'agent Zabbix n'affichera pas les clés d'élément refusées. - Le paramètre de ligne de commande
--test (-t)de l'agent Zabbix renverra « Unsupported item key. » pour les clés d'élément refusées. - Le fichier journal de l'agent Zabbix n'enregistrera pas les commandes distantes refusées si
LogRemoteCommands=1.
- Le paramètre de ligne de commande
Ordre des règles d’autorisation/refus
Vous pouvez spécifier un nombre illimité de règles AllowKey ou DenyKey, bien que leur ordre soit important.
- Les règles sont évaluées une par une, de haut en bas.
- Lorsqu’une clé d’élément correspond à une règle, elle est soit autorisée, soit refusée, et l’évaluation des règles s’arrête.
Par exemple, lors de l’évaluation de vfs.file.contents[/etc/passwd], les règles sont traitées comme suit :
AllowKey=vfs.file.contents[/tmp/app.log] # Le motif de clé d’élément ne correspond pas, l’agent passe à la règle suivante.
AllowKey=vfs.file.contents[/etc/passwd] # Le motif de clé d’élément correspond ; l’agent autorise la vérification de l’élément et arrête l’évaluation des règles.
DenyKey=vfs.file.*[*] # L’agent ignore la règle, car l’évaluation est déjà arrêtée.
L’ordre de règles suivant refusera la vérification de l’élément :
DenyKey=vfs.file.*[*] # Le motif de clé d’élément correspond ; l’agent refuse la vérification de l’élément et arrête l’évaluation des règles.
AllowKey=vfs.file.contents[/etc/passwd] # L’agent ignore la règle, car l’évaluation est déjà arrêtée.
AllowKey=vfs.file.contents[/tmp/app.log] # L’agent ignore la règle, car l’évaluation est déjà arrêtée.
Exemples
Les exemples suivants montrent des modèles de configuration courants pour AllowKey et DenyKey.
Autoriser des vérifications et des commandes spécifiques
Autorisez uniquement deux vérifications d’élément vfs.file et deux commandes 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.*[*]
Le paramètre DenyKey=system.run[*] n’est pas nécessaire, car toutes les autres commandes system.run sont refusées par défaut.
Autoriser les scripts
Autorisez l’agent Zabbix à exécuter des scripts sur les hôtes via toutes les méthodes disponibles :
- Les scripts globaux pouvant être exécutés dans l’interface web ou via l’API (cette méthode utilise toujours la clé
system.run[myscript.sh]) - Les commandes distantes depuis les opérations d’action (cette méthode utilise toujours la clé
system.run[myscript.sh,nowait]) - Les éléments d’agent Zabbix
system.runavec le script, par exemple :system.run[myscript.sh]system.run[myscript.sh,wait]system.run[myscript.sh,nowait]
AllowKey=system.run[myscript.sh,*]
Pour contrôler le paramètre wait/nowait, vous devez définir une règle différente.
Par exemple, vous pouvez autoriser uniquement les éléments system.run[myscript.sh,wait], excluant ainsi les autres méthodes :
AllowKey=system.run[myscript.sh,wait]
Sécurisation des règles d’autorisation/refus
Cet exemple montre comment sécuriser des règles AllowKey ou DenyKey trop permissives.
Considérez les règles suivantes :
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
DenyKey=vfs.file.*
DenyKey=system.cpu.load[*]
Sous Windows, vous devez échapper les espaces dans le chemin à l’aide d’un accent circonflexe (^).
Ces règles contiennent un caractère générique (*), qui peut être utilisé de manière abusive :
- Le script
test.batpeut être exécuté avec n’importe quels arguments, y compris des arguments non prévus. - Le motif
vfs.file.*ne correspond qu’aux clés d’élément sans paramètres ; cependant, tous les élémentsvfs.filenécessitent des paramètres. - Le motif
system.cpu.load[*]ne correspond qu’aux clés d’élément avec paramètres ; cependant, les élémentssystem.cpu.loadne nécessitent pas de paramètres.
Pour sécuriser ces règles, autorisez explicitement l’exécution de test.bat uniquement avec des arguments spécifiques, et refusez les motifs corrects de clés d’élément ; par exemple :
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[*]
Vous pouvez tester les règles en exécutant les commandes suivantes, qui renverront 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]
Exemples de motifs
Le tableau suivant montre comment les motifs de clés d'élément sont mis en correspondance :
- Une clé correspond au motif uniquement si elle remplit toutes les conditions de la colonne Correspondances.
- Les paramètres doivent être entièrement entourés de crochets (par exemple,
vfs.file.contents[*etvfs.file.contents*utf8]sont des motifs non valides).
| Motif | Correspondances | Exemples |
|---|---|---|
* |
Toute clé avec ou sans paramètres | |
vfs.file.* |
La clé commence par vfs.file.Aucun paramètre |
Correspond à :vfs.file.sizevfs.file.contentsNe correspond pas à : vfs.file.contents[]vfs.file.size[/var/log/app.log] |
vfs.*.contents |
La clé commence par vfs.La clé se termine par .contentsAucun paramètre |
Correspond à : vfs..contentsvfs.mount.point.file.contentsNe correspond pas à : vfs.contentsvfs.file.contents[] |
vfs.file.*[*] |
La clé commence par vfs.file.N'importe quels paramètres ou paramètres vides |
Correspond àvfs.file.get.custom[]vfs.file.size[/var/log/app.log, utf8]Ne correspond pas à : vfs.file.get.custom |
vfs.file.contents |
La clé est vfs.file.contentsAucun paramètre |
Correspond à :vfs.file.contentsNe correspond pas à : vfs.file.contents[/etc/passwd] |
vfs.file.contents[] |
La clé est vfs.file.contents[]Paramètres vides |
Correspond à :vfs.file.contents[]Ne correspond pas à : vfs.file.contents |
vfs.file.contents[*] |
La clé est vfs.file.contentsN'importe quels paramètres ou paramètres vides |
Correspond à :vfs.file.contents[/path/to/file]Ne correspond pas à : vfs.file.contents |
vfs.file.contents[/etc/passwd,*] |
La clé est vfs.file.contentsLe premier paramètre est /etc/passwdN'importe quel deuxième paramètre ou deuxième paramètre vide |
Correspond à :vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8]Ne correspond pas à : vfs.file.contents[]vfs.file.contents[/etc/passwd] |
vfs.file.contents[*passwd*] |
La clé est vfs.file.contentsLe premier paramètre inclut passwdPas de deuxième paramètre |
Correspond à :vfs.file.contents[/etc/passwd]Ne correspond pas à : vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8] |
vfs.file.contents[*passwd*,*] |
La clé est vfs.file.contentsLe premier paramètre inclut passwdN'importe quel deuxième paramètre ou deuxième paramètre vide |
Correspond à :vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf8]Ne correspond pas à : vfs.file.contents[/etc/passwd]vfs.file.contents[/tmp/test] |
vfs.file.contents[/etc/passwd,utf8] |
La clé est vfs.file.contentsLe premier paramètre est /etc/passwdLe deuxième paramètre est utf8 |
Correspond à :vfs.file.contents[/etc/passwd,utf8]Ne correspond pas à : vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf16] |