Aktionen

Seafile Server - Active Directory Anbindung

Aus znilwiki

Changelog:

  • 20.12.2017: Erste Version
  • 11.01.2018: Probleme mit Sonderzeichen ergänzt



Es ist zwar in der Anleitung von Seafile beschrieben: https://manual.seafile.com/deploy/using_ldap.html
Aber man muss genau lesen - und scheitert eventuell doch.
Deshalb hier meine Version der Anleitung.


Ausgangslage

Ich gehe davon aus das der Seafile-Server ansonsten bereits funktioniert, man kann lokale Benutzer anlegen und nutzen.
Fehlt nur noch die Anbindung an das Active Directory.


Ziel

Benutzer die sich in einer bestimmten Active Directory-Gruppe befinden sollen sich ohne weitere Eingriffe in Seafile anmelden können.
Die Gruppe heißt in diesen Beispielen:

SeafileUser



Voraussetzungen

Wir müssen den Namen der Domäne wissen, sowie die Adresse eines Domänencontrollers.
Wir brauchen einen Benutzer mit dem sich der Seafile Server am Active Directory anmelden kann. Ein ganz normaler Windows-Benutzer reicht:
Die Gruppe sollte angelegt sein und zumindest ein Mitglied haben. Die Benutzer in der Gruppe haben einen Eintrag im Feld "E-Mail:", denn Seafile möchte bei LDAP Benutzern immer das Format Name@domain.suffix haben.
Ergibt die folgenden Daten:

Domäne ..........: znil.local
Domänencontroller: 192.168.45.50
Gruppe ..........: seafileUser
Benutzer ........: ldapSearch
Passwort ........: abcd1234



Konfiguration Seafile

Wir stoppen zunächst den Seafile Server:

systemctl stop seahub.service && systemctl stop seafile.service

und bearbeiten die Datei ccnet.conf im Seafile-Verzeichnis:

nano /home/seafile/haiwen/conf/ccnet.conf

Unten an die Datei hängen wir folgenden Abschnitt an:

[LDAP]
HOST = ldap://192.168.45.50/
BASE = OU=3.Funktionsbenutzer,DC=znil,DC=local;OU=1.Email-Benutzer,DC=znil,DC=local
USER_DN = CN=ldapSearch,OU=3.Funktionsbenutzer,DC=znil,DC=local
PASSWORD = abcd1234
LOGIN_ATTR = mail
FILTER = memberOf=CN=SeafileUser,OU=4.Funktionsgruppen,DC=znil,DC=local

Da sehen wir nun die ersten Hürden und Probleme. Zum einen müssen Distinguished Names angegeben werden, zum anderen Unterstützt der Seafile Server keine globale Suche in der Domäne, man muss immer eine OU (Organisationseinheit) angeben. Aber hier die Erklärungen im Detail:


HOST

Hier geben wir den Namen oder die IP-Adresse des Domänencontrollers an:

HOST = ldap://192.168.45.50/

Alternativ mit Port:

HOST = ldap://192.168.45.50:389/

Es geht auch mit Verschlüsselung - was Ihr auf dem Domänencontroller aber erst einrichten müsst. Wer das will - siehe Seafile Handbuch.


BASE

BASE ist die Suchbasis. Unterhalb dieses Knotens werden die Benutzer(!) gesucht. Bei vielen anderen Lösungen würde man einfach

BASE = DC=znil,DC=local

eingeben und er würde alles innerhalb der Domäne durchsuchen. Das geht mit Seafile NICHT!
Es muss immer eine OU angegeben werden. Für die Standard-OU "Users" sähe die korrekte Zuordnung also so aus:

BASE = OU=Users,DC=znil,DC=local

Wohl dem der alle Benutzer unterhalb der selben OU hat ... nein, ganz so schlimm ist es nicht.
Mein Test Active Directory sieht so aus:

ClipCapIt-171220-151942.PNG

Und ich möchte Benutzer unterhalb der beiden markierten OUs hinzufügen:

1.Email-Benutzer
3.Funktionsbenutzer

Man darf mehrere BASE angeben, jeweils getrennt durch ein ;, also brauchen wir nur noch die Distinguished Names der beiden OUs.
Da Copy&Paste in der Regel weniger Fehler erzeugt zeige ich euch 2 Methoden um an diesen Namen zu kommen:

per CMD

Startet auf einem Domänencontroller(!) eine Eingabeaufforderung und gebt folgenden Befehl ein:

dsquery ou -name 1.Email-Benutzer

Ausgabe:

"OU=1.Email-Benutzer,DC=znil,DC=local"

