Nextcloud manuell in UCS integrieren

Die Nextcloud-App aus dem Univention App Center, ist eine sehr gute Möglichkeit, innerhalb kürzester Zeit eine funktionierende Integration der beliebten „File Sync and Share“-Lösung in das Managementsystem des Univention Corporate Server betriebsfertig zu machen. Mit ihr können die Dienste des Nextcloud-Hub einer überschaubaren Anzahl von Nutzer und Nutzerinnen zur Verfügung gestellt werden, die Docker-basierte Integration aus dem App Center hat allerdings architekturbedingt einige Nachteile.

Ein erster Punkt ist die Limitierung bei der Nutzung von lokalem Festplattenspeicher: Die Docker-Instanz hat nur Zugriff auf die seitens der Integration vorgesehenen Overlay-Mounts der Wirts-Maschine und kann nicht ohne Weiteres zusätzliche lokale Festplatten nutzen. Bei der Einbindung von NFS- oder S3-basiertem Netzwerkspeicher gibt es ähnliche Herausforderungen. Mit einer gesteigerten Nutzung der Nextcloud-Dienste wäre es weiterhin überlegenswert, horizontal auf mehrere gleichberechtigte Nextcloud-Instanzen skalieren zu können. Dies würde jedoch erhebliche nachträgliche Änderungen am System-Setup erforderlich machen. Auch eine Herauslösung der Datenbank, die bei der App-Center-Integration auf PostgreSQL setzt, oder eine Nutzung eines hochverfügbaren Datenbankclusters z.B. auf der Basis von Galera, wird bei der Docker basierten Integration nicht von Haus aus unterstützt.

Die Installation einer nativen Nextcloud-Instanz auf UCS ist aufgrund der der Abhängigkeit von Nextcloud zu sehr neuen PHP-Versionen nicht gerade leicht und aus Gründen der zu befürchtenden höheren Betriebsaufwände wenig empfehlenswert.

Hochskalierbar und mit zentralem Identitätsmanagement – Ihre Nextcloud Instanz auf UCS

Wie Sie den Betrieb einer hochskalierbaren Nextcloud-Plattform zusammen mit dem durch UCS bereitgestellten Identitätsmanagmentsystem durch eine manuelle Integration vornehmen, möchte ich Ihnen im Folgenden beschreiben. Dabei ist es unerheblich, auf welcher Plattform Nextcloud installiert ist und welches Datenbankbackend und welcher Webserver verwendet werden.

Zunächst noch eine App… „LDAP user and group backend“

Als Erstes sollten Sie Nextcloud so konfigurieren, dass die in UCS definierten Nutzer und Gruppen auch in Nextcloud zur Verfügung stehen. Da der UCS diese Informationen in einem Verzeichnis auf der Basis von OpenLDAP speichert, liegt es nahe, dafür die „LDAP application“ zu verwenden. Diese Methode wird grundsätzlich auch von der Nextcloud-Integration aus dem Univention App Ccenter verwendet, aus Gründen der Automatierung der Konfiguration allerdings über das „occ“-Kommandozeilenwerkzeug. Falls noch nicht vorhanden, sollten Sie daher zunächst die Nextcloud App „LDAP user and group backend“ installieren und aktivieren.

Nextcloud App: LDAP user and group backend

In der oben genannten Dokumentation finden Sie einige elementare Konfigurationsoptionen für die LDAP-Verbindung. Zunächst wird der DNS-Name oder die IP-Adresse des LDAP-Servers benötigt. Hier ist man vielleicht versucht, den ersten Domaincontroller einer UCS-Domäne („DC Master“ oder „Primary Directory Node“) einzutragen. Das wird sicherlich funktionieren, ist aber zumindest dann eher fragwürdig, wenn ein sehr großer Nutzerkreis (mehrere tausend) den Dienst nutzen sollen. Zwar versucht Nextcloud, einmal erhaltene LDAP-Informationen zwischenzuspeichern, wird aber auf einem gut ausgelasteten Nextcloud-Server ausreichend Anfragen erzeugen, um bereits eine ziemliche Grundlast des LDAP-Servers zu bewirken. Es bietet sich daher an, hier einen anderen existierenden Domaincontroller auszuwählen.

Integration – aber bitte sicher mit TLS-Ports und Zertifikat

