[comment]: # translation:outdated

[comment]: # ({5024b934-780b1aa2})
# 12 Ograniczanie kontroli agenta

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

[comment]: # ({40953ae4-9de656b2})
#### Przegląd

Możesz kontrolować, których kluczy pozycji agent Zabbix lub agent 2 może używać albo których nie może używać podczas wykonywania kontroli pozycji, zdalnych poleceń lub skryptów.

Aby to zrobić, użyj tych parametrów [konfiguracji agenta](/manual/appendix/config/zabbix_agentd) do zdefiniowania reguł zezwalania/odrzucania:

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

`<pattern>` musi zawierać pojedynczy klucz pozycji i obsługuje symbole wieloznaczne (`*`).
Symbol wieloznaczny dopasowuje dowolną liczbę dowolnych znaków w swoim położeniu i może być używany do dopasowywania kluczy pozycji lub parametrów (np. `vfs.file.*[*]`).

::: noteimportant
Aby zwiększyć bezpieczeństwo, zaleca się używanie dokładnych kluczy pozycji zamiast symboli wieloznacznych.
Szczegóły znajdują się w sekcji [Zabezpieczanie reguł zezwalania/odrzucania](#securing-allowdeny-rules).
:::

W przeciwieństwie do innych parametrów konfiguracji agenta możesz określić nieograniczoną liczbę parametrów `AllowKey` lub `DenyKey`.

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

[comment]: # ({6fa61f9f-3145c750})
#### Ważne uwagi

-   Wszystkie pozycje [`system.run`](/manual/config/items/itemtypes/zabbix_agent/#system.run) są domyślnie wyłączone (nawet gdy `DenyKey` jest puste), tak jakby `DenyKey=system.run[*]` było ustawione jako [ostatnia reguła](#allowdeny-rule-order).
    Z tego powodu możesz zezwolić na określone pozycje `system.run` bez jawnego zabraniania innych pozycji `system.run`.

-   Pozycja określona w `AllowKey` musi być również określona w `DenyKey` (z wyjątkiem pozycji `system.run`); w przeciwnym razie agent Zabbix **nie uruchomi się**.

-   Jeśli to możliwe, używaj `AllowKey`, aby zezwalać tylko na wymagane pozycje i zabraniać wszystkiego innego.
    Niektóre klucze mogą zostać wykorzystane do odczytu niezamierzonych plików poprzez przechodzenie po ścieżkach (np. `vfs.file.contents["../../../../etc/passwd"]`), a nowe wersje agenta Zabbix mogą wprowadzać klucze nieobjęte regułami `DenyKey`.

-   Konfiguracja `AllowKey` i `DenyKey` nie wpływa na parametry agenta `HostnameItem`, `HostMetadataItem` ani `HostInterfaceItem`.

-   Zabronione pozycje stają się nieobsługiwane bez żadnych wskazówek ani komunikatów o błędach; na przykład:
    -   Parametr wiersza poleceń agenta Zabbix [`--print (-p)`](/manual/concepts/agent#options) nie pokaże kluczy zabronionych pozycji.
    -   Parametr wiersza poleceń agenta Zabbix [`--test (-t)`](/manual/concepts/agent#options) zwróci „Unsupported item key.” dla kluczy zabronionych pozycji.
    -   Gdy rejestrowanie jest włączone (`LogRemoteCommands=1`), plik dziennika agenta Zabbix nie będzie rejestrować zabronionych [zdalnych poleceń](/manual/config/notifications/action/operation/remote_command).

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

[comment]: # ({071aae59-66ec4bb8})
#### Kolejność reguł zezwalania/odmawiania

Możesz określić nieograniczoną liczbę reguł `AllowKey` lub `DenyKey`, jednak ich kolejność ma znaczenie.

-   Reguły są oceniane jedna po drugiej, od góry do dołu.
-   Gdy klucz pozycji pasuje do reguły, zostaje odpowiednio dozwolony lub zabroniony, a ocena reguł zostaje zatrzymana.

Na przykład podczas oceny `vfs.file.contents[/etc/passwd]` reguły są przetwarzane w następujący sposób:

```default
AllowKey=vfs.file.contents[/tmp/app.log]    # Wzorzec klucza pozycji nie pasuje, agent przechodzi do następnej reguły.
AllowKey=vfs.file.contents[/etc/passwd]     # Wzorzec klucza pozycji pasuje; agent zezwala na sprawdzenie pozycji i zatrzymuje ocenę reguł.
DenyKey=vfs.file.*[*]                       # Agent ignoruje regułę, ponieważ ocena została zatrzymana.
```

Poniższa kolejność reguł spowoduje odmowę sprawdzenia pozycji:

```default
DenyKey=vfs.file.*[*]                       # Wzorzec klucza pozycji pasuje; agent odmawia sprawdzenia pozycji i zatrzymuje ocenę reguł.
AllowKey=vfs.file.contents[/etc/passwd]     # Agent ignoruje regułę, ponieważ ocena została zatrzymana.
AllowKey=vfs.file.contents[/tmp/app.log]    # Agent ignoruje regułę, ponieważ ocena została zatrzymana.
```

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

[comment]: # ({cb10c569-253ad144})
#### Przykłady

Poniższe przykłady pokazują typowe wzorce konfiguracji dla `AllowKey` i `DenyKey`.

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

[comment]: # ({0fd42e58-19895d10})
##### Zezwalanie na określone kontrole i polecenia

Zezwól tylko na dwie kontrole pozycji [`vfs.file`](/manual/config/items/itemtypes/zabbix_agent#vfs.file.cksum) i dwa polecenia [`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
Ustawienie `DenyKey=system.run[*]` nie jest konieczne, ponieważ wszystkie pozostałe polecenia `system.run` są domyślnie zabronione.
:::

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

[comment]: # ({b0df3494-3cc5f239})
##### Zezwalanie na skrypty

Zezwól agentowi Zabbix na wykonywanie skryptów na hostach wszystkimi dostępnymi metodami:

-   [Skrypty globalne](/manual/web_interface/frontend_sections/alerts/scripts), które mogą być wykonywane we frontendzie lub przez API (ta metoda zawsze używa klucza `system.run[myscript.sh]`)
-   Zdalne polecenia z [operacji akcji](/manual/config/notifications/action/operation#operation-details) (ta metoda zawsze używa klucza `system.run[myscript.sh,nowait]`)
-   Pozycje agenta Zabbix [`system.run`](/manual/config/items/itemtypes/zabbix_agent#system.run) ze skryptem, na przykład:
    -   `system.run[myscript.sh]`
    -   `system.run[myscript.sh,wait]`
    -   `system.run[myscript.sh,nowait]`

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

Aby kontrolować parametr `wait`/`nowait`, należy ustawić inną regułę.
Na przykład można zezwolić tylko na pozycje `system.run[myscript.sh,wait]`, wykluczając w ten sposób inne metody:

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

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

[comment]: # ({abfd7422-1965a7d7})
##### Zabezpieczanie reguł allow/deny

Ten przykład pokazuje, jak zabezpieczyć zbyt liberalne reguły `AllowKey` lub `DenyKey`.

Rozważ następujące reguły:

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

::: noteclassic
W systemie Windows spacje w ścieżce należy poprzedzać znakiem daszka (`^`).
:::

Te reguły zawierają symbol wieloznaczny (`*`), który może zostać niewłaściwie wykorzystany:

-   Skrypt `test.bat` może zostać uruchomiony z dowolnymi argumentami, w tym niezamierzonymi.
-   Wzorzec `vfs.file.*` dopasowuje tylko klucze pozycji bez parametrów; jednak wszystkie pozycje [`vfs.file`](/manual/config/items/itemtypes/zabbix_agent#vfs.file.cksum) wymagają parametrów.
-   Wzorzec `system.cpu.load[*]` dopasowuje tylko klucze pozycji z parametrami; jednak pozycje [`system.cpu.load`](/manual/config/items/itemtypes/zabbix_agent#system.cpu.load) nie wymagają parametrów.

Aby zabezpieczyć te reguły, jawnie zezwól na wykonywanie `test.bat` tylko z określonymi argumentami oraz zabroń poprawnych wzorców kluczy pozycji; na przykład:

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

Możesz przetestować reguły, uruchamiając następujące polecenia, które zwrócą `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})
##### Przykłady wzorców

Poniższa tabela pokazuje, jak dopasowywane są wzorce kluczy pozycji:

-   Klucz pasuje do wzorca tylko wtedy, gdy spełnia **wszystkie** warunki w kolumnie *Dopasowania*.
-   Parametry muszą być w całości ujęte w nawiasy kwadratowe (np. `vfs.file.contents[*` i `vfs.file.contents*utf8]` są nieprawidłowymi wzorcami).

|Wzorzec|Dopasowania|Przykłady|
|--|----|----|
|`*`|Dowolny klucz z parametrami lub bez parametrów| |
|`vfs.file.*`|Klucz zaczyna się od `vfs.file.`<br>Brak parametrów|Pasuje:<br>`vfs.file.size`<br>`vfs.file.contents`<br><br>Nie pasuje:<br>`vfs.file.contents[]`<br>`vfs.file.size[/var/log/app.log]`|
|`vfs.*.contents`|Klucz zaczyna się od `vfs.`<br>Klucz kończy się na `.contents`<br>Brak parametrów|Pasuje: <br>`vfs..contents`<br>`vfs.mount.point.file.contents`<br><br>Nie pasuje:<br>`vfs.contents`<br>`vfs.file.contents[]`|
|`vfs.file.*[*]`|Klucz zaczyna się od `vfs.file.`<br>Dowolne lub puste parametry|Pasuje<br>`vfs.file.get.custom[]`<br>`vfs.file.size[/var/log/app.log, utf8]`<br><br>Nie pasuje:<br>`vfs.file.get.custom`|
|`vfs.file.contents`|Klucz to `vfs.file.contents`<br>Brak parametrów|Pasuje:<br>`vfs.file.contents`<br><br>Nie pasuje:<br>`vfs.file.contents[/etc/passwd]`|
|`vfs.file.contents[]`|Klucz to `vfs.file.contents[]`<br>Puste parametry|Pasuje:<br>`vfs.file.contents[]`<br><br>Nie pasuje:<br>`vfs.file.contents`|
|`vfs.file.contents[*]`|Klucz to `vfs.file.contents`<br>Dowolne lub puste parametry|Pasuje:<br>`vfs.file.contents[/path/to/file]`<br><br>Nie pasuje:<br>`vfs.file.contents`|
|`vfs.file.contents[/etc/passwd,*]`|Klucz to `vfs.file.contents`<br>Pierwszy parametr to `/etc/passwd`<br>Dowolny lub pusty drugi parametr|Pasuje:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>Nie pasuje:<br>`vfs.file.contents[]`<br>`vfs.file.contents[/etc/passwd]`|
|`vfs.file.contents[*passwd*]`|Klucz to `vfs.file.contents`<br>Pierwszy parametr zawiera `passwd`<br>Brak drugiego parametru|Pasuje:<br>`vfs.file.contents[/etc/passwd]`<br><br>Nie pasuje:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`|
|`vfs.file.contents[*passwd*,*]`|Klucz to `vfs.file.contents`<br>Pierwszy parametr zawiera `passwd`<br>Dowolny lub pusty drugi parametr|Pasuje:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>Nie pasuje:<br>`vfs.file.contents[/etc/passwd]`<br>`vfs.file.contents[/tmp/test]`|
|`vfs.file.contents[/etc/passwd,utf8]`|Klucz to `vfs.file.contents`<br>Pierwszy parametr to `/etc/passwd`<br>Drugi parametr to `utf8`|Pasuje:<br>`vfs.file.contents[/etc/passwd,utf8]`<br><br>Nie pasuje:<br>`vfs.file.contents[/etc/passwd,]`<br>`vfs.file.contents[/etc/passwd,utf16]`|

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