Benutzer-Werkzeuge

Webseiten-Werkzeuge


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

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
anwenderwiki:webapps:moodle:moodle_extern_ldap:start [2020/08/11 04:59] jrichteranwenderwiki:webapps:moodle:moodle_extern_ldap:start [2023/05/25 15:58] (aktuell) – [LDAP-Gruppen mit globalen Gruppen in Moodle syncen] jrichter
Zeile 1: Zeile 1:
 +
 +====== Externes Moodle mit dem LDAP synchronisieren ======
 +
 +<note info>
 +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\\
 +[[anwenderwiki:webapps:moodle:moodle_extern_ldap:start#upgrade_moodle_(nicht_nur)_bei_belwue|Upgrade-Hinweis]]
 +</note>
 +
 +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: [[anwenderwiki:webapps:moodle:moodle_extern_gegenldap62:start|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:
 +
 +<code>ldapsearch -x -w "" -H "ldaps://localhost" -b "ou=accounts,dc=schule,dc=lan"  "(&(|(gidNumber=10000)(gidNumber=10103)(gidNumber=10105))(objectClass=posixAccount))" cn</code>
 +
 +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.
 +
 +<note important>
 +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//   
 +</note>
 +
 +===== LDAP-Gruppen mit globalen Gruppen in Moodle syncen =====
 +
 +Dies ist mit Moodle-Bordmitteln nicht möglich, aber es gibt passende Plugins. Ich empfehle die [[https://moodle.org/plugins/local_ldap|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) {{:anwenderwiki:webapps:moodle:moodle_extern_ldap:local_ldap_moodle42_2023022702-jr.zip|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:
 +
 +  - Es sind wirklich alle Gruppen verfügbar, also auch Raumgruppen, Administratoren etc.
 +  - 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 [[https://moodle.org/plugins/local_profilecohort|"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 ([[https://docs.moodle.org/37/en/Upload_courses|offizielle Dokumentation]]). Das geht hier:
 +
 +//Site administration / Courses / Upload courses//
 +
 +Eine solche Datei könnte z. B. so aussehen:
 +
 +<code>category_idnumber,shortname,fullname,format
 +Klassen,9aMathe,9a Mathematik,weeks
 +Klassen,9aBio,9a Biologie,weeks</code>
 +
 +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:
 +
 +<code>username,course1,type1
 +mueller,9aMathe,2
 +mueller,9aBio,2</code>
 +
 +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 [[[[anwenderwiki:scripting:ldapsearch|hier]].
 +
 +===== Upgrade Moodle (nicht nur) bei Belwü =====
 +
 +Beim Upgrade von Moodle auf eine neuere Version ist eine erneute [[anwenderwiki:webapps:moodle:moodle_extern_ldap:start#installation_des_plugins|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]]