Ein weiterer Punkt bei der Konfiguration ist die Auswahl des Zielports auf dem LDAP-Server sowie in direktem Zusammenhang damit die TLS-gesicherte Übertragung der Nutzerinformationen aus dem Verzeichnis. Auch hier ist der LDAP-Standardport 389, den auch Nextcloud zunächst benutzen will, nicht die beste Wahl. Dieser Port wird nur auf Systemen, in denen kein „Active Directory-kompatibler Domain Controller “ läuft, von OpenLDAP bedient. In einer solchen Konstellation würden die Selbsterkennungsmechanismen von Nextcloud vermutlich einen Windows-Server detektieren. Auch das kann funktionieren, schränkt aber die später erwähnten Konfigurationsoptionen etwas ein.

Besser geeignet ist der alternative Port 7389, der auf jedem Domänencontroller immer durch OpenLDAP benutzt wird. Nun sind die Ports 389 und 7389 aber die Ports, auf denen „Klartext“ gesprochen wird. Eine Absicherung gibt es dort nur optional über „StartTLS“. Dabei wird die Verbindungssicherheit erst nach dem initialen Aufbau einer Klartextverbindung in Betrieb gesetzt. Dies mag ausreichend erscheinen, bietet aber keine Transparenz, ob die Verbindung TLS-gesichert ist oder nicht. Auf der im Sinne des Wortes sicheren Seite ist nur, wer explizit die TLS-Ports verwendet. Im Falle des LDAP wäre das Port 636 und – unter UCS – 7636. Daher sollten Sie im Feld Server etwa „ldaps://directorynode.example.com“ und im Feld Port „7636“ eintragen.

Damit das aber funktioniert, muss der LDAP-Konfiguration des Nextcloud-Servers noch das Zertifikat des UCS vertraut gemacht werden. UCS-Systeme erledigen das automatisch während des Domain-Joins. Dort, genauer in der Datei /etc/ldap/ldap.conf, können Sie sehen, dass in der Konfiguration „TLS_CACERT“ der Pfad zu einem Zertifikat abgelegt ist. Dieses Zertifikat ist das der UCS-Root CA und unter anderem in der Univention Management Console verlinkt. Im einfachsten Fall könne Sie sich das Zertifikat mit wget https://primarydirectorynode.example.com/ucs-root-ca.crt holen und z.B. unter /etc/ssl/certs speichern. Nach einer Anpassung der oben genannten Konfiguration in der ldap.conf sollten die Chancen sehr gut stehen, dass eine LDAP-Verbindung klappt.

Nutzer und Nutzerinnen anbinden – die LDAP-Anbindung macht es möglich

Damit eine Anwendung Nutzer identifizieren kann, wird zunächst in den meisten Fällen initial eine LDAP-Verbindung aufgebaut. Mittlerweile ist es aus Sicherheitsgründen eher unüblich, ein LDAP-Verzeichnis für anonyme Leser zugänglich zu machen. Das ist auch unter UCS der Fall. Applikationen, die an dieser Stelle auf einem sogenannten „anonymous bind“ beharren, könnte man unter Angabe der Quell-IP-Adresse mit der UCR-Variablen „ldap/acl/read/ips“ freischalten. Details dazu finden Sie im UCS-Handbuch unter https://docs.software-univention.de/handbuch.html#domain-ldap:acls. Für Nextcloud ist dies allerdings nicht nötig. Hier können Sie ein „Bind-DN“, das ist ein Konto, welches das LDAP-Verzeichnis durchsuchen kann, angeben.

Wenn man im Internet nach Beispielkonfigurationen für LDAP mit Nextcloud sucht, findet man zuweilen an dieser Stelle ein „uid=admin,…“ vor. Das ist eher zweifelhaft, da man davon ausgehen muss, dass irgendwo in der Konfiguration das Kennwort eines vermutlich sehr hoch privilegierten Nutzerkontos im Klartext vorliegt und im Falle einer ungesicherten Verbindung regelmäßig durchs Netz geschickt wird. Die aktuelle „LDAP application“ von Nextcloud benötigt keinerlei Schreibrechte im LDAP-Verzeichnis selbst. Man tut somit gut daran, ein separates, niedrig privilegiertes Dienstkonto zu verwenden. Dessen Einrichtung unter UCS ist in https://help.univention.com/t/cool-solution-ldap-search-user-simple-authentication-account/11818 detailliert beschrieben. Dort erfahren Sie auch, wie Sie das Konto und das mit hoffentlich ausreichender Entropie versehene Kennwort vorab testen können. Damit wissen Sie dann auch, wie der in das Feld „User DN“ einzutragende „Distinguished Name“ des Dienstkontos (z.B. uid=ldapsearch-nextcloud,cn=users,dc=example,dc=com) sowie die LDAP-Basis für das Feld „Base DN“ (z.B. dc=example,dc=com) lautet.LDAP/AD Integration

