Kerberos

- Authentifizierungsprotokoll
- Client/Server-Modell
- gegenseitige Authentifizierung
- sicher gegen Netzwerkangriffe,
aber Server muss vertrauenswürdig sein - MIT vs. Heimdal (wir benutzen MIT)
- aktuell Protokoll Version 5 (seit ~2000)
Was ist Kerberos?
-
Principal: Akteur (User, Host oder Service)
- fabian@ZBLMATH.FIZ-KARLSRUHE.DE
- host/cohen.zblmath.fiz-karlsruhe.de@ZBLMATH...
- HTTP/fry.zblmath.fiz-karlsruhe.de@ZBMATH...
- postgres/cohen.zblmath.fiz-karlsruhe.de@ZBMATH...
- ...
- Ticket (User -> Service)
-
TGT = "ticket-granting ticket"
(berechtigt zum Bezug weiterer Tickets) - Credentials Cache (normalerweise /tmp/krb5cc_XXXXX)
- Keytab ("Host-Passwort", normalerweise /etc/krb5.keytab)
Wichtige Konzepte
-
kinit-- Ticket erhalten -
klist-- Tickets auflistenklist -c cachefileklist -kt keytab
-
kdestroy-- Tickets löschen -
krenew-- Ticket (periodisch) erneuernkrenew -k cachefilekrenew -K 60
-
k5start-- Ticket erhalten und periodisch erneuernk5start -K 60 -U -f keytab -S postgres -I cohen -k cachefile
Wichtige Kommandos
hilft bei allem, was libkrb5 benutzt
Debugging
$ export KRB5_TRACE=/path/to/logfile- Server antwortet schickt Challenge
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Negotiate - in Firefox muss die URI in der Config eingetragen sein
network.negotiate-auth.trusted-uris - bei uns: nur über Apache!
Kerberos für Webanwendungen
Vorhandenes Ticket verwenden
$ klist
Ticket cache: FILE:/tmp/krb5cc_20039
Default principal: fabian@ZBLMATH.FIZ-KARLSRUHE.DE
Valid starting Expires Service principal
28.08.2023 15:24:28 29.08.2023 15:24:26 krbtgt/ZBLMATH.FIZ-KARLSRUHE.DE@ZBLMATH.FIZ-KARLSRUHE.DE
renew until 26.11.2023 14:24:26
$ python3
>>> from sqlalchemy import create_engine
>>> create_engine("postgresql://matrix-slave/matrix2").execute(
... "SELECT * FROM math_documents LIMIT 1"
... ).fetchall()
[(7045840, datetime.datetime(2019, 4, 18, 11, 41, 56, 429139), 'serial_article', '', '2018', ...
$ klist
Ticket cache: FILE:/tmp/krb5cc_20039
Default principal: fabian@ZBLMATH.FIZ-KARLSRUHE.DE
Valid starting Expires Service principal
28.08.2023 15:24:28 29.08.2023 15:24:26 krbtgt/ZBLMATH.FIZ-KARLSRUHE.DE@ZBLMATH.FIZ-KARLSRUHE.DE
renew until 26.11.2023 14:24:26
28.08.2023 15:24:35 29.08.2023 15:24:26 postgres/neela.zblmath.fiz-karlsruhe.de@
renew until 26.11.2023 14:24:26benutzt vorhandenes Ticket aus $KRB5CCNAME
(oder $KRB5_KTNAME)
Kerberosticket selbst holen
- kpass benutzen
- benötigt keytab des Zielservice
- aber nur, wenn es wirklich nicht anders geht
- Passwort muss übers Netzwerk
- Code kann Fehler enthalten
- besser:
- Apache verifiziert Username/Passwort
- gibt Username an Applikation weiter
- Applikation benutzt ihren eigenen Principal
Kerberos
By fmux
Kerberos
- 91