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.runsono disabilitati per impostazione predefinita (anche quandoDenyKeyè vuoto), come seDenyKey=system.run[*]fosse impostato come ultima regola. Per questo motivo, puoi consentire specifici itemsystem.runsenza negare esplicitamente altri itemsystem.run. -
Un item specificato in
AllowKeydeve essere specificato anche inDenyKey(eccetto gli itemsystem.run); in caso contrario, Zabbix agent non si avvierà. -
Se possibile, usa
AllowKeyper 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 regoleDenyKey. -
La configurazione di
AllowKeyeDenyKeynon influisce sui parametri agentHostnameItem,HostMetadataItemoHostInterfaceItem. -
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.
- Il parametro della riga di comando
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.runcon 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.batpuò essere eseguito con qualsiasi argomento, inclusi quelli non previsti. - Il pattern
vfs.file.*corrisponde solo alle chiavi item senza parametri; tuttavia, tutti gli itemvfs.filerichiedono parametri. - Il pattern
system.cpu.load[*]corrisponde solo alle chiavi item con parametri; tuttavia gli itemsystem.cpu.loadnon 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[*evfs.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.sizevfs.file.contentsNon corrisponde: vfs.file.contents[]vfs.file.size[/var/log/app.log] |
vfs.*.contents |
La chiave inizia con vfs.La chiave termina con .contentsNessun parametro |
Corrisponde: vfs..contentsvfs.mount.point.file.contentsNon corrisponde: vfs.contentsvfs.file.contents[] |
vfs.file.*[*] |
La chiave inizia con vfs.file.Qualsiasi parametro o parametri vuoti |
Corrispondevfs.file.get.custom[]vfs.file.size[/var/log/app.log, utf8]Non corrisponde: vfs.file.get.custom |
vfs.file.contents |
La chiave è vfs.file.contentsNessun parametro |
Corrisponde:vfs.file.contentsNon 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.contentsQualsiasi 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.contentsIl primo parametro è /etc/passwdQualsiasi 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.contentsIl primo parametro include passwdNessun 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.contentsIl primo parametro include passwdQualsiasi 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.contentsIl primo parametro è /etc/passwdIl secondo parametro è utf8 |
Corrisponde:vfs.file.contents[/etc/passwd,utf8]Non corrisponde: vfs.file.contents[/etc/passwd,]vfs.file.contents[/etc/passwd,utf16] |