Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:webapps:moodle:moodle_extern_ldap:start]] 

Externes Moodle mit dem LDAP synchronisieren

Getestet August 2020 mit LMN 6.2 und LMN 7 mit Moodle 3.7 bei Belwü
Getestet Januar 2021 mit Moodle 3.9 bei Belwü
Getestet Juli 2022 mit Moodle 4.0
Upgrade-Hinweis

Ein extern (z. B. bei Belwü) gehostetes Moodle kann man an die Benutzerverwaltung des LMN-Servers anflanschen. So kann man erreichen:

  • Alle User der Schule können sich am Moodle anmelden
  • Die Moodle-Benutzer werden mit denen der Schule synchronisiert
  • Die LDAP-Gruppen – also Klassen und Projekte – werden mit globalen Gruppen in Moodle synchronisiert. So kann man eine Klasse oder ein Projekt in einen Kurs einschreiben.
  • Cohort-Sync sorgt dafür, dass Änderungen an der Zusammensetzung der Gruppen mit den Mitgliedern der Kurse synchronisiert werden.

Das Vorgehen ist bei der LMN 6.2 und der LMN 7 ähnlich, Unterschiede bestehen vor allem bei den Einstellungen.

Im Folgenden werden die Schritte der Reihe nach beschrieben. Dann gibt es noch Tipps zum Feintuning und zur Kurserstellung per CSV-Upload.

LDAP-Authentifizierung einrichten

Im ersten Schritt richtet man ein, dass man bei der Anmeldung an Moodle seine Benutzerdaten aus der Schule verwenden kann.

Anleitung für die LMN 6.2: Externes Moodle via LDAP gegen LML 6.2 authentifizieren
Anleitung für die LMN 7: https://docs.linuxmuster.net/de/latest/external-services/moodle/index.html.

Abweichende Einstellungen

Bei den Einstellungen Site administration / Plugins / Authentication / LDAP server sind abweichend von den Anleitungen folgende Einstellungen sinnvoll bzw. für das hier beschriebene Vorgehen erforderlich:

User lookup settings / Contexts

LMN 6.2: ou=accounts,dc=schule,dc=lan;ou=groups,dc=schule,dc=lan
(anderenfalls werden die Gruppen nicht gefunden)

LMN 7: ou=teachers,ou=default-school,ou=schools,dc=schule,dc=lan;ou=students,ou=default-school,ou=schools,dc=schule,dc=lan;ou=projects,ou=default-school,ou=schools,dc=schule,dc=lan
(so werden nur SuS, LuL sowie bei den Gruppen die Klassen und Projekte gefunden)

Hier und im Folgenden muss man das „dc=schule,dc=lan“ natürlich an die eigene Schule anpassen.

User lookup settings / Object class

Damit nicht alle Accounts, sondern nur die von echten Personen gefunden werden, kann man hier einen filter eingeben. Wen dies nicht stört, der kann auch den Standardwert belassen.

LMN 7

LMN 7: user

LMN 6.2

Bei der LMN 6.2 ist es etwas komplizierter. Man trägt hier einen passenden Filter für ldapsearch ein. Hier ein Beispiel:

(&(|(gidNumber=10000)(gidNumber=10103)(gidNumber=10105))(objectClass=posixAccount))

Was sind das für Werte? Zunächst werden über die Filter mit gidNumber die Suche auf diese gidNumbers beschränkt. 10000 steht für die Lehrer, 10103 ist bei uns die 5a, 10105 die 5b. Diese Werte muss man an seine Installation anpassen und natürlich die Werte für die anderen Klassen ergänzen, sodass der endgültige Filter natürlich deutlich länger ist.

Hierzu zwei Tipps:

Auf dem Server kann man sich diese Gids so ausgeben lassen:

getent group | grep ^[1-9] | cut -d „:“ -f 1,3 | sort

Den Filter kann man so testen:

ldapsearch -x -w "" -H "ldaps://localhost" -b "ou=accounts,dc=schule,dc=lan"  "(&(|(gidNumber=10000)(gidNumber=10103)(gidNumber=10105))(objectClass=posixAccount))" cn

Hier sollte eine lange Ausgabe kommen. Zuletzt wird die Zahl der Treffer angezeigt, das sollte die Zahl der echten User sein (LuL, SuS - also Anzahl Zeilen in lehrer.txt und schueler.txt, ggf. extraschueler.txt).

Hier noch ein Beispiel, wie man alle Accounts ausschließen kann, die mit „eltern“ beginnen:

(&(|(gidNumber=10000)(gidNumber=10103)(gidNumber=10105))(!(uid=eltern*))(objectClass=posixAccount))

User account synchronisation / Removed ext user

