[comment]: # translation:outdated

[comment]: # ({5024b934-780b1aa2})
# 12 Limitazione dei controlli degli agenti

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

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

È possibile controllare quali chiavi item Zabbix agent o agent 2 è autorizzato o negato a utilizzare durante l'esecuzione di controlli item, comandi remoti o script.

Per farlo, utilizzare questi parametri di [configurazione dell'agent](/manual/appendix/config/zabbix_agentd) per definire regole di autorizzazione/negazione:

-   `AllowKey=<pattern>`
-   `DenyKey=<pattern>`

Il `<pattern>` deve contenere una singola chiave item e supporta i caratteri jolly (`*`).
Il carattere jolly corrisponde a un numero qualsiasi di qualsiasi carattere nella sua posizione e può essere utilizzato per far corrispondere chiavi item o parametri (ad esempio, `vfs.file.*[*]`).

::: noteimportant
Per migliorare la sicurezza, si consiglia di utilizzare chiavi item esatte invece dei caratteri jolly.
Per i dettagli, vedere [Protezione delle regole di autorizzazione/negazione](#securing-allowdeny-rules).
:::

A differenza di altri parametri di configurazione dell'agent, è possibile specificare un numero illimitato di parametri `AllowKey` o `DenyKey`.

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

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

-   Tutti gli item [`system.run`](/manual/config/items/itemtypes/zabbix_agent/#system.run) sono disabilitati per impostazione predefinita (anche quando `DenyKey` è vuoto), come se `DenyKey=system.run[*]` fosse impostato come [ultima regola](#allowdeny-rule-order).
    Per questo motivo, puoi consentire specifici item `system.run` senza negare esplicitamente altri item `system.run`.

-   Un item specificato in `AllowKey` deve essere specificato anche in `DenyKey` (eccetto gli item `system.run`); in caso contrario, Zabbix agent **non si avvierà**.

-   Se possibile, usa `AllowKey` per consentire solo gli item richiesti e negare tutto il resto.
    Alcune chiavi possono essere sfruttate impropriamente per leggere file non previsti tramite path traversal (ad esempio, `vfs.file.contents["../../../../etc/passwd"]`), e le nuove versioni di Zabbix agent possono introdurre chiavi non coperte dalle tue regole `DenyKey`.

-   La configurazione di `AllowKey` e `DenyKey` non influisce sui parametri agent `HostnameItem`, `HostMetadataItem` o `HostInterfaceItem`.

-   Gli item negati diventano non supportati senza alcun suggerimento o messaggio di errore; ad esempio:
    -   Il parametro della riga di comando [`--print (-p)`](/manual/concepts/agent#options) di Zabbix agent non mostrerà le chiavi degli item negati.
    -   Il parametro della riga di comando [`--test (-t)`](/manual/concepts/agent#options) di Zabbix agent restituirà "Unsupported item key." per le chiavi degli item negati.
    -   Quando la registrazione è attivata (`LogRemoteCommands=1`), il file di log di Zabbix agent non registrerà i [comandi remoti](/manual/config/notifications/action/operation/remote_command) negati.

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

[comment]: # ({071aae59-66ec4bb8})
#### Ordine delle regole di autorizzazione/negazione

Puoi specificare un numero illimitato di regole `AllowKey` o `DenyKey`, anche se il loro ordine è importante.

-   Le regole vengono valutate una per una, dall'alto verso il basso.
-   Quando una chiave item corrisponde a una regola, viene autorizzata o negata e la valutazione delle regole si interrompe.

Ad esempio, durante la valutazione di `vfs.file.contents[/etc/passwd]`, le regole vengono elaborate come segue:

```default
AllowKey=vfs.file.contents[/tmp/app.log]    # Il pattern della chiave item non corrisponde; l'agent passa alla regola successiva.
AllowKey=vfs.file.contents[/etc/passwd]     # Il pattern della chiave item corrisponde; l'agent autorizza il controllo dell'item e interrompe la valutazione delle regole.
DenyKey=vfs.file.*[*]                       # L'agent ignora la regola, poiché la valutazione è già stata interrotta.
```

Il seguente ordine delle regole negherà il controllo dell'item:

```default
DenyKey=vfs.file.*[*]                       # Il pattern della chiave item corrisponde; l'agent nega il controllo dell'item e interrompe la valutazione delle regole.
AllowKey=vfs.file.contents[/etc/passwd]     # L'agent ignora la regola, poiché la valutazione è già stata interrotta.
AllowKey=vfs.file.contents[/tmp/app.log]    # L'agent ignora la regola, poiché la valutazione è già stata interrotta.
```

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

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

I seguenti esempi mostrano schemi di configurazione comuni per `AllowKey` e `DenyKey`.

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

[comment]: # ({0fd42e58-19895d10})
##### Consentire controlli e comandi specifici

Consentire solo due controlli item [`vfs.file`](/manual/config/items/itemtypes/zabbix_agent#vfs.file.cksum) e due comandi [`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
L'impostazione `DenyKey=system.run[*]` non è necessaria, perché tutti gli altri comandi `system.run` sono negati per impostazione predefinita.
:::

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

[comment]: # ({b0df3494-3cc5f239})
##### Consentire gli script

Consente a Zabbix agent di eseguire script sugli host tramite tutti i metodi disponibili:

-   [Script globali](/manual/web_interface/frontend_sections/alerts/scripts) che possono essere eseguiti nel frontend o tramite API (questo metodo utilizza sempre la chiave `system.run[myscript.sh]`)
-   Comandi remoti dalle [operazioni delle azioni](/manual/config/notifications/action/operation#operation-details) (questo metodo utilizza sempre la chiave `system.run[myscript.sh,nowait]`)
-   item Zabbix agent [`system.run`](/manual/config/items/itemtypes/zabbix_agent#system.run) con lo script, ad esempio:
    -   `system.run[myscript.sh]`
    -   `system.run[myscript.sh,wait]`
    -   `system.run[myscript.sh,nowait]`

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

Per controllare il parametro `wait`/`nowait`, è necessario impostare una regola diversa.
Ad esempio, è possibile consentire solo gli item `system.run[myscript.sh,wait]`, escludendo così gli altri metodi:

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

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

[comment]: # ({abfd7422-1965a7d7})
##### Protezione delle regole allow/deny

Questo esempio mostra come proteggere regole `AllowKey` o `DenyKey` eccessivamente permissive.

Considerare le seguenti regole:

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

::: noteclassic
In Windows, è necessario eseguire l'escape degli spazi nel percorso usando un accento circonflesso (`^`).
:::

Queste regole contengono un carattere jolly (`*`), che può essere usato in modo improprio:

-   Lo script `test.bat` può essere eseguito con qualsiasi argomento, inclusi quelli non previsti.
-   Il pattern `vfs.file.*` corrisponde solo alle chiavi item senza parametri; tuttavia, tutti gli item [`vfs.file`](/manual/config/items/itemtypes/zabbix_agent#vfs.file.cksum) richiedono parametri.
-   Il pattern `system.cpu.load[*]` corrisponde solo alle chiavi item con parametri; tuttavia gli item [`system.cpu.load`](/manual/config/items/itemtypes/zabbix_agent#system.cpu.load) non richiedono parametri.

Per proteggere queste regole, consentire esplicitamente l'esecuzione di `test.bat` solo con argomenti specifici e negare i pattern corretti delle chiavi item; per esempio:

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

È possibile testare le regole eseguendo i seguenti comandi, che restituiranno `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})
##### Esempi di pattern

La tabella seguente mostra come vengono confrontati i pattern delle chiavi degli item:

-   Una chiave corrisponde al pattern solo se soddisfa **tutte** le condizioni nella colonna *Corrisponde*.
-   I parametri devono essere completamente racchiusi tra parentesi quadre (ad esempio, `vfs.file.contents[*` e `vfs.file.contents*utf8]` sono pattern non validi).

|Pattern|Corrisponde|Esempi|
|--|----|----|
|`*`|Qualsiasi chiave con o senza parametri| |
|`vfs.file.*`|La chiave inizia con `vfs.file.`<br>Nessun parametro|Corrisponde:<br>`vfs.file.size`<br>`vfs.file.contents`<br><br>Non corrisponde:<br>`vfs.file.contents[]`<br>`vfs.file.size[/var/log/app.log]`|
|`vfs.*.contents`|La chiave inizia con `vfs.`<br>La chiave termina con `.contents`<br>Nessun parametro|Corrisponde: <br>`vfs..contents`<br>`vfs.mount.point.file.contents`<br><br>Non corrisponde:<br>`vfs.contents`<br>`vfs.file.contents[]`|
|`vfs.file.*[*]`|La chiave inizia con `vfs.file.`<br>Qualsiasi parametro o parametri vuoti|Corrisponde<br>`vfs.file.get.custom[]`<br>`vfs.file.size[/var/log/app.log, utf8]`<br><br>Non corrisponde:<br>`vfs.file.get.custom`|
|`vfs.file.contents`|La chiave è `vfs.file.contents`<br>Nessun parametro|Corrisponde:<br>`vfs.file.contents`<br><br>Non corrisponde:<br>`vfs.file.contents[/etc/passwd]`|
|`vfs.file.contents[]`|La chiave è `vfs.file.contents[]`<br>Parametri vuoti|Corrisponde:<br>`vfs.file.contents[]`<br><br>Non corrisponde:<br>`vfs.file.contents`|
|`vfs.file.contents[*]`|La chiave è `vfs.file.contents`<br>Qualsiasi parametro o parametri vuoti|Corrisponde:<br>`vfs.file.contents[/path/to/file]`<br><br>Non corrisponde:<br>`vfs.file.contents`|
|`vfs.file.contents[/etc/passwd,*]`|La chiave è `vfs.file.contents`<br>Il primo parametro è `/etc/passwd`<br>Qualsiasi secondo parametro o secondo parametro vuoto|Corrisponde:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>Non corrisponde:<br>`vfs.file.contents[]`<br>`vfs.file.contents[/etc/passwd]`|
|`vfs.file.contents[*passwd*]`|La chiave è `vfs.file.contents`<br>Il primo parametro include `passwd`<br>Nessun secondo parametro|Corrisponde:<br>`vfs.file.contents[/etc/passwd]`<br><br>Non corrisponde:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`|
|`vfs.file.contents[*passwd*,*]`|La chiave è `vfs.file.contents`<br>Il primo parametro include `passwd`<br>Qualsiasi secondo parametro o secondo parametro vuoto|Corrisponde:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>Non corrisponde:<br>`vfs.file.contents[/etc/passwd]`<br>`vfs.file.contents[/tmp/test]`|
|`vfs.file.contents[/etc/passwd,utf8]`|La chiave è `vfs.file.contents`<br>Il primo parametro è `/etc/passwd`<br>Il secondo parametro è `utf8`|Corrisponde:<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>Non corrisponde:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf16]`|

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