Zum Inhalt springen

Kerberos Single Sign-On (SSO) in Znuny Docker

Kerberos SSO (Single Sign-On) ermöglicht eine nahtlose Anmeldung Ihrer Agenten über Active Directory, ohne dass Passwörter im Klartext übertragen werden. In einer Docker-basierten Znuny-Installation wird hierfür NGINX als Webproxy mit dem SPNEGO-Modul betrieben, das in einem separaten „builder“-Container kompiliert wird. Anschließend wird das dynamisch erzeugte Modul (ngx_http_auth_spnego_module.so) in den eigentlichen NGINX-Container übernommen und die Standard-Konfiguration durch eine Kerberos-fähige ersetzt :contentReference[oaicite:0]{index="0"}.
Damit folgen wir dem bewährten Vorgehen im offiziellen Znuny Docker-Projekt, das eine klare Trennung zwischen Build- und Laufzeit-Stages realisiert .

In diesem Artikel erhalten Sie:

  • Einen umfassenden Überblick über Unterschiede zwischen Znuny und Znuny im Kontext von Kerberos SSO.
  • Schritt-für-Schritt-Anleitung von der AD-Vorbereitung über Keytab-Erstellung bis zur Docker-Konfiguration.
  • Tipps zu Debugging, Browser-Setup und Best Practices für verschiedene Znuny-Versionen.

Obwohl Znuny und Znuny funktional sehr ähnlich sind (beide stammen aus dem ursprünglichen OTRS-Projekt), gibt es im Kerberos-Kontext folgende Feinanpassungen:

  • Konfigurationspfade: Znuny nutzt standardmäßig /opt/otobo-docker/nginx-conf/krb5.conf, Znuny setzt in der Regel auf /opt/znuny/nginx-conf/krb5.conf.
  • Template-Dateien: Die NGINX-Templates unterscheiden sich leicht in Namen und Platzhalter-Syntax; Znuny liefert eine Datei otobo_nginx-kerberos.conf.template, Znuny eine ähnlich benannte znuny_nginx-kerberos.conf.template.
  • Versionierung: Znuny 11.x bringt erweiterte SSO-Parameter („KerberosAdminServer“, „KerberosDefaultDomain“), die in Znuny 6.x noch fehlen.
  1. Active Directory mit Kerberos (Realm und KDC bereits eingerichtet).
  2. Ein Znuny–Docker-Setup gemäß Offizieller Installation mit Docker :contentReference[oaicite:2]{index="2"}.
  3. DNS-Einträge:
    • Ein A-Record für Ihre Znuny-FQDN (kein CNAME!), z. B. Znuny.example.com → 192.0.2.10.
    • Reverse-Lookup für den Hostnamen, damit Kerberos SPN-Auflösungen funktionieren.

Legen Sie in Ihrem AD einen dedizierten Service-Account an, bspw. HTTP/Znuny.example.com (UserPrincipalName). Beachten Sie:

  • Großschreibung bei HTTP/; Kerberos erwartet exakt diesen Präfix :contentReference[oaicite:3]{index="3"}.
  • Keine Sonderzeichen im Passwort (z. B. &).

Melden Sie sich auf einem DC mit Admin-Rechten an und nutzen Sie ktpass.exe: `ngx_http_auth_spnego_module.so“

  • -princ: SPN mit Realm in Großbuchstaben.
  • -mapUser: SAM-Account-Name (pre-W2K), z. B. otobo-svc (doc.Znuny.de).
  • -out: Pfad zur Keytab auf dem DC.

Verschieben Sie anschließend die Keytab in den Docker-Host:

/opt/otobo-docker/nginx-conf/krb5.conf

Das offizielle Dockerfile nutzt einen separaten Builder mit den nötigen Dev-Paketen:

/opt/znuny/nginx-conf/krb5.conf

Damit wird das SPNEGO-Modul kompatibel zu Ihrem NGINX-Release kompiliert (extras.getpagespeed.com).

otobo_nginx-kerberos.conf.template

  • Module-Load: load_module in Zeile 4 einfügen.
  • Envsubst-Scripts generieren /etc/krb5.conf aus Templatedaten.

znuny_nginx-kerberos.conf.template

Erstellen Sie docker-compose/otobo-nginx-custom-config.yml:

Znuny.example.com → 192.0.2.10

Aktivieren Sie im Haupt-.env:

HTTP/Znuny.example.com

  1. Sichern Sie Ihre alte /opt/otobo-docker/.env:

    HTTP/

  2. Fügen Sie die Kerberos-Variablen hinzu:

    &

  3. SSL-Zertifikate und DB-Passwörter aus Ihrer alten .env.bak übernehmen.

Starten Sie dann mit:

ktpass.exe :contentReference[oaicite:6]{index="6"}.

Kommentieren Sie LDAP/DB-Auth aus und fügen Sie in Ihrer Kernel/Config.pm hinzu: `-princ“

Damit wird REMOTE_USER korrekt als Login interpretiert (doc.Znuny.de).

  • Systemkonfiguration:

    • Customer::AuthModule auf HTTPBasicAuth setzen.
    • AuthModule::HTTPBasicAuth::ReplaceRegExp übernehmen.
  • Kernel/Config -> Deploy ausführen.

Damit SPNEGO funktioniert, muss Ihr Browser den Host als trusted akzeptieren:

  • „Internetoptionen“ → SicherheitLokale Intranet-SitesSites
  • Domain https://otobo.example.com hinzufügen und „Integrierte Windows-Authentifizierung“ aktivieren (doc.Znuny.de).
  • about:config in die Adresszeile eingeben.
  • network.negotiate-auth.trusted-uris = https://otobo.example.com
  • network.negotiate-auth.delegation-uris = https://otobo.example.com
  1. NGINX-Logs prüfen

    -mapUser

  2. In den Container einsteigen

    otobo-svc

  3. SPN-Token holen

    -out

  4. Keytab testen

    load_module

    Fehler KDC cannot fulfill request → DNS/SPN falsch (plugins.miniorange.com).

  • Eigener Keytab: Niemals das LDAP-Sync-Service-Konto wiederverwenden, vermeiden Sie Passwort-Kollisionen .
  • Least Privilege: Vergabe nur minimal nötiger AD-Rechte für das SSO-Konto.
  • Keytab-Rotation: Regelmäßiges Erneuern des Keytab alle 90 Tage.
  • TLS für KDC: Falls möglich, aktivieren Sie ldaps:// oder GSSAPI über TLS.
  • Monitoring: Überwachen Sie mit Tools wie klist und kvno automatisiert die Kerberos-Tickets.

Mit dieser umfassenden Anleitung ist Ihre Znuny Docker-Instanz optimal für Kerberos SSO vorbereitet – sichere, wartbare und skalierbare Authentifizierung inklusive!


Quellen: