Neuer ChurchTools LDAP-Wrapper [Node.js]



  • Hallo zusammen,

    für die lesefaulen Menschen: Nach dem CT-Autoupdater von Dennis und mir gibt es jetzt das nächste praktische Tool von uns: Ich habe einen neuen CT-LDAP-Wrapper geschrieben.
    Interessierte bitte hier entlang: https://github.com/milux/ctldap

    Längere Erklärung:

    Ich habe vor ca. 2 Wochen versucht, die Benutzeraccounts von ChurchTools in unserer NextCloud-Instanz nutzbar zu machen, natürlich über den CT-LDAP-Wrapper.

    Unser momentanes Setup (Es wird demnächst noch effizienter und sicherer, dazu gleich noch mehr.) sieht wie folgt aus:

    • ChurchTools auf PHP 7.0 inkl. MySQL bei ALL-INKL
    • Raspberry Pi 3 mit Raspbian und neuestem Node.js 7.x in unserer Gemeinde, inkl. dem notwendigen Port-Forwarding für LDAP
    • NextCloud momentan noch bei ALL-INKL auf PHP 7.1, demnächst auf einem Synology NAS in unserer Gemeinde (s. unten, Datenschutz!)

    Nach bzw. bereits während der Einrichtung bin ich auf eine Vielzahl von Problemen gestoßen:

    • Die App benötigt direkten Zugriff auf die MySQL-Datenbank über eine persistente Verbindung, natürlich unverschlüsselt!
    • Die Gruppenzuordnungen waren komplett kaputt. Die Gruppen wurden zunächst nicht einmal erkannt. (Technisch: Ihnen fehlte die grundlegende ObjectClass von LDAP-Gruppen (group)) Außerdem wurden die Verknüpfungen nur in eine Richtung überhaupt gesetzt, und selbst das unvollständig/falsch, weil der JS-Code falsch war. (Technisch: Ein asynchroner Request in einer Schleife wurde nur unvollständig abgearbeitet, dementsprechend wurden je nach Tempo des MySQL-Servers nur einige wenige Gruppen gesetzt, bevor alles ausgeben wurde. -> "Race-Condition")
    • Ein Login eines CT-Users dauerte mindestens 3 Minuten (!!!) (Technisch: Der Cache war im Code zur Hälfte auskommentiert und zur anderen Hälfte falsch programmiert und dadurch unbrauchbar, die Daten wurden immer frisch aus MySQL gezogen.)
    • Alle nicht alphanumerischen Buchstaben wurden entfernt -> Weder hübsch noch notwendig.

    In diesem Zustand war uns klar, dass wir den Wrapper nicht sinnvoll produktiv einsetzen können.
    Da für uns ein zuverlässiger Einsatz wichtig ist, habe ich zunächst versucht, alle Unzulänglichkeiten des Originals auszubessern.
    Letzten Endes habe ich angefangen, das komplette Programm umzuschreiben. Die Codebasis mit dem Originals ist, wenn es überhaupt noch eine gibt, nur in Spuren nachweisbar.

    Folgendes hat sich geändert:

    • Es gibt (statt direktem, unverschlüsseltem MySQL) eine separate PHP-API, die auf den CT-Server kopiert werden muss. Das Konfig-File von CT muss nach Anleitung um eine zusätzliche Zeile mit einem Sicherheitsschlüssel ergänzt werden. Die Daten werden vom Wrapper über diese API abgefragt, wobei volle SSL-Unterstützung gegeben ist, wenn CT per SSL gesichert ist. (Datenschutz must-have, siehe unten!)
    • Der LDAP-Server hält die User- und Group-Daten in einem (funktionierenden) Cache, dessen maximales Alter in ms konfigurierbar ist. (Standard: 10000 bzw. 10 Sekunden)
    • Es gibt ein Setup-Skript (Nur für root-User!), dass das Programm automatisch konfiguriert und durch die Einrichtung führt.
    • Es gibt ein init.d-Script (Nur für root-User!) für den automatischen Start/Stop, Statusabfragen und Port-Weiterleitung über iptables (nat), damit die "echten" LDAP-Ports nutzbar sind, ohne den Wrapper als root auszuführen.
    • Weder Nutzernamen, noch Gruppennamen, noch sonst irgendwas wird verkrüppelt. Es gibt allerdings Bugs im Zusammenhang mit einigen Sonderzeichen bei manchen LDAP-Clients, z.B. im Automatik-Modus bei den Auswahlen des NextCloud-Plugins! Das ist kein Bug des Wrappers!

    Ich hoffe einige Gemeinde haben mit diesem neuen Wrapper Freude, damit sich der Zeitaufwand lohnt, den ich in den neuen Wrapper gesteckt habe.

    Ich empfehle aus Datenschutzgründen ausdrücklich:

    • ChurchTools mit SSL zu sichern
    • entsprechend die API-URL mit "https://" zu beginnen
    • sowie LDAP-Wrapper und die LDAP-Clients (OwnCloud, NextCloud, etc.) im selben Intranet zu betreiben!

    Da in unserem Setup bisher Punkt 3 verletzt ist, werden wir erst in den produktiven Betrieb für nicht-Tester übergehen, wenn wir unsere NextCloud von ALL-INKL auf ein Gemeinde-internes NAS umgezogen haben, wo sowohl der Raspi als auch das NAS im gleichen gesicherten, internen VLAN laufen. Nur so kann ausreichende Sicherheit gewährleistet werden!



  • Und bevor der Erste fragt:
    Natürlich supporte ich dieses Projekt auch, soweit es mir meine Zeit erlaubt. Wenn es Probleme gibt, macht bitte einen "Issue" bei GitHub auf. Falls das zu schwer ist, sind auch Beiträge hier im Thread oder PNs in Ordnung, aber ich bevorzuge GitHub. ;)



  • Klingt fantastisch! Ich werde das auf jeden Fall ausprobieren und davon berichten.



  • Ich habe das Ganze nun einmal getestet. Von der Umsetzung her sieht alles perfekt aus - schnell eingerichtet und die LDAP-Abfragen erfolgen schnell und reibungslos.

    Nun habe ich versucht, unsere Synology RackStation beim LDAP-Server anzumelden. Hier bin ich aber gescheitert, denn irgendwie entspricht das gelieferte LDAP-Schema nicht der geforderten Norm RFC 2307 (siehe https://www.synology.com/de-de/knowledgebase/DSM/help/DSM/AdminCenter/file_directory_service_ldap
    ). Attributzuordnungen lassen sich zwar konfigurieren, aber irgendwie will das Ganze nicht so wirklich...

    Welcher Norm entspricht die Datenlieferung des LDAP-Wrappers?

    Dann habe ich noch folgendes festgestellt:
    Wenn ich "ou=users,o=churchtools" oder "ou=groups,o=churchtools" abfrage, erhalte ich jeweils das korrekte Resultat. Frage ich lediglich nach "o=churchtools" müsste ich doch Benutzer und Gruppen erhalten, oder? Hier erhalte ich ein leeres Resultat zurück.

    Danke fürs Feedback und deine Arbeit! ;-)



  • @seetalchile Ich habe leider exakt dasselbe Verhalten festgestellt, und muss an dieser Stelle leider sagen, dass es mich auch nicht wundert.

    • Bzgl. der RFC 2307: Weder der ursprüngliche Wrapper, noch meiner, halten sich derzeit ein irgendeinen Standard - leider. Wenn du mir sagen kannst, was man an dem LDAP-Schema ändern oder ergänzen muss, damit das läuft, wäre ich in der Tat sehr dankbar. Hab' dazu bisher nämlich nix handfestes gefunden.
    • Ich hab' auch länger versucht, es irgendwie mit meiner Synology-Box zu koppeln. Nachdem ich mich die Schnittstelle nur mit nichtssagenden Fehlermeldungen abgespeist hat, habe ich irgendwann aufgegeben.
    • Die Inkonsistenz bei der Abfrage der Struktur unter o=churchtools ist mir bekannt. Ich sollte mich darum wohl in der Tat mal kümmern. An der Stelle ist einfach nichts definiert, daher wird auch nichts ausgegeben. Wenn ich Zeit habe, werde ich das noch ein wenig aufpolieren.


  • Es gibt auch noch eine technische Limitierung, die es bisher verhindert, das ganze über RADIUS anzubinden:
    Da in der DB von CT die Daten mit einem sicheren Hashverfahren (bcrypt) gesichert sind, kann der LDAP-Server nur Plaintext-Anmeldungen. Für jedes andere Verfahren müssten die Passwörter im passenden Hash-Format vorliegen, was eine Anpassung von ChurchTools (inkl. erheblicher Schwächung der Sicherheit) erfordern würde, Plus einen Passwortwechsel aller Personen. Not gonna happen...
    Dasselbe Problem könnte auch der Endgegner bei der Synology-Integration werden. :(



  • Danke für deine Antwort! Schon mal gut, dass unsere Erkenntnisse übereinstimmen ;-) Ich werde mich auf jeden Fall in nächster Zeit mal noch eingehender mit der Anbindung zu Synology beschäftigen und ggf. bei deren Support auch eine Spezifikation anfordern.

    Das Einzige, was ich zu RFC 2307 gefunden habe:
    https://www.rfc-editor.org/pdfrfc/rfc2307.txt.pdf
    http://www.mitlinx.de/ldap/index.html?http://www.mitlinx.de/ldap/ldap_schema.htm



  • @seetalchile Der komplette RFC ist mir zu umfangreich für ein Hobbyprojekt, und der andere Link erzählt nur Sachen, die ich schon weiß. Ich weiß, dass die User vom Typ posixAccount sein müssen, aber was dann genau ins Schema rein muss, und ob es überhaupt machbar ist, steht in den Sternen...



  • Ich bin zur Zeit in Kontakt mit dem Support von Synology. Zu meiner Frage nach einer exakten Spezifikation zur Anbindung des LDAP-Clients werde ich noch eine Rückmeldung erhalten. Dies sei bei der Entwicklungsabteilung nun in Abklärung.

    Vorab habe ich bereits einmal die Antwort erhalten, dass sich die Schnittstelle an die Vorgaben von LDAP v3 (RFC 2251) halte: https://www.rfc-editor.org/rfc/pdfrfc/rfc2251.txt.pdf

    Ich halte auf dem Laufenden...



  • Ich habe nun eine Schemadatei von Synology erhalten, kann aber nicht viel daraus lesen. @milux Evtl. kannst du etwas damit anfangen?
    https://www.dropbox.com/s/pd651y4inn9bb7g/syno.schema.zip?dl=0



  • Die Attribute beginnen praktisch alle mit "syno", also muss es eine Beschreibung von einem Synology-spezifischen Format sein. Das hilft uns gar nicht weiter.
    Ich fürchte, du hast dein Anliegen entweder nicht richtig erklärt, oder bist an einen inkompetenten Kontakt geraten, denn so wie es aussieht, haben sie nicht wirklich verstanden, was wir brauchen...


Anmelden zum Antworten
 

Es scheint als hättest du die Verbindung zu ChurchTools Forum verloren, bitte warte während wir versuchen sie wieder aufzubauen.