[comment]: # translation:outdated

[comment]: # ({5024b934-780b1aa2})
# 12 Restriction des contrôles de l'agent

[comment]: # ({/5024b934-780b1aa2})

[comment]: # ({40953ae4-9de656b2})
#### 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](/manual/appendix/config/zabbix_agentd) 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.*[*]`).

::: noteimportant
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](#securing-allowdeny-rules).
:::

Contrairement aux autres paramètres de configuration de l’agent, vous pouvez spécifier un nombre illimité de paramètres `AllowKey` ou `DenyKey`.

[comment]: # ({/40953ae4-9de656b2})

[comment]: # ({6fa61f9f-3145c750})
#### Remarques importantes

-   Tous les éléments [`system.run`](/manual/config/items/itemtypes/zabbix_agent/#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](#allowdeny-rule-order).
    Pour cette raison, 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, Zabbix agent **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 la traversée de chemin (par exemple, `vfs.file.contents["../../../../etc/passwd"]`), et les nouvelles versions de Zabbix agent 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)`](/manual/concepts/agent#options) de Zabbix agent n'affichera pas les clés d'élément refusées.
    -   Le paramètre de ligne de commande [`--test (-t)`](/manual/concepts/agent#options) de Zabbix agent renverra « Unsupported item key. » pour les clés d'élément refusées.
    -   Lorsque la journalisation est activée (`LogRemoteCommands=1`), le fichier journal de Zabbix agent n'enregistrera pas les [commandes distantes](/manual/config/notifications/action/operation/remote_command) refusées.

[comment]: # ({/6fa61f9f-3145c750})

[comment]: # ({071aae59-66ec4bb8})
#### 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 :

```default
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 :

```default
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.
```

[comment]: # ({/071aae59-66ec4bb8})

[comment]: # ({cb10c569-253ad144})
#### Exemples

Les exemples suivants montrent des modèles de configuration courants pour `AllowKey` et `DenyKey`.

[comment]: # ({/cb10c569-253ad144})

[comment]: # ({0fd42e58-19895d10})
##### Autoriser des vérifications et des commandes spécifiques

Autorisez uniquement deux vérifications d’élément [`vfs.file`](/manual/config/items/itemtypes/zabbix_agent#vfs.file.cksum) et deux commandes [`system.run`](/manual/config/items/itemtypes/zabbix_agent#system.run) :

```default
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.*[*]
```

::: noteclassic
Le paramètre `DenyKey=system.run[*]` n’est pas nécessaire, car toutes les autres commandes `system.run` sont refusées par défaut.
:::

[comment]: # ({/0fd42e58-19895d10})

[comment]: # ({b0df3494-3cc5f239})
##### Autoriser les scripts

Autorisez l’agent Zabbix à exécuter des scripts sur les hôtes via toutes les méthodes disponibles :

-   Les [scripts globaux](/manual/web_interface/frontend_sections/alerts/scripts) 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](/manual/config/notifications/action/operation#operation-details) (cette méthode utilise toujours la clé `system.run[myscript.sh,nowait]`)
-   Les éléments d’agent Zabbix [`system.run`](/manual/config/items/itemtypes/zabbix_agent#system.run) avec le script, par exemple :
    -   `system.run[myscript.sh]`
    -   `system.run[myscript.sh,wait]`
    -   `system.run[myscript.sh,nowait]`

```default
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 :

```default
AllowKey=system.run[myscript.sh,wait]
```

[comment]: # ({/b0df3494-3cc5f239})

[comment]: # ({abfd7422-1965a7d7})
##### 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 :

```default
AllowKey=system.run["C:\Program^ Files\Zabbix^ Agent^ 2\scripts\test.bat*"]
DenyKey=vfs.file.*
DenyKey=system.cpu.load[*]
```

::: noteclassic
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`](/manual/config/items/itemtypes/zabbix_agent#vfs.file.cksum) 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`](/manual/config/items/itemtypes/zabbix_agent#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 :

```default
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`.

```bash
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]
```

[comment]: # ({/abfd7422-1965a7d7})

[comment]: # ({23f78b84-16bccaff})
##### 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.`<br>Aucun paramètre|Correspond à :<br>`vfs.file.size`<br>`vfs.file.contents`<br><br>Ne correspond pas à :<br>`vfs.file.contents[]`<br>`vfs.file.size[/var/log/app.log]`|
|`vfs.*.contents`|La clé commence par `vfs.`<br>La clé se termine par `.contents`<br>Aucun paramètre|Correspond à : <br>`vfs..contents`<br>`vfs.mount.point.file.contents`<br><br>Ne correspond pas à :<br>`vfs.contents`<br>`vfs.file.contents[]`|
|`vfs.file.*[*]`|La clé commence par `vfs.file.`<br>N'importe quels paramètres ou paramètres vides|Correspond à<br>`vfs.file.get.custom[]`<br>`vfs.file.size[/var/log/app.log, utf8]`<br><br>Ne correspond pas à :<br>`vfs.file.get.custom`|
|`vfs.file.contents`|La clé est `vfs.file.contents`<br>Aucun paramètre|Correspond à :<br>`vfs.file.contents`<br><br>Ne correspond pas à :<br>`vfs.file.contents[/etc/passwd]`|
|`vfs.file.contents[]`|La clé est `vfs.file.contents[]`<br>Paramètres vides|Correspond à :<br>`vfs.file.contents[]`<br><br>Ne correspond pas à :<br>`vfs.file.contents`|
|`vfs.file.contents[*]`|La clé est `vfs.file.contents`<br>N'importe quels paramètres ou paramètres vides|Correspond à :<br>`vfs.file.contents[/path/to/file]`<br><br>Ne correspond pas à :<br>`vfs.file.contents`|
|`vfs.file.contents[/etc/passwd,*]`|La clé est `vfs.file.contents`<br>Le premier paramètre est `/etc/passwd`<br>N'importe quel deuxième paramètre ou deuxième paramètre vide|Correspond à :<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>Ne correspond pas à :<br>`vfs.file.contents[]`<br>`vfs.file.contents[/etc/passwd]`|
|`vfs.file.contents[*passwd*]`|La clé est `vfs.file.contents`<br>Le premier paramètre inclut `passwd`<br>Pas de deuxième paramètre|Correspond à :<br>`vfs.file.contents[/etc/passwd]`<br><br>Ne correspond pas à :<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`|
|`vfs.file.contents[*passwd*,*]`|La clé est `vfs.file.contents`<br>Le premier paramètre inclut `passwd`<br>N'importe quel deuxième paramètre ou deuxième paramètre vide|Correspond à :<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>Ne correspond pas à :<br>`vfs.file.contents[/etc/passwd]`<br>`vfs.file.contents[/tmp/test]`|
|`vfs.file.contents[/etc/passwd,utf8]`|La clé est `vfs.file.contents`<br>Le premier paramètre est `/etc/passwd`<br>Le deuxième paramètre est `utf8`|Correspond à :<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>Ne correspond pas à :<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf16]`|

[comment]: # ({/23f78b84-16bccaff})
