[comment]: # translation:outdated

[comment]: # ({930fae3b-930fae3b})
# 13 Kerberos konfigurēšana ar Zabbix

[comment]: # ({/930fae3b-930fae3b})

[comment]: # ({bfbefd40-5be9f534})
#### Pārskats

Kerberos autentifikāciju var izmantot tīmekļa uzraudzībā un HTTP vienumos Zabbix.

Šajā lapā ir aprakstīts piemērs, kā konfigurēt Kerberos Zabbix serverim, lai Debian/Ubuntu vidē veiktu `www.example.com` tīmekļa uzraudzību, izmantojot Kerberos principālu Zabbix procesam.

[comment]: # ({/bfbefd40-5be9f534})

[comment]: # ({e94370cd-edb96e72})
#### Konfigurācija

1\. Instalējiet KDC un klienta utilītas:

```bash
sudo apt update
sudo apt install krb5-kdc krb5-admin-server krb5-user
```

Pakotņu iestatīšanas laikā atbildiet uz uzvednēm, piemēram:

```default
Default Kerberos version 5 realm: EXAMPLE.COM
Kerberos servers for your realm: localhost (or your FQDN)
Administrative server for your Kerberos realm: localhost (or your FQDN)
```

2\. Piesaistiet saprotamu resursdatora nosaukumu (neobligāti, lokālai testēšanai).

Rediģējiet /etc/hosts un pievienojiet ierakstu savam DC un tīmekļa serverim, ja jums nav DNS:

```bash
sudo vi /etc/hosts
```

Piemēra rinda, ko varat pievienot:

```ini
192.168.1.100  dc01.example.com dc01
```

3\. Konfigurējiet Kerberos klientu un KDC realm:

```bash
sudo vi /etc/krb5.conf
```

Piemēra iestatījumi:

```ini
[libdefaults]
    default_realm = EXAMPLE.COM
    dns_lookup_realm = false
    dns_lookup_kdc = false
    rdns = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true

[realms]
    EXAMPLE.COM = {
        kdc = dc01.example.com
        admin_server = dc01.example.com
    }

[domain_realm]
    .example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM
```

Ja plānojat izmantot `.localdomain` vai citus nepubliskus nosaukumus, pievienojiet skaidras domain→realm atbilstības, lai hostname→realm kartēšana darbotos.
Neatbilstības šeit izraisa `Server not found in Kerberos database` kļūdas.

4\. Inicializējiet Kerberos datubāzi (vienreiz, KDC hostā).
Kad tiek prasīts, iestatiet drošu galveno paroli:

```bash
sudo krb5_newrealm
```

5\. Izveidojiet `HTTP/host.fqdn@REALM` principal, izmantojot precīzu resursdatora nosaukumu, ko klienti izmantos; ieteicams izmantot mazos burtus (piemēram, `HTTP/web.example.com@EXAMPLE.COM`).
Lielo/mazo burtu vai nosaukuma neatbilstība izraisa `Server not found in Kerberos database`.

```bash
sudo kadmin.local
```

`kadmin.local` iekšpusē:

```bash
addprinc kerb-admin@EXAMPLE.COM     # administratīvais principal
addprinc -randkey HTTP/dc01.example.com@EXAMPLE.COM
ktadd -k /etc/apache2/http.keytab HTTP/dc01.example.com@EXAMPLE.COM
quit
```

Pārvietojiet keytab uz tīmekļa hostu (vai atstājiet lokāli, ja tā ir viena un tā pati mašīna) un iestatiet Apache izmantojamas atļaujas:

```bash
chown www-data:www-data /etc/apache2/http.keytab
chmod 600 /etc/apache2/http.keytab
# verify
sudo -u www-data -k /etc/apache2/http.keytab
```

6\. Instalējiet un iespējojiet Apache GSSAPI moduli:

```bash
sudo apt install libapache2-mod-auth-gssapi
sudo a2enmod auth_gssapi
sudo a2enmod headers
sudo systemctl restart apache2
```

:::noteimportant
Ne visas mod_auth_gssapi versijas atbalsta katru `Gssapi*` direktīvu.
Ja Apache neizdodas palaist ar `Invalid command 'GssapiCredStore'`, noņemiet neatbalstīto direktīvu vai jauniniet moduli.
:::

7\. Konfigurējiet VirtualHost (pielāgojiet `DocumentRoot` / ceļu uz savu Zabbix UI):

```bash
sudo vi /etc/apache2/sites-available/zabbix.conf
```

`zabbix.conf` iekšpusē:

```apache
<VirtualHost *:80>
    ServerName dc01.example.com
    DocumentRoot /usr/share/zabbix/ui
    <Directory /usr/share/zabbix/ui>
        Options FollowSymLinks
        AllowOverride None
        Require all granted
        AuthType GSSAPI
        AuthName "Kerberos Login"
        GssapiCredStore keytab:/etc/apache2/http.keytab
        GssapiLocalName On
        Require valid-user
    </Directory>
    RequestHeader set X-Remote-User %{REMOTE_USER}s env=REMOTE_USER
    RequestHeader unset Authorization
</VirtualHost>
```

