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.run sont désactivés par défaut (même lorsque DenyKey est vide), comme si DenyKey=system.run[*] était défini comme la dernière règle. De ce fait, vous pouvez autoriser des éléments system.run spécifiques sans refuser explicitement les autres éléments system.run.

  • Un élément spécifié dans AllowKey doit également être spécifié dans DenyKey (à l'exception des éléments system.run) ; sinon, l'agent Zabbix ne démarrera pas.

  • Si possible, utilisez AllowKey pour 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ègles DenyKey.

  • La configuration de AllowKey et DenyKey n'affecte pas les paramètres d'agent HostnameItem, HostMetadataItem ou HostInterfaceItem.

  • 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.

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.run avec 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.bat peut ê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éments vfs.file nécessitent des paramètres.
  • Le motif system.cpu.load[*] ne correspond qu’aux clés d’élément avec paramètres ; cependant, les éléments system.cpu.load ne 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[* et vfs.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.size
vfs.file.contents

Ne correspond pas à :
vfs.file.contents[]
vfs.file.size[/var/log/app.log]
vfs.*.contents La clé commence par vfs.
La clé se termine par .contents
Aucun paramètre
Correspond à :
vfs..contents
vfs.mount.point.file.contents

Ne correspond pas à :
vfs.contents
vfs.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.contents
Aucun paramètre
Correspond à :
vfs.file.contents

Ne 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.contents
N'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.contents
Le premier paramètre est /etc/passwd
N'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.contents
Le premier paramètre inclut passwd
Pas 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.contents
Le premier paramètre inclut passwd
N'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.contents
Le premier paramètre est /etc/passwd
Le 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]