Diese Option bestimmt, was passiert, wenn ein User nicht mehr in der LDAP-Datenbank zu finden ist:

Keep internal: Der User bleibt in Moodle erhalten (kann sich aber nicht mehr anmelden)
Full delete Internal: Der User wird in Moodle komplett gelöscht

Wir lassen dies während des Schuljahres sicherheitshalber auf „Keep internal“. In den Sommerferien schalten wir nach dem Versetzen um auf löschen, warten, bis die User gelöscht sind (siehe unten), und stellen dann wieder zurück.

LDAP-Sync: Moodle-User mit den LDAP-Usern abgleichen

Mit den bisherigen Einstellungen werden die User in Moodle erst bei der ersten Anmeldung angelegt. Insbesondere für die unten erklärte Synchronisation mit den globalen Gruppen ist es aber sinnvoll, wenn die User regelmäßig abgeglichen werden und so immer in Moodle verfügbar sind. Dazu dient „LDAP-Sync“.

Auf der Seite Site administration / Server / Tasks / Scheduled tasks sucht man den Task „LDAP users sync job (auth_ldap\task\sync_task)“ und aktiviert ihn in den Einstellungen. Zum Testen stellt man eine Uhrzeit in wenigen Minuten ein, wenn alles läuft, geht man wieder auf den Standard.

Wenn der Task gelaufen ist, sieht man im Log, was passiert ist. Es sollten nun alle User im System vorhanden sein.

Achtung: Moodle hält viele Einstellungen im Cache. Die geplanten Tasks bekommen Änderungen an den Einstellungen oft nicht mit. Man sollte deshalb nach dem Ändern solcher Einstellungen (z. B. LDAP-Authentifizierung) sicherheitshalber den Moodle-Cache löschen: Site administration / Development / Purge caches

LDAP-Gruppen mit globalen Gruppen in Moodle syncen

Dies ist mit Moodle-Bordmitteln nicht möglich, aber es gibt passende Plugins. Ich empfehle die LDAP syncing scripts (local_ldap).

Für eine differenzierte Auswahl der Gruppen habe ich das Plugin ein wenig erweitert, Grund siehe unten im Abschnitt „Feintuning“. Das erweiterte Plugin gibt es (basierend auf der Version 3.11.1) hier.

Installation des Plugins

Man lädt die Zip-Datei (die originale oder die erweiterte) herunter und packt sie aus. Den Ordner „ldap“ kopiert man in den Ordner „moodle/local/“ im Moodle-Webroot (bei Belwü z. B. mit WinSCP, nach der Anmeldung zu Website-root / moodle / local navigieren.

Nun meldet man sich als Administrator an Moodle an, um die Installation und Erstkonfiguration abzuschließen.

Konfiguration

Bei der Erstkonfiguration wird man automatisch nach den Einstellungen gefragt, später findet man sie hier:

Site administration / Plugins / Local plugins / LDAP syncing scripts

Es sind nur wenige Einstellungen vorzunehmen:

Group attribute: cn
Autocreate missing cohorts: Aktivieren
Group class (LMN 6.2): posixGroup
Group class (LMN 7): group

Die Option „Autocreate missing cohorts“ gibt es zweimal, die erste ist die richtige (cohort_synching_ldap_groups_autocreate_cohorts).

Bei der erweiterten Version des Plugins gibt es noch die Option „Group Filter“ – dazu weiter unten mehr.

Aktivieren

Das Plugin erledigt seine Arbeit durch einen geplanten Task, den man noch aktivieren muss. Das geht wieder hier:

Site administration / Server / Tasks / Scheduled tasks

Der Task heißt „Synchronize cohorts from LDAP groups“ (Achtung, es gibt einen ganz ähnlichen Task mit „attributes“ statt „groups“!). Wieder wählt man zunächst einen Zeitpunkt in naher Zukunft, und wenn alles läuft, richtet man den Task nach seinen Wünschen ein.

Achtung: Vor dem Aktivieren bitte den Abschnitt „Feintuning“ lesen und gegebenenfalls den „Group filter“ konfigurieren

Achtung: Nicht vergessen, vor dem Starten den Cache zu leeren (siehe obigen Warnhinweis)!

Nun kann man die globalen Gruppen in Kurse einschreiben, Näheres dazu siehe unten.

Einschreibungen synchron halten

Wenn man eine globale Gruppe in einen Kurs einschreibt, dann werden die momentanen Mitglieder dieser Gruppe in den Kurs eingeschrieben. Ändert sich später die Zusammensetzung der Gruppe, so ändert dies zunächst nichts an den eingeschriebenen Teilnehmern.

Man kann allerdings die eingeschriebenen Teilnehmer mit den Mitgliedern der globalen Gruppe synchron halten. Dies erledigt „Cohort Sync“.

Site administration / Plugins / Enrolments / Manage enrol plugins

Hier aktiviert man die Einschreibemethode „Cohort sync“ bzw. auf Deutsch „Globale Gruppe“.

Site administration / Plugins / Enrolments / Cohort sync

(Auf Deutsch wieder „Globale Gruppe“)

Hier kann man eine Standardrolle für die Einschreibung zuweisen – sinnvollerweise Schüler/in. Vor allem aber kann man festlegen, was passiert, wenn jemand nicht mehr in einer Globalen Gruppe ist: Hier ist die Option „Disable course enrolment“ (Kurseinschreibung deaktivieren) zu empfehlen, da im anderen Fall sämtliche Aktivitäten des Users gelöscht werden. Mit der empfohlenen Einstellung bleiben sie aber erhalten, und wenn man den Teilnehmer wieder in den Kurs einschreibt, sind sie wieder verfügbar.

Wieder auf dieser Seite:

Site administration / Server / Tasks / Scheduled tasks

aktiviert man den Task „Cohort enrolment sync task“.

Globale Gruppe in Kurs einschreiben

Möchte man in einen Kurs z. B. die Klasse 10a einschreiben, so fügt man eine entsprechende Einschreibemethode hinzu.

Man navigiert bei der Kursverwaltung zu den Einschreibemethoden Kurs-Administration / Nutzer/innen / Einschreibemethoden) und wählt „Methode hinzufügen“. Hier wird nun schon „Globale Gruppe“ (englisch: Cohort) angeboten.

