Zarafa WebApp Benutzer mittels LDAP begrenzen (ohne Code Modifikation)

Als ich im Februar diesen Jahres den Artikel Z-Push Benutzer mittels LDAP begrenzen (ohne Code Modifikation) veröffentlich habe, wurde ich gefragt ob ein ähnliches vorgehen auch für die Zarafa WebApp funktioniert. Nachdem sich die Mechanismus nicht eins zu eins übernehmen ließ (mittels der vorgeschalteten Authentifizierung wird der Benutzer nicht direkt in der WebApp angemeldet, sondern muss sich noch ein weiteres mal Einloggen), habe ich dies aber leider vorerst verneinen müssen.

Die Lösung dieses Problems ist aber im Nachhinein betrachtet denkbar simpel: Die WebApp muss lediglich so konfiguriert werden, dass Sie den Anmeldeinformationen des Webservers vertraut. Und exakt dieser Mechanismus befindet sich  Single Sign-On Umgebungen bereits im Code der WebApp (und auch in dem des WebAccess).

Bevor die WebApp Konfiguration aber angepasst werden kann, sollte zuerst sichergestellt werden, dass die Anmeldung über den Apache einwandfrei funktioniert. Hierfür muss wie bereits beschrieben mod_authnz_ldap aktiviert und anschließend der vHost um die Authentifizierung erweitert werden.

Anschließend muss wie im Zarafa Handbuch beschrieben ein Clientzertifikat für die WebApp generiert werden. Dieses wird benötigt um die WebApp gezielt mit Adminprivilegien laufen lassen zu können. Die Alternative hierzu ist den kompletten Webserver als Admin laufen zu lassen, dies ist aber generell nicht zu empfehlen falls weitere Webanwendungen auf dem selben System aktiv sind.

Im letzten Schritt wird nun die config.php angepasst. Zuerst muss hier der “DEFAULT_SERVER” auf den https Port des lokalen Zarafa angepasst werden.  Anschließend wird in “SSLCERT_FILE” und “SSLCERT_PASS” das zuvor generierte SSL Clientzertifikat hinterlegt.

Mit diesen Änderungen erhält der Nutzer nun beim Öffnen von /webapp nun einen Apache Anmeldedialog an dem er sich anmelden kann. Sofern die Anmeldung am Webserver geklappt hat ist der Benutzer direkt in seinem Postfach.

Follow up zu “Synology NAS bei Nichtgebrauch herunterfahren”

Vor einigen Tagen erhielt ich ein Pingback von Nerdoskop zu meinem Synology Skript. Um mein Skript etwas nutzerfreundlicher zu machen hat Saarnu eine kleine Weboberfläche geschrieben um zum einen das Logfile anzuzeigen und zum anderen es einfacher zu machen ein Stopfile zu setzen bzw. zu löschen.

Die Idee das Stopfile einfach über den Aufruf einer URL setzen zu können hat mir sehr gut gefallen, daher habe ich für diesen Zweck ebenfalls ein kleines PHP Skript erstellt, welches einfach im “web”-Ordner des NAS platziert werden kann.

Mit Hilfe dieses Skript reicht nun ein Aufruf von http://nas/shutdown_on_not_used.php um das Stopfile zu setzen und http://nas/shutdown_on_not_used.php?shutdown um selbiges wieder zu entfernen.

Nach erfolgreicher Ausführung leitet das Skript in diesem Falle auf http://nas/ weiter. Sollte hier eine andere Adresse (z.B. die DSM Oberfläche oder Maraschino) gewünscht sein, kann das “/” einfach durch die gewünschte Adresse ersetzt werden.

Z-Push Benutzer mittels LDAP begrenzen (ohne Code Modifikation)

Mit Zarafa 7.1 wurde das LDAP Attribut  “zarafaenabledfeatures” eingeführt, welches mit wenigen Handgriffen ebenfalls zur Steuerung von Z-Push Accounts genutzt werden kann. Der Vorteil an dem im folgenden aufgezeigten Weg liegt darin, dass hierfür keine Modifikationen am Z-Push Code vorgenommen werden müssen und somit zukünftige Updates erleichtert werden.

“zarafaenabledfeatures” ist ein Freitextfeld welches einen beliebigen String (wie eben “imap” oder “pop3″) aufnehmen kann. Dies erlaubt ohne großen Aufwand weitere Filtermerkmale wie z.B. “z-push” zu definieren und bei entsprechenden Nutzern zu hinterlegen.

Sobald dieser Wert für alle gewünschten Nutzer hinterlegt ist, können wir mit der Modifikation der Apache Konfiguration fortfahren.

Bei direktem Aufruf von http://server/Microsoft-Server-ActiveSync werden wir von einem Apache Authentifizierungsdialog begrüßt, welcher über den Z-Push Code getriggert wird. Diesen Umstand können wir zu unserem Vorteil nutzen, indem wir - bereits bevor der Dialog durch Z-Push getriggert wird - im Apache eine Authentifizierung durchführen lassen. Dies funktioniert da eine einmal durchgeführte Anmeldung in der Session gespeichert wird und an die dahinter liegende Applikation “durchgereicht” wird (funktioniert z.B. auch mit ownCloud).

Um den Apache Webserver einen LDAP Baum zur Authentifizierung nutzen zu lassen sind dann nur noch die folgenden zwei Änderungen nötig:

  1. mod_authnz_ldap aktivieren, dies geht z.B. mittels “a2enmod authnz_ldap”
  2. den folgenden Code Block innerhalb der Directory Sektion im Z-Push vHost einfügen (und natürlich an die eigene Umgebung anpassen):

Der Entscheidende Punkt dieser Ergänzung liegt in AuthLDAPURL. Diese  definiert:

  • wo das LDAP läuft
  • wie die Basis DN lautet
  • wie das Login Attribut heißt
  • und welcher Filter angewendet werden soll.

Das Apache Handbuch definiert die Syntax wie folgt: ldap://host:port/basedn?attribute?scope?filter. Die oben genannte Beispielsyntax nutzt also das Attribut uid als Benutzername und sollte dieser Benutzer die Objectklasse zarafa-user und das Attribut zarafaEnabledFeatures mit dem Wert z-push ist die Anmeldung erfolgreich. In allen anderen Fällen wird die Anmeldung abgeleht.