Overview

    To do that use a combination of two agent configuration parameters:

    • - which checks are allowed; <pattern> is specified using a wildcard (*) expression

    • DenyKey=<pattern> - which checks are denied; <pattern> is specified using a wildcard (*) expression

    Note that:

    • All system.run[*] items (remote commands, scripts) are disabled by default, even when no deny keys are specified;

    Therefore, to allow all remote commands, specify an AllowKey=system.run[*] parameter. (Before Zabbix 5.0.2, EnableRemoteCommands=1 is also required in the agent configuration.)

    To allow only some remote commands, create a whitelist of specific system.run[] commands. To disallow specific remote commands, add DenyKey parameters with system.run[] commands before the AllowKey=system.run[*] parameter.

    Important rules

    • A whitelist without a deny rule is only allowed for system.run[*] items. For all other items, AllowKey parameters are not allowed without a DenyKey parameter; in this case Zabbix agent will not start with only AllowKey parameters.

    • The order matters. The specified parameters are checked one by one according to their appearance order in the configuration file:

      • As soon as an item key matches an allow/deny rule, the item is either allowed or denied; and rule checking stops. So if an item matches both an allow rule and a deny rule, the result will depend on which rule comes first.

    • Unlimited numbers of AllowKey/DenyKey parameters is supported.

    • AllowKey, DenyKey rules do not affect HostnameItem, HostMetadataItem, HostInterfaceItem configuration parameters.

    • Key pattern is a wildcard expression where the wildcard (*) character matches any number of any characters in certain position. It might be used in both the key name and parameters.

    • If a specific item key is disallowed in the agent configuration, the item will be reported as unsupported (no hint is given as to the reason);

    • Zabbix agent with –print (-p) command line option will not show keys that are not allowed by configuration;

    • Denied remote commands will not be logged in the agent log (if LogRemoteCommands=1).

    Use cases

    Deny specific check
    • Blacklist a specific check with DenyKey parameter. Matching keys will be disallowed. All non-matching keys will be allowed, except system.run[] items.

    For example:

    A blacklist may not be a good choice, because a new Zabbix version may have new keys that are not explicitly restricted by the existing configuration. This could cause a security flaw.

    Deny specific command, allow others
    • Blacklist a specific command with DenyKey parameter. Whitelist all other commands, with the AllowKey parameter.
    Allow specific check, deny others
    • Whitelist specific checks with AllowKey parameters, deny others with DenyKey=*

    For example:

    Pattern examples

    system.run and AllowKey

    A hypothetical script like ‘myscript.sh’ may be executed on a host via Zabbix agent in several ways:

    1. As an item key in a passive or active check, for example:

    • system.run[myscript.sh]

    • system.run[myscript.sh.nowait]

    Here the user may add “wait”, “nowait” or omit the 2nd argument to use its default value in system.run[].

    2. As a global script (initiated by user in frontend or API).

    A user configures this script in AdministrationScripts, sets “Execute on: Zabbix agent” and puts “myscript.sh” into the script’s “Commands” input field. When invoked from frontend or API the Zabbix server sends to agent:

    • system.run[myscript.sh,wait] - up to Zabbix 5.0.4

    • system.run[myscript.sh] - since 5.0.5

    Here the user does not control the “wait”/“nowait” parameters.

    3. As a remote command from an action. The Zabbix server sends to agent:

    • system.run[myscript.sh,nowait]

    Here again the user does not control the “wait”/“nowait” parameters.

    What that means is if we set AllowKey like:

    then

    • system.run[myscript.sh] - will be allowed

    to the agent/agent2 parameters.