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.
Stephan
Hallo,
ich habe mich mal an den Anleitungen hierzu versucht.
Leider scheint der Workarround in Version 2.6 nicht mehr zu funktionieren?!
Ist hierzu etwas bekannt?
Und wo könnte ih nachschauen, was an Zammad übergeben wird?
Grüße Stephan
schman
Hallo Stephan, sorry für die späte Antwort. Ich hänge gerade am selben Problem, sobald ich mehr weiß werde ich es hier updaten.
Ich habe das ganze direkt in der sessions_controller.rb (create_sso Funktion) ausprobiert und einfach per logger(ENV_HTTP_USER) ausgelesen, dann konnte ich im production.log prüfen was übergeben wird. Alternativ kannst du davor ja eine eigene Datei schreiben lassen, dann findest du das ganze schneller.
Philipp
Hallo,
hast du eine Ahnung, wie es mit der akutellen 3.2.x Version funktioniert?
Vielen Dank und Lg
schman
Hallo Phillip.
Wir haben das ganze nun mit SAML umgesetzt (Stichwort ADFS). Ich werde, wenn ich dazu komme, das ganze nochmals hier dokumentieren.