[comment]: # translation:outdated

[comment]: # ({780b1aa2-780b1aa2})
# 13 Restreindre les vérifications des agents

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

[comment]: # ({7fa4715b-9de656b2})

#### Aperçu

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](/manual/appendix/config/zabbix_agentd) 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:

-   Tous les éléments `system.run[*]` (commandes distantes, scripts) sont désactivés par défaut, même lorsqu'aucune clé de refus n'est spécifiée ;
-   Depuis Zabbix 5.0.2, le paramètre d'agent EnableRemoteCommands est :

```{=html}
<!-- -->
```
       * obsolète par l'agent Zabbix
       * non pris en charge par l'agent Zabbix 2

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

[comment]: # ({/7fa4715b-9de656b2})

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

#### Règles importantes

-   Une liste blanche sans règle de refus n'est autorisée que pour les éléments system.run\[\*\]. Pour tous les autres éléments, les paramètres AllowKey ne sont pas autorisés sans un paramètre DenyKey ; dans ce cas, l'agent Zabbix **ne démarrera pas** avec uniquement les paramètres AllowKey.
-   L'ordre compte. Les paramètres spécifiés sont vérifiés un par un selon leur ordre d'apparition dans le fichier de configuration :
    -   Dès qu'une clé d'élément correspond à une règle d'autorisation/de refus, l'élément est soit autorisé, soit refusé ; et la vérification des règles s'arrête. Ainsi, si un élément correspond à la fois à une règle d'autorisation et à une règle de refus, le résultat dépendra de la règle qui vient en premier.
    -   L'ordre affecte également le paramètre EnableRemoteCommands (s'il est utilisé).
-   Un nombre illimité de paramètres AllowKey/DenyKey est pris en charge.
-   Les règles AllowKey, DenyKey n'affectent pas les paramètres de configuration HostnameItem, HostMetadataItem, HostInterfaceItem.
-   Le modèle de clé est une expression générique où le caractère générique (\*) correspond à n'importe quel nombre de caractères dans une certaine position. Il peut être utilisé à la fois dans le nom de la clé et dans les paramètres.
-   Si une clé d'élément spécifique n'est pas autorisée dans la configuration de l'agent, l'élément sera signalé comme non pris en charge (aucune indication n'est donnée quant à la raison) ;
-   L'agent Zabbix avec l'option de ligne de commande --print (-p) n'affichera pas les clés qui ne sont pas autorisées par la configuration ;
-   L'agent Zabbix avec l'option de ligne de commande --test (-t) renverra  l'état "Clé d'élément non prise en charge." pour les clés non autorisées par la configuration ;
-   Les commandes à distance refusées ne seront pas consignées dans le journal de l'agent (si LogRemoteCommands=1).

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

[comment]: # ({new-66ec4bb8})
#### Allow/deny rule order

You can specify an unlimited number of `AllowKey` or `DenyKey` rules, though their order matters.

-   Rules are evaluated one by one, from top to bottom.
-   When an item key matches a rule, it is either allowed or denied, and rule evaluation stops.

For example, when evaluating `vfs.file.contents[/etc/passwd]`, the rules are processed as follows:

```default
AllowKey=vfs.file.contents[/tmp/app.log]    # Item key pattern does not match, agent proceeds to the next rule.
AllowKey=vfs.file.contents[/etc/passwd]     # Item key pattern matches; agent allows the item check and stops rule evaluation.
DenyKey=vfs.file.*[*]                       # Agent ignores the rule, as the evaluation has stopped.
```

The following rule order will deny the item check:

```default
DenyKey=vfs.file.*[*]                       # Item key pattern matches; agent denies the item check and stops rule evaluation.
AllowKey=vfs.file.contents[/etc/passwd]     # Agent ignores the rule, as the evaluation has stopped.
AllowKey=vfs.file.contents[/tmp/app.log]    # Agent ignores the rule, as the evaluation has stopped.
```

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

[comment]: # ({253ad144-253ad144})
#### Cas d'usage

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

[comment]: # ({new-19895d10})
##### Allowing specific checks and commands

Allow only two [`vfs.file`](/manual/config/items/itemtypes/zabbix_agent#virtual-file-system-data) item checks and two [`system.run`](/manual/config/items/itemtypes/zabbix_agent#system-data) commands:

```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
Setting `DenyKey=system.run[*]` is unnecessary, because all other `system.run` commands are denied by default.
:::

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

[comment]: # ({new-3cc5f239})
##### Allowing scripts

Allow Zabbix agent to execute scripts on hosts via all available methods:

-   [Global scripts](/manual/web_interface/frontend_sections/administration/scripts) that can be executed in the frontend or via API (this method always uses the `system.run[myscript.sh]` key)
-   Remote commands from [action operations](/manual/config/notifications/action/operation#operation-details) (this method always uses the `system.run[myscript.sh,nowait]` key)
-   [`system.run`](/manual/config/items/itemtypes/zabbix_agent#system-data) Zabbix agent items with the script, for example:
    -   `system.run[myscript.sh]`
    -   `system.run[myscript.sh,wait]`
    -   `system.run[myscript.sh,nowait]`

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

To control the `wait`/`nowait` parameter, you must set a different rule.
For example, you can allow only `system.run[myscript.sh,wait]` items, thus excluding other methods:

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

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

[comment]: # ({new-1965a7d7})
##### Securing allow/deny rules

This example shows how to secure overly permissive `AllowKey` or `DenyKey` rules.

Consider the following rules:

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

::: noteclassic
On Windows, you must escape spaces in the path using a caret (`^`).
:::

These rules contain a wildcard (`*`), which can be misused:

-   The `test.bat` script can be executed with any arguments, including unintended ones.
-   The `vfs.file.*` pattern matches only item keys without parameters; however, all [`vfs.file`](/manual/config/items/itemtypes/zabbix_agent#virtual-file-system-data) items require parameters.
-   The `system.cpu.load[*]` pattern matches only item keys with parameters; however [`system.cpu.load`](/manual/config/items/itemtypes/zabbix_agent#system-data) items do not require parameters.

To secure these rules, explicitly allow executing `test.bat` only with specific arguments, and deny correct item key patterns; for example:

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

You can test the rules by running the following commands, which will return `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]: # ({/new-1965a7d7})

[comment]: # ({c560adaf-16bccaff})

#### Exemples de motif

|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\[\]<br>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,\]<br>vfs.file.contents\[/etc/passwd,utf8\]|vfs.file.contents\[/etc/passwd\]<br>vfs.file.contents\[/var/log/zabbix\_server.log\]<br>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,\]<br>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,\]<br>vfs.file.contents\[/etc/passwd, utf8\]|vfs.file.contents\[/etc/passwd\]<br>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\]<br>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,\]<br>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<br>vfs.file.size|vfs.file.contents\[\]<br>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\[\]<br>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<br>vfs..contents|vfs.contents|

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