Restartējiet Apache:

```bash
sudo systemctl restart apache2
```

8\. Iespējojiet/palaidiet KDC servisus un pārbaudiet klausīšanās portus (KDC hostā):

```bash
sudo systemctl enable --now krb5-kdc krb5-admin-server
ss -tnlp | grep :80    # or: sudo netstat -tnlp | grep :80
```

9\. Iegūstiet TGT testēšanai (palaidiet kā lietotājs, kurš izmantos biļeti).

Biļešu sarakstā jums vajadzētu redzēt `krbtgt/EXAMPLE.COM@EXAMPLE.COM`.
Palaidiet `kinit` kā tas pats OS lietotājs, kuram nepieciešama biļete (piemēram, `zabbix` tīmekļa pārbaudēm vai `www-data`/Apache interaktīviem pārlūka SSO testiem).
Citādam OS lietotājam izsniegtās biļetes nebūs redzamas, ja vien netiks pielāgoti `KRB5CCNAME` un atļaujas.

```bash
kinit kerb-admin@EXAMPLE.COM
klist
```

10\. Pārbaudiet SPNEGO apmaiņu ar curl (no klienta ar derīgu TGT).
`200 OK` (vai pāradresācija uz lietotni) norāda, ka SPNEGO izdevās:

```bash
curl -v --negotiate -u : http://dc01.example.com/
```

11\. Neobligāti, ja Zabbix lietotāja saskarnei jāpieņem ar HTTP autentificētas pieteikšanās, iespējojiet HTTP autentifikāciju Zabbix lietotāja saskarnē (ui/conf/zabbix.conf.php):

```php
$ALLOW_HTTP_AUTH = true;
```

Tīmekļa UI atveriet *Users* > *Authentication* un pārejiet uz cilni [*HTTP settings*](/manual/web_interface/frontend_sections/users/authentication/http).
Atzīmējiet izvēles rūtiņu *Enable HTTP authentication* un uznirstošajā logā noklikšķiniet uz *Ok*.
Nolaižamajā sarakstā *Default login form* atlasiet "HTTP login form".
Izlemiet, vai *Case-sensitive login* atbilst jūsu direktorija politikai.
Lai pabeigtu, noklikšķiniet uz pogas *Update*.

12\. Pārlūka konfigurācija (kā piemērs izmantots Firefox): iestatiet `network.negotiate-auth.trusted-uris` uz hostiem, kas veic Negotiate (`dc01.example.com`), lai pārlūks automātiski sūtītu Kerberos marķierus.

`about:config` iekšpusē:

```default
network.negotiate-auth.trusted-uris = dc01.example.com
```

Tagad, apmeklējot `http://dc01.example.com`, jums būtu jāielogojas Zabbix bez formas.

13\. Uzturiet atslēgas/biļetes aktuālas.
Noklusējuma Kerberos biļetes derīguma laiks ir aptuveni 10 stundas.
Pievienojiet cron/systemd taimeri, lai izvairītos no derīguma termiņa beigām:

```bash
#for the web service
kinit -kt /etc/apache2/http.keytab HTTP/dc01.example.com@EXAMPLE.COM
#for the monitoring user
kinit -kt /var/lib/zabbix/kerb.keytab kerb-admin@EXAMPLE.COM
```

14\. Uzturēšanas pārbaudes:

-   `klist -k /etc/apache2/http.keytab` — pārbaudiet, vai keytab satur servisa principal.
-   `sudo tail -f /var/log/apache2/error.log` — sekojiet GSSAPI kļūdām (`gss_acquire_cred[_from]() failed to get server creds` nozīmē keytab/atļauju problēmu vai trūkstošu principal).
-   `curl --negotiate`, kas atgriež 401/403, bieži nozīmē nepareizu principal, nav biļetes, host galvenes neatbilstību vai failu sistēmas atļauju problēmu; pārbaudiet žurnālus un `/etc/krb5.conf` domēna kartējumus.

[comment]: # ({/e94370cd-edb96e72})

[comment]: # ({32287407-notes})
#### Drošības un failu atļauju piezīmes

Keytab failiem jābūt lasāmiem tikai tam kontam, kuram tie ir nepieciešami.
Atļauju piemēri: `0400`, īpašnieks `zabbix:zabbix` — zabbix lietotāja keytab failam, vai `0440` un `root:www-data` — Apache keytab failam.

Izvairieties no ilgtermiņa atklāta teksta paroļu glabāšanas hostā.
Ja iespējams, izmantojiet keytab failus vai domēnam pievienotas datora galvenās identitātes.

Palaižot testus vai skriptus, kas iestata `KRB5CCNAME` vai kopē keytab failus, pēc darbības vēlreiz pārbaudiet īpašnieku un atļaujas — tīmekļa servera atteikums pieņemt akreditācijas datus bieži ir saistīts ar failu atļauju problēmu.

[comment]: # ({/32287407-notes})
