12 Limitazione dei controlli degli agenti

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

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.

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

Note importanti

  • Tutti gli item system.run sono disabilitati per impostazione predefinita (anche quando DenyKey è vuoto), come se DenyKey=system.run[*] fosse impostato come ultima regola. 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) di Zabbix agent non mostrerà le chiavi degli item negati.
    • Il parametro della riga di comando --test (-t) 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 negati.

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:

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:

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.

Esempi

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

Consentire controlli e comandi specifici

Consentire solo due controlli item vfs.file e due comandi 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.*[*]

L'impostazione DenyKey=system.run[*] non è necessaria, perché tutti gli altri comandi system.run sono negati per impostazione predefinita.

Consentire gli script

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

  • Script globali 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 (questo metodo utilizza sempre la chiave system.run[myscript.sh,nowait])
  • item Zabbix agent system.run con lo script, ad esempio:
    • system.run[myscript.sh]
    • system.run[myscript.sh,wait]
    • system.run[myscript.sh,nowait]
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:

AllowKey=system.run[myscript.sh,wait]
Protezione delle regole allow/deny

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

Considerare le seguenti regole:

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

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 richiedono parametri.
  • Il pattern system.cpu.load[*] corrisponde solo alle chiavi item con parametri; tuttavia gli item 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:

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.

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]
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.
Nessun parametro
Corrisponde:
vfs.file.size
vfs.file.contents

Non corrisponde:
vfs.file.contents[]
vfs.file.size[/var/log/app.log]
vfs.*.contents La chiave inizia con vfs.
La chiave termina con .contents
Nessun parametro
Corrisponde:
vfs..contents
vfs.mount.point.file.contents

Non corrisponde:
vfs.contents
vfs.file.contents[]
vfs.file.*[*] La chiave inizia con vfs.file.
Qualsiasi parametro o parametri vuoti
Corrisponde
vfs.file.get.custom[]
vfs.file.size[/var/log/app.log, utf8]

Non corrisponde:
vfs.file.get.custom
vfs.file.contents La chiave è vfs.file.contents
Nessun parametro
Corrisponde:
vfs.file.contents

Non corrisponde:
vfs.file.contents[/etc/passwd]
vfs.file.contents[] La chiave è vfs.file.contents[]
Parametri vuoti
Corrisponde:
vfs.file.contents[]

Non corrisponde:
vfs.file.contents
vfs.file.contents[*] La chiave è vfs.file.contents
Qualsiasi parametro o parametri vuoti
Corrisponde:
vfs.file.contents[/path/to/file]

Non corrisponde:
vfs.file.contents
vfs.file.contents[/etc/passwd,*] La chiave è vfs.file.contents
Il primo parametro è /etc/passwd
Qualsiasi secondo parametro o secondo parametro vuoto
Corrisponde:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

Non corrisponde:
vfs.file.contents[]
vfs.file.contents[/etc/passwd]
vfs.file.contents[*passwd*] La chiave è vfs.file.contents
Il primo parametro include passwd
Nessun secondo parametro
Corrisponde:
vfs.file.contents[/etc/passwd]

Non corrisponde:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]
vfs.file.contents[*passwd*,*] La chiave è vfs.file.contents
Il primo parametro include passwd
Qualsiasi secondo parametro o secondo parametro vuoto
Corrisponde:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf8]

Non corrisponde:
vfs.file.contents[/etc/passwd]
vfs.file.contents[/tmp/test]
vfs.file.contents[/etc/passwd,utf8] La chiave è vfs.file.contents
Il primo parametro è /etc/passwd
Il secondo parametro è utf8
Corrisponde:
vfs.file.contents[/etc/passwd,utf8]

Non corrisponde:
vfs.file.contents[/etc/passwd,]
vfs.file.contents[/etc/passwd,utf16]