Bei den Einstellungen muss man nun die globale Gruppe auswählen. Das Drop-Down-Menü fasst eventuell nicht alle Gruppen, aber wenn man in dem Feld anfängt zu tippen, so wird die Liste entsprechend aktualisiert.

Die anderen Felder belässt man bzw. nimmt Einstellungen nach den eigenen Wünschen vor.

Es sollten nun alle Mitglieder der globalen Gruppe in dem Kurs eingeschrieben sein. Durch Cohort-Sync wird dies synchron gehalten, und durch die LDAP-Syncing-Skripte wird die globale Gruppe mit dem Schulserver abgeglichen.

Feintuning

Vor allem bei der LMN 6.2 stören noch zwei Dinge:

  1. Es sind wirklich alle Gruppen verfügbar, also auch Raumgruppen, Administratoren etc.
  2. Bei den Klassen sind auch diejenigen Lehrerinnen und Lehrer Mitglieder, die sich in der Schulkonsole in die Klasse eingeschrieben haben.

Wir syncen deshalb mit den LDAP-syncing-Skripts nur die Projektgruppen und verwenden für die Klassen ein bei Belwü schon vorinstalliertes Plugin, dass die globalen Gruppen aus Profilfeldern generiert.

Wen dies nicht stört, der kann diesen Abschnitt überspringen.

Nur die Projektgruppen syncen

Hierfür benötigt man die modifizierte Version des Plugins „Ldap syncing scripts“, das eine zusätzliche Option „Group filter“ bereitstellt. Auf der Einstellungsseite:

Site administration / Plugins / Local plugins / LDAP syncing scripts

ergänzt man folgende Option:

Group filter: (cn=p_*)

Dieser Filter sorgt dafür, dass nur noch die Projektgruppen übernommen werden. Selbstverständlich kann man auch eigene LDAP-Filter angeben.

Und nicht vergessen: Vor dem Testen den Moodle-Cache leeren!

Klassen und Lehrer syncen

Hierzu verwenden wir das Plugin "Profile field based cohort membership (local_profilecohort)". Mit diesem Plugin ist es möglich, Moodle-User anhand eines Profilfeldes in globale Gruppen einzutragen.

Das Plugin ist bei Belwü schon installiert, ansonsten lädt man es herunter und installiert es genau so wie oben für das Plugin local_ldap beschrieben.

Vorarbeiten 1: Homeverzeichnis ins Moodle-Profil

Vorab muss man dafür sorgen, dass jeder User in seinem Profil irgendwo seine Klasse stehen hat. Dies stellt man bei der Konfiguration der LDAP-Authentifizierung ein:

Site administration / Plugins / Authentication / LDAP server

Ganz unten auf der Seite im Abschnitt „Data mapping“ kann man ein Profilfeld mit dem Homeverzeichnis befüllen. Bei Belwü kann man dazu das Feld „Klasse/Lerngruppe“ nutzen, bei anderen Installationen legt man vorher ein entsprechendes benutzerdefiniertes Profilfeld an:

Data mapping (Klasse/Lerngruppe): sophomorixAdminClass (LMN 7) oder homeDirectory (LMN 6.2)
Update local (Klasse/Lerngruppe): On every login
Update external (Klasse/Lerngruppe): Never
Lock value (Klasse/Lerngruppe): Locked