Die Qual der (Aus-)Wahl – Erweiterte Attribute machen vieles möglich

Der nächste Schritt der Konfiguration ist die Angabe eines passenden (LDAP-)Filters zur Auswahl der Nutzerkonten, die Nextcloud verwenden dürfen. Die Nextcloud-App aus dem Univention Appcenter verwendet eine Erweiterung des LDAP-Verzeichnisses, um zusätzliche Informationen wie z.B. die Berechtigung zur Nutzung und Quota-Informationen ablegen und nutzen zu können. Unter Beachtung der Lizenzbedingungen und mit den Hinweisen aus https://docs.software-univention.de/developer-reference-4.4.html#settings:ldapschema könnte man durchaus die Schemaerweiterung aus https://github.com/nextcloud/univention-app/blob/master/nextcloud.schema manuell konfigurieren. Damit diese Erweiterung auch in der Management-Console oder auf der Kommandozeile zugänglich werden, müssen Sie noch „erweiterte Attribute“ definieren. Der letztgenannte Link zeigt Ihnen zudem die Möglichkeit, ohne eine Erweiterung des LDAP-Schemas auszukommen: die Objektklasse „univentionFreeAttributes„.

Wenn Ihnen das zu komplex ist oder die Anforderungen an einen granularen Filter einfach nicht bestehen, kann auch einen LDAP-Filter auf der Basis von existierenden Attributen und Zuordnungen modellieren. Als erstes Kriterium dienen oft Objektklassen, angefangen mit „inetOrgperson„. Bei Einsatz von UCS@School Version 4.x könnte man den Personenkreis mit den Objektklassen „ucsschoolStudent“, „ucsschoolTeacher“ und „ucsschoolStaff“ weiter einschränken. Eine weitere gebräuchliche Selektionsmethode ist die Verwendung von Gruppenmitgliedschaften. Die Nextcloud-Dokumentation erwähnt, dass dazu das „member-of-overlay“ im LDAP-Server aktiviert sein muss. Dies ist unter UCS für alle Installationen seit Version 4.3.0 der Fall. Damit wäre der im Nextcloud-Handbuch angegebene LDAP-Filter „(&(objectClass=inetOrgPerson)(memberOf=cn=nextcloudusers,ou=groups,dc=example,dc=com))“ fast geeignet. Unter UCS liegen die Standardgruppen allerdings in „cn=groups“.

Bei der Suche nach einem passenden LDAP-Filter ist die Schaltfläche „Einstellungen überprüfen und Benutzer zählen“ sehr hilfreich. Bei einer nachträglichen Justage des Filters empfiehlt es sich, wie auch bei der Ersteinrichtung einen lokalen Nextcloud-Nutzer, also kein über LDAP definiertes Administrationskonto zu verwenden. Da alle Änderungen sofort gespeichert werden, könnte man sich ansonsten bei einem Konfigurationsfehler sehr leicht aussperren.

Nextcloud-UCS: LDAP Integration von Nutzern

Feintuning – Von Mailadressen bis hin zur Definition von Gruppenrechten

Unter dem Tab „Anmeldeattribute“ bietet es sich an, dass Sie neben dem vorgewählten „LDAP/AD-Benutzername“ auch eine Anmeldung über die „LDAP/AD E-Mail-Adresse“ zulassen. Dies bewirkt eine Änderung des LDAP-Filters mit der neben dem Attribut „mailPrimaryAddress“, welches bei einer Mailintegration unter UCS die Haupt-SMTP-Adresse des Kontos vorhält, auch eine optional unter den Kontaktinformationen definierbare beliebige Mailadresse zur Anmeldung an Nextcloud verwendet werden kann. Aus Sicht der Nutzer kann dies unter Umständen verständlicher sein als ein „Benutzername“.