Das Wiederholt Ihr für alle OUs unterhalb derer eure Benutzer stehen. Ihr müsst NICHT jede Unter-OU mit aufführen!


per Active Directory-Benutzer und -Computer

Öffnet Active Directory-Benutzer und -Computer
Aktiviert unter Ansicht die Erweiterte Features

ClipCapIt-171220-153033.PNG

Ruft per Rechtsklick auf die OU deren Eigenschaften auf:

ClipCapIt-171220-153253.PNG

Geht auf den Reiter Attribut-Editor und sucht die Zeile distinguishedName und macht einen Doppelklick:

ClipCapIt-171220-153402.PNG

Nun könnt Ihr den Text herauskopieren.


Nun haben wir also die DN zusammen:

1.Email-Benutzer      = OU=3.Funktionsbenutzer,DC=znil,DC=local
3.Funktionsbenutzer   = OU=1.Email-Benutzer,DC=znil,DC=local

Diese beiden gebe ich nun, per ; getrennt bei BASE an:

BASE = OU=3.Funktionsbenutzer,DC=znil,DC=local;OU=1.Email-Benutzer,DC=znil,DC=local



USER_DN, PASSWORD

Als nächstes folgt der Benutzer für den Active Directory Zugriff und dessen Passwort:

USER_DN = CN=ldapSearch,OU=3.Funktionsbenutzer,DC=znil,DC=local
PASSWORD = abcd1234

Den Distinguished Names erhalten wir nach dem gleichen Prinzip wie für die OU, der CMD Aufruf ist

dsquery user -samid ldapSearch



LOGIN_ATTR

LOGIN_ATTR = mail

Damit geben wir an das wir die Email-Adresse des Benutzers als Login-Benutzernamen verwenden wollen.
Das ist das Feld E-Mail: bei den Eigenschaften eines Benutzer im Active Directory Alternativ ginge auch

LOGIN_ATTR = userPrincipalName

Das wäre die folgenden Stelle:

ClipCapIt-171220-154436.PNG

Das kann mit der E-Mail-Adresse identisch sein, muss er aber nicht. Wenn der Administrator nichts anderes konfiguriert hat ist der in der Regel der interne Domänenname, also Bernhard@znil.local


FILTER

Mit Filter kann ich die Bedingungen definieren die ein Benutzer erfüllen muss um Seafile nutzen zu können.
Hier soll er Mitglied der Gruppe "SeafileUser" sein:

FILTER = memberOf=CN=SeafileUser,OU=4.Funktionsgruppen,DC=znil,DC=local

Den DN kriegen wir wiederum wie bei der OU raus, die Abfrage per CMD sieht so aus:

dsquery group -samid SeafileUser


Face-wink.png
Tipp: Ihr könnt den Filter auch ganz weglassen - dann dürfen alle Benutzer unterhalb der OU sich anmelden


Important.png
Hinweis: Besondere Zeichen müssen ggf. wiederum "escaped" werden. Zum Beispiel wird ein # im Namen bei der Ermittlung als \# eingefügt. Für einen DN ist das auch die Korrekte Schreibweise. Hier an dieser Stelle geht es aber um einen LDAP-Suchstring - und in dem ist es so nicht erlaubt. Statt \# muss man hier ein \\23 einfügen. Die Werte findet Ihr hier: http://www.utf8-zeichentabelle.de/
Wenn es nicht klappt, eure Gruppe Sonderzeichen enthält die bei der Ermittlung mit \ escaped wurden dann liegt es daran!


Warning.png
Warnung: Generell ist es eine schlechte Idee eine Gruppe mit Sonderzeichen zu verwenden. Der Name sollte nur aus Buchstaben, Zahlen und dem "-" bestehen. Bei einem Kunden hat es zwar scheinbar nach vorzu beschriebener Methode geklappt - aber dann gab es Probleme bei der Anmeldung. Nur Benutzer die auf dem Reiter LDAP erscheinen können sich auch anmelden. Ist dieser Leer stimmt etwas nicht mit der Gruppe



Kontrolle

Speichert die ccnet.conf und startet die Dienste wieder:

systemctl start seafile.service && systemctl start seahub.service


In der Administrationsoberfläche von Seafile in der Benutzerverwaltung gibt es nun einen neuen Reiter LDAP:

ClipCapIt-171220-155449.PNG

Dort werden alle gefundenen Benutzer aufgeführt.
Diese können sich mit ihrer Email-Adresse (alles klein geschrieben) und Ihrem Windows-Passwort an Seafile anmelden.


Kommentare

Loading comments...