Wir verwenden nun schon einige Monate Zammad als unser Help Desksystem. Unsere Mitarbeiter haben alle einen Zugang zum System. Damit dies funktioniert wurde die LDAP Synchronisation eingerichtet. Somit sind unsere 450 Mitarbeiter im System. Diese können sich nun „bequem“ per Windows User und Passwort authentifizieren.

Es geht allerdings noch bequemer! Hier erläutere ich kurz wie wir es geschafft haben Single-Sign-On für Zammad einzurichten.

Einleitung

Zammad bringt von Haus aus SSO mit, leider war es uns nicht möglich ohne Probleme SSO einzurichten. Wie Single-Sign-On eingerichtet wird habe ich in einem früheren Beitrag beschrieben. Es gibt auf GitHub ein Ticket welches die Konfiguration von Zammad mit Single-Sign-On beschreibt, allerdings konnte ich (und auch andere) dies nicht zum laufen bringen.

REMOTE_USER mit Zammad bekannt machen.

Im GitHub Ticket wird beschrieben, dass der REMOTE_USER (Apache2 Variable) nicht an Zammad übergeben wird. Ohne diesen klappt der Login nicht, da Zammad nicht weiß wer sich gerne authentifizieren möchte. Deshalb „mussten“ wir in der app/controllers/sessions_controller.rb folgendes in Zeile 173 hinzufügen.

ENV['HTTP_REMOTE_USER']=request.env['HTTP_REMOTE_USER']

Somit kann Zammad mit dem REMOTE_USER was anfangen. Nach der Änderung muss Zammad durchgestartet werden

sudo service zammad restart

Variable REMOTE_USER anpassen

Beim Einrichten von LDAP in Zammad wird standardmäßig der SAMACCOUNTNAME mit dem login verknüpft. Somit kann der Benutzer sich über den Windows Account anmelden. Wenn man sich die Variable ansieht, dann fählt einem sofort auf das der REALM (Kerberos) angehängt wird. Ist der Benutzer z.B. schman sieht der Inhalt wie folgt aus:

schman@DOMAIN.AT

Durch den LDAP Abgleich ist allerdings der Login in der Zammad Datenbank lediglich schman, somit passt das ganze wieder nicht zusammen und der Login über SSO klappt weiterhin nicht. Um das ganze zu fixen kann in der vHost Konfiguration folgender Parameter gesetzt werden.

RequestHeader edit REMOTE_USER "@DOMAIN.AT" ""

Somit wird die Variable gekürzt und stimmt nun auch mit dem Zammad Benutzer zusammen. 

vHost Konfiguration

Die wesentliche SSO Konfiguration sieht nun folgendermaßen aus:

# configure SSO
  <IfModule !mod_auth_kerb.c>
    LoadModule auth_kerb_module /usr/lib/apache2/modules/mod_auth_kerb.so
  </IfModule>

  LimitRequestFieldSize 32768
  <Location "/auth/sso">
    <RequireAll>
      Require all granted
      Require valid-user
    </RequireAll>

    AuthType Kerberos
    AuthName "SSO für Zammad"
    KrbServiceName HTTP/zammad.domain.at@DOMAIN.AT
    KrbMethodNegotiate on
    KrbMethodK5Passwd on
    KrbLocalUserMapping off
    KrbSaveCredentials on
    KrbVerifyKDC on

    Krb5Keytab /etc/krb5.keytab
    KrbAuthRealm DOMAIN.AT
    RequestHeader edit REMOTE_USER "@DOMAIN.AT" ""
  </Location>

Ob es sich hierbei nun um die optimale Lösung handelt wage ich zu bezweifeln, aber es funktioniert. 

Falls jemand andere Ideen bzw. Lösungsvorschläge hat würde ich mich sehr über Kommentare freuen.