LDAP/AD Integration von GruppenEin Abgleich der Gruppen mit dem zentralen LDAP-Verzeichnis kann hilfreich sein, um die Administration von Rechten auf Nextcloud-Apps oder Freigaben zu vereinfachen. Wie auch beim Filter für Benutzer kommt es lediglich darauf an, passende Objektklassen und optional bestimmte Gruppen zur Synchronisation auszuwählen.

LDAP Integration Gruppen

Und nun noch den LDAP-Benutzernamen eintragen…

Mit den bislang durchgeführten Konfigurationsschritte sollten Sie bereits erfolgreich eine funktionierenden LDAP-Anbindung eingerichtet haben. Diese hat allerdings je nach Blickwinkel einen kleinen Schönheitsfehler, den man eventuell gleich am Anfang korrigieren will, aber nicht zwangsläufig muss. In den Experteneinstellungen der LDAP-Konfiguration finden Sie den Hinweis, dass Nextcloud standardmäßig das „UUID“-Attribut als internen Benutzernamen verwendet. OpenLDAP benutzt das Attribut entryUUID zur Definition eines universell eindeutigen Indifikators. Die Eindeutigkeit macht es allerdings etwas schwerer, einem Eintrag wie „597ae2f6-16a6-1027-98f4-d28b5365dc14“ auf den ersten Blick ein LDAP-Konto zuzuordnen.

Alternativ kann man „uid“, also den LDAP-Benutzernamen als internen Namen in Nextcloud angeben, muss sich dann allerdings überlegen, wie generell mit Namensänderungen umgegangen wird.

Screenshot der "Experteneinstellungen" in der LDAP-Integration

Backup-Host für Redundanz und Hochverfügbarkeit

Eine hinsichtlich der Verfügbarkeit redundant aufgebaute UCS-Umgebung wird immer mehrere Domain Controller (Directory Nodes) mit einer kompletten Kopie des LDAP-Datenbestands bereitstellen. Damit ist es natürlich auch möglich, LDAP-basierte Dienste hochverfügbar anzubinden. Auch Nextcloud kennt eine solche Möglichkeit. Ein unter dem Tab „Fortgeschritten“ eingetragener Backup-Host benutzt die beim Hauptserver eingetragene Konfiguration und kann im Fehlerfall dessen Aufgabe übernehmen. Im Admin Manual von Nextcloud finden Sie Hinweise zur Funktionsweise. Erwähnenswert ist, dass mit Nextcloud-Bordmitteln keine echte Lastverteilung der LDAP-Verbindungen erreicht werden kann. Hierzu ist bei Bedarf auf einen passenden Loadbalancer zurückzugreifen.

Für einen erfolgreichen langfristigen Betrieb von Nextcloud mit einem zentralen LDAP sollten Sie sich auf jeden Fall auch damit beschäftigen, was mit Konten in Nextcloud passiert, wenn deren Pendant im LDAP gelöscht wird. Im Admin Manual von Nextcloud finden sich Hinweise, wie mit Überbleibseln (Remnants) verfahren werden kann.

Ich hoffe, dass Ihnen diese detaillierte Anleitung für die manuelle Integration des Nextcloud-Hub auf UCS und die Integration in dessen Identitätsmanagement hilft, um Ihren Nutzer und Nutzerinnen einen komfortablen Zugriff auf Nextcloud mit ihren gewohnten Credentials zu geben.

Wenn Sie Fragen dazu haben oder gute Tipps oder eigene Erfahrungen beisteuern möchten, können Sie dies gerne über die Kommentarfunktion des Blogs tun.

UCS Core Edition jetzt kostenfrei einsetzen!

Zum Downloadbereich

Dirk beschäftigt sich seit ca. 2005 mit dem Univention Corprorate Server, noch länger mit Linux und anderen Betriebssystemen und versucht, die dabei stetig gewonnenen Erkenntnisse als Consultant und Trainer möglichst nutzbringend in Projekten und Schulungen umzusetzen.

Was ist Ihre Meinung? Hinterlassen Sie einen Kommentar!

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.