Nun wird bei jeder Anmeldung das Homeverzeichnis der User in dieses Feld geschrieben. Das passiert auch gleich für alle User, wenn man wie oben beschrieben LDAP-Sync aktiviert hat, aber nur, wenn man jetzt den Moodle-Cache leert.

Vorarbeiten 2: Globale Gruppen anlegen

Die globalen Gruppen muss man hier händisch anlegen. Das geht auf dieser Seite:

Site administration / Users / Accounts / Cohorts

(auf Deutsch wieder „Globale Gruppe“ statt „Cohorts“)

Bei „Add new Cohort“ legt man eine Gruppe für jede Klasse (5a, 5b, …) und eine für die Lehrer an. Die Namen sind frei wählbar, man kann also tatsächlich z. B. „Lehrer/innen“ statt „teachers“ nehmen.

Außer dem Namen der Gruppe muss man nichts angeben.

Plugin aktivieren

Man navigiert zur Plugin-Übersicht:

Site administration / Plugins / Plugins overview

und aktiviert das Plugin „Profile field based cohort membership (local_profilecohort)“ – bei unserem Belwü-Moolde fast ganz unten auf der Seite.

Plugin konfigurieren

Die Konfigurationsseite des Plugins befindet sich hier:

Site administration / Users / Accounts / Profile field based cohort membership

Zunächst wäht man bei „Select cohorts to be managed“ alle Klassengruppen und die Gruppe für die Lehrer/innen aus.

Bei „Add new rule“ legt man dann für jeder Klasse und die Lehrergruppe eine Regel nach folgendem Schema an:

„If Klasse/Lerngruppe Contains 5a the user will be added to cohort 5a“

Geplanten Task aktivieren

Die Zuordnung geschieht sofort bzw. bei der Anmeldung, trotzdem muss man einen geplanten Task aktivieren. Das geht wieder hier:

Site administration / Server / Tasks / Scheduled tasks

Und der Task heißt „Update cohorts from custom user profile fields“. Man aktiviert den Task und belässt ansonsten die Einstellungen.

Tipps und Tricks

Kurse per CSV-Datei anlegen

Viele Kurse kann man in einem Rutsch per CSV-Upload anlegen (offizielle Dokumentation). Das geht hier:

Site administration / Courses / Upload courses

Eine solche Datei könnte z. B. so aussehen:

category_idnumber,shortname,fullname,format
Klassen,9aMathe,9a Mathematik,weeks
Klassen,9aBio,9a Biologie,weeks

Die „category_idnumber“ kann man bei den Einstellungen der Kurskategorien vorgeben – es muss keine Zahl sein.

Leider kann man nicht gleich die Klasse 9a einschreiben (dafür gäbe es aber wieder ein Plugin).

Die Kurse haben noch keine Lehrer/innen. Das kann man aber nachholen:

Lehrer/innen den Kursen zuordnen per CSV-Upload

Möchte man bestehenden Kursen einen oder mehrere Lehrer/innen zuordnen, so legt man eine CSV-Datei nach folhendem Format an:

username,course1,type1
mueller,9aMathe,2
mueller,9aBio,2

Wie man sieht kann man denselben Usernamen mehrfach auflisten. Alternativ könnte man auch Spalten „course2,type2,course3,type3…“ ergänzen.

Der Typ ist immer eine 2 – das steht für Lehrer/in.

Diese CSV-Datei lädt man hier hoch:

Site administration / Users / Accounts / Upload users

Etwas verwirren: der Button „Upload Users“ führt erst zu einer Preview-Seite. Hier muss man noch einstellen:

Upload type: Update existing useres only

Ldapsearch

Die Parameter für die LDAP-Konfiguration kann man gut mit dem Tool ldapsearch testen. Eine für die LMN angepasste Anleitung findet sich hier.

Upgrade Moodle (nicht nur) bei Belwü

Beim Upgrade von Moodle auf eine neuere Version ist eine erneute Installation des Plugins erforderlich. Dazu kopiert man einfach den Ordner „ldap“ wieder nach „moodle/local“, anschließend meldet man sich als Administrator an, worauf die Datenbank aktualisiert wird. Die Einstellungen bleiben dabei erhalten.

Bei Belwü findet man nach einem Upgrade im Ordner „Website root“ ein Verzeichnis „moodle_old“, das ist die alte Moodle-Installation – bei Bedarf kann man sich hier schnell den Ordner „ldap“ herkopieren.

 [[anwenderwiki:webapps:moodle:moodle_extern_ldap:start]] anwenderwiki/webapps/moodle/moodle_extern_ldap/start.txt · Zuletzt geändert: 2023/05/25 15:58 von jrichter