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:
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
Ruft per Rechtsklick auf die OU deren Eigenschaften auf:
Geht auf den Reiter Attribut-Editor und sucht die Zeile distinguishedName und macht einen Doppelklick:
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:
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
#
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!
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:
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.