Auf den nachfolgenden Seiten beschreibe ich die Installation und Einrichtung eines zusätzlichen Webservers für ein Wiki innerhalb des pädagogischen Netzwerkes mit "einfacher" Anbindung an den bei uns genutzten Schulserver IServ.

Die Anbindung erfolgt durch die Verknüpfung der Benutzerdaten und der automatischen Anmeldung mit einem Benutzerkonto auf unserem Schulserver. Diese Dokumentation bezieht sich auf die an unserer Schule vorhandene Infrastruktur und ist zum Teil vereinfacht und/oder anonymisiert. Insbesondere die Server- und Domainnamen, IP-Adressen, Namen und Bezeichnungen der Zertifikate sind entsprechend anzupassen, Passwörter ausreichend stark und sinnvoll zu wählen und die Systeme und Infrastruktur aktuell zu halten! Auch wenn ich die nachfolgenden Befehle überprüft habe, mag ich nicht ausschließen, dass die Maskierung von z.B. HTML-Tags o.ä. bei den paar Kommandozeilenbefehlen doch noch etwas durcheinander gebracht hat. Die meisten öffnenden und schließenden spitzen Klammern (< & >) dürfte ich korrigiert haben, aber ein paar Formatierungen (erkennbar an vielen Leerzeilen) funktionieren noch nicht mit der Darstellung des Codes.

Das Wiki soll als Hilfe bei der Benutzung des Schulservers über die IServ-Weboberfläche oder der schuleigenen Notebooks und interaktiven Tafeln dienen sowie bei der Einrichtung der schülereigenen Notebooks und weiterer Endgeräte helfen. Dafür gab es zuerst die Idee, Verfahren und Methoden für die Administration eigener Endgeräte und die Nutzung der Funktionen unseres Schulservers "klassisch" zu sammeln und zusammenzuführen. Ein zentrales Dokument enthielte zwar alle wesentlichen Informationen, ist aber meist nicht aktuell, da eine neue oder geänderte Information erst hinzugefügt werden muss. Zudem wären alle bisher ausgegebenen Sammlungen nicht mehr auf dem neuesten Stand. Insbesondere audiovisuelle Medien lassen sich auch nicht direkt einbinden.

Ein Wiki kann vielfältige positive Effekte im Unterricht und in schulischen Kontexten aufweisen: Kollaboration, Kommunikation & Vernetzung sind wesentliche Merkmale! Die prinzipbedingt reduzierten Formatierungsmöglichkeiten führen - nach einer kurzen Einarbeitung in die wichtigsten Funktionen - zu schnellen Ergebnissen. Mit der Kreativität bei der Darstellung von Inhalten ist man schon fast bei den 4K... All dies erscheint mir den doch deutlichen Arbeitsaufwand für ein Wiki wert zu sein.

Wer diese Anleitung nutzen mag, um für eigene Zwecke ein Wiki aufzusetzen, darf das unter der angegebenen Lizenz gerne. Ich freue mich über Erfahrungsberichte oder Einsatzmöglichkeiten - am einfachsten bin ich über unser Kontaktformular erreichbar.

Creative Commons Lizenzvertrag
Dieses Werk ist lizenziert unter einer Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 4.0 International Lizenz.


Das Betriebssystem meiner Wahl ist Debian, einerseits verwende ich es privat und IServ basiert auch auf einem Debian, sodass die Administration einfacher erfolgen kann.

Nach der Installation sollte ein SSH-Zugang angelegt werden, damit das System später headless administriert werden kann. Dabei sollte gleich der Zugang ausschließlich mit Schlüsseldateien eingerichtet und eine Anmeldung mit Passwort deaktiviert werden.

Update

Ein Update schadet nicht...

apt update
apt list --upgradable
apt upgrade

Für das Wiki sind weitere Pakete zu installieren. Je nach verwendetem Betriebssystem sind ggf. die Paketquellen anzupassen. Debian hat z.B. die Nennung der PHP-Version in den Paketen mit PHP7 eingestellt. Weitere Software kann als Abhängigkeit mit installiert werden. (z.B. texlive).

apt install php php-apcu php-curl php-intl php-mbstring php-mysql php-xml mariadb-server apache2 libapache2-mod-php imagemagick zip unzip php-zip

Wenn MySQL auf einem eigenen Server genutzt wird, sollte eine entsprechend abgesicherte Installation verwendet werden. Standardmäßig wird für den root-Benutzer von MySQL kein Passwort gesetzt - das ist natürlich außerhalb von Testumgebungen eher ungünstig...

mysql_secure_installation

MySQL-Installation absichern

Ein sicheres Passwort setzen, anonyme Benutzer entfernen, den remote-login für root deaktivieren und die "test"-Datenbank entfernen: alles geführt und einfach. Die Datenbank kann durch die Installationsroutine von Mediawiki erstellt und eingerichtet werden, sofern man auf einem eigenen Server auch das Passwort für den root-Benutzer von MySQL hat. Sonst ist die entsprechende Dokumentation zu Rate zu ziehen.

In den meisten Situation sollte es sinnvoll sein, einen eigenständigen Datenbankbenutzer einzurichten, der natürlich nicht "newuser" heißt und das Passwort "password" hat... Die Benutzerdaten werden später unverschlüsselt(!) in der entsprechenden Konfiguration des Wikis gespeichert sein, damit darauf zugegriffen werden kann. Daher sollte dieser Benutzer nicht root sein.

mysql -u root -p
mysql> CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

PHP konfigurieren

Für die Konfiguration verwende ich vim, aber auch nahezu jeder andere Editor wird möglich sein. Die nachfolgenden Werte funktionieren bei uns, vielleicht müssen diese auch nicht unbedingt geändert werden, wenn z.B. keine Videos in das Wiki mit hochgeladen und eingebunden werden.

vim php.ini
memory_limit = 256M
post_max_size = 128M
upload_max_filesize = 100M

Da in den Paketquellen über Debian nur eine (deutlich) ältere Version von MediaWiki zu installieren ist, habe ich eine aktuellere Version installiert, die gleichzeitig den OAuth-Patch nicht mehr benötigt. Für den Fall, dass man doch selbst etwas patchen möchte: in das Verzeichnis der zu verändernden Datei wechseln und die Datei mit den Änderungen dorthin kopieren/verschieben, dann patch originalfile patchfile ausführen.

Die aktuelle Version von MediaWiki herunterladen. In einem vorangegangenen Test hatte ich noch die Version "1.31.1" genutzt, damit funktioniert die Einbindung in das pädagogische Netzwerk und ein Single-Sign-On problemlos.

wget https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.0.tar.gz

Das heruntergeladene Archiv entpacken und ggf. verschieben, dann Verzeichnis ggf. umbenennen und die Rechte anpassen, sodass der Webserver nur das Setup speichern kann.

tar -xvzf mediawiki-1.32.2.tar.gz -C /var/www
mv /var/www/mediawiki-1.33.0 /var/www/mediawiki
chown -R root:root /var/www/mediawiki
chmod a+w /var/www/mediawiki/mw-config

Auch die Rechte weiterer Ordner müssen ggf. angepasst werden; am einfachsten ist das mit der Übernahme der jeweiligen Ordner durch ein chown möglich.

chown -R www-data:www-data [Ordner]

Die Konfiguration des Webservers ist in einer Datei oder mit mehreren Dateien (Virtual Hosts) möglich. Diese liegen in Unterordnern des entsprechenden Verzeichnisses und die Konfiguration muss mit a2ensite aktiviert werden. Zuerst sollte die Standardseite von Apache deaktiviert werden.

Zur Vereinfachung gehe ich nun davon aus, dass das Wiki der einzige Host sein wird, der auf dem entsprechenden Server läuft und keine weiteren VirtualHosts notwendig sind. Das nachfolgende Beispiel ist eine vereinfachte und gekürzte Version der default-Konfiguration.

vim /etc/apache2/sites-available/wiki.conf
<Virtualhost *:80>
ServerName wiki.jbg-schule.de
Alias /mediawiki "/var/www/mediawiki"

ServerAdmin Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
DocumentRoot /var/www/mediawiki
# Redirect "/" "https://wiki.jbg-schule.de/"

<Directory "/var/www/mediawiki">
Require all granted
AllowOverride All
Options +FollowSymLinks

</Directory>

ErrorLog ${APACHE_LOG_DIR}/wiki_error.log
CustomLog ${APACHE_LOG_DIR}/wiki_access.log combined
</VirtualHost>

Weitere Module werden z.B. für das einfache Umschreiben der URLs notwendig sein. Diese und ggf. weitere sind zuvor zu aktivieren. Ebenfalls sollte der gerade angelegte Virtual Host aktiviert werden. Und nach einer Änderung der Konfiguration ist der Webserver neu zu laden.

a2enmod rewrite
a2ensite wiki.conf
systemctl apache2 reload

Die weitere Einrichtung des Wikis erfolgt zuerst über die Weboberfläche. Dazu mit einem Browser die URL https://wiki.jbg-schule.de/mediawiki aufrufen.

Sollte an einer (beliebigen) Stelle die Installation über die Weboberfläche nicht weiter möglich sein, so können ggf. notwendige Änderungen auf der Kommandozeile vorgenommen werden. Der Webserver ist danach neu zu laden (s.o.). Der Installationsvorgang kann dann erneut gestartet werden (ggf. bei die nachfolgende Auswahl bestätigen, die bereits eingegebenen Daten zu löschen). Bei der geführten Installation ist eine Hilfe über den entsprechenden Link zugänglich.

  1. Sprache wählen
  2. Datenbank verbinden
    1. Datenbankserver auswählen/eintragen
    2. Datenbankname und ggf. Präfix wählen, z.B. wiki oder ein weniger leicht zu erratender Name
    3. Benutzerdaten des Datenbankbenutzers eintragen (s. MySQL)
  3. Datenbanksystem
  4. Name
    1. Administratorkonto
    2. Weitere Konfigurationseinstellungen
  5. Optionen (für bestimmte Zwecke sind offene Wikis eine sehr gute Wahl, in schulischen Kontexten könnte ein geschlossenes Wiki besser geeignet sein)
  6. Installieren

Nach der Installationsroutine ist die Konfigurationsdatei LocalSettings.php herunterzuladen und auf dem Server im angegebenen Pfad gespeichert werden. Wenn man den ssh-Zugang auf dem Server bereits eingerichtet hat, kann man mit "scp" die Datei über ssh kopieren. Für den nachfolgenden Befehl wird von einer Schlüsseldatei in "~/.ssh/id_wiki" und der heruntergeladenen Konfiguration unter "~/Downloads/LocalSettings.php" ausgegangen. Weitere Hinweise zu (un-)möglichen Variablen in der "LocalSettings.php" sind unter der Dokumentation von MediaWiki zu finden.

scp -i ~/.ssh/id_wiki ~/Downloads/LocalSettings.php Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!:/var/www/mediawiki/LocalSettings.php

Die Anbindung erfolgt über zwei zusätzlich zu installierende Extensions: PluggableAuth und OpenID Connect. Diese Extensions müssen(!) zur eingesetzten MediaWiki-Version passen; eine Suche in der entsprechenden Kategorie ist sinnvoll. Die nachfolgenden befehle laden die über die Website verlinkten Extensions auf den Server und entpacken diese dann in den richtigen Ordner innerhalb des MediaWikis.

cd ~
wget {URL}/PluggableAuth{...}.tar.gz
wget {URL}/OpenIDConnect{...}.tar.gz
tar -xzf PluggableAuth{...}.tar.gz -C /var/www/mediawiki/extensions
tar -xzf OpenIDConnect{...}.tar.gz -C /var/www/mediawiki/extensions

In der Weboberfläche des Schulservers IServ sind die entsprechenden Einstellungen vorzunehmen, damit ein Single-Sign-On möglich ist. Dafür ist in der Verwaltung die Option "Single-Sign-On" unter "System" aufzurufen und zu konfigurieren.

  1. Allgemein: Vertrauenswürdig!
  2. Beschränkungen: Autorisierungs-Code & Client-Anmeldedaten, Scopes (E-Mail, Gruppen, OpenID und Profil)
  3. Anwendung: entsprechende URLs eintragen (https://wiki.jbg-schule.de/mediawiki/index.php/Spezial:Anmelden und https://wiki.jbg-schule.de/mediawiki/index.php/Spezial:PluggableAuthLogin)

Die in der Weboberfläche angezeigte Client-ID sowie das Client-Geheimnis in die "LocalSettings.php" übertragen:

vim /var/www/mediawiki/LocalSettings.php
wfLoadExtension( 'PluggableAuth' );
$wgGroupPermissions['*']['autocreateaccount'] = true;
$wgPluggableAuth_EnableAutoLogin = true;
$wgPluggableAuth_EnableLocalLogin = false;

wfLoadExtension( 'OpenIDConnect' );
$wgOpenIDConnect_Config = ['https://jbg-schule.de' => ['clientID' => 'XXXXXXXXXX', 'clientsecret' => 'XXXXXXXXXX', 'name' => 'IServ', 'scope' => 'openid profile email']];
$wgOpenIDConnect_UseRealNameAsUserName = true;
$wgOpenIDConnect_UseEmailNameAsUserName = false;
$wgOpenIDConnect_MigrateUsersByUserName = false;
$wgOpenIDConnect_MigrateUsersByEmail = false;
$wgOpenIDConnect_ForceLogout = false;

Nachfolgend sind die Abhängigkeiten von OpenIDConnect und ggf. weiterer Extensions zu installieren... Dazu in der Datei "composer.local.json" mindestens Folgendes einfügen:

vim /var/www/mediawiki/composer.local.json
{
"extra": {
"merge-plugin": {
"include": [
"extensions/OpenIDConnect/composer.json"
]
}
}
}

Dann den Composer in das Hauptverzeichnis von MediaWiki herunterladen und ausführen (nach Möglichkeit nicht als root)...

cd /var/www/mediawiki
wget https://getcomposer.org/composer.phar
php /var/www/mediawiki/composer.phar update

... und das Update-Skript von MediaWiki durchlaufen lassen.

php /var/www/mediawiki/maintenance/update.php

Auch wenn nun die erforderlichen Pakete installiert sind, kann ein "Single-Sign-On" noch nicht erfolgen. Der IServ lehnt seit einiger Zeit Anmeldeversuche über unverschlüsselte Anfragen ab, daher ist für die Anmeldung (z.B. das redirect) zuerst die SSL-Verschlüsselung einzurichten. Weiterhin ist auch in der LocalSettings.php die https-URL einzutragen, sonst wird das nix.


Für das Verteilen der SSL-Zertifikate ist ein SSH-Zugang mit öffentlichem Schlüssel auf dem Wiki erforderlich und ein entsprechender privater Schlüssel auf dem IServ.

SSL-Zertifikate erzeugen.

Die Ausstellung von LetsEncrypt-Zertifikaten ist auf dem IServ bereits eingerichtet, daher können weitere SSL-Zertifikate einfach ergänzt werden.

vim /etc/iserv/ssl-domains.d/wiki
wiki.jbg-schule.de

Die folgenden Befehle sind ebenfalls auf dem IServ auszuführen. Diese kopieren die vorher erzeugten Dateien auf das Wiki in die angegebenen Ordner. Bei anderen Ordnern/Dateinamen sind diese ebenso anzupassen wie der Servername.

scp -i /root/.ssh/wiki /etc/ssl/private/wiki.key Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!:/etc/ssl/private/wiki.key
scp -i /root/.ssh/wiki /etc/ssl/certs/wiki.chain Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!:/etc/ssl/certs/wiki.chain
scp -i /root/.ssh/wiki /etc/ssl/certs/wiki.crt Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!:/etc/ssl/certs/wiki.crt

Damit diese Befehle automatisch ausgeführt werden (z.B. über einen entsprechenden Cronjob), lässt sich ein einfaches Skript basteln.

vim /usr/lib/iserv/chkcert.d/ssl-wiki
#!/bin/bash
phase="$1"
certname="$2"
if [ "$phase" = "post" ] && [ "$certname" = "wiki" ]
then
scp -i /root/.ssh/wiki /etc/ssl/certs/wiki.crt Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!:/etc/ssl/certs/wiki.crt 
scp -i /root/.ssh/wiki /etc/ssl/private/wiki.key Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!:/etc/ssl/private/wiki.key 
scp -i /root/.ssh/wiki /etc/ssl/certs/wiki.chain Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!:/etc/ssl/certs/wiki.chain fi

Dieses Skript ausführbar markieren und danach über LetsEncrypt das Zertifikat anfordern.

chmod +x /usr/lib/iserv/chkcert.d/ssl-wiki
chkcert --name wiki -l

Wieder zurück zu unserem Wiki...

Die Apache-Konfiguration ggf. überprüfen. Nachfolgend habe ich wieder eine gekürzte Version der default-Konfiguration verwendet.

vim /etc/apache2/sites-available/wiki-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
ServerName wiki.jbg-schule.de
Alias /mediawiki "/var/www/mediawiki"

DocumentRoot /var/www/mediawiki
RedirectMatch ^/$ /mediawiki/

#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

#Include conf-available/serve-cgi-bin.conf

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

SSLCertificateFile	/etc/ssl/certs/wiki.crt
SSLCertificateKeyFile /etc/ssl/private/wiki.key

#   SSL Engine Options:
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>

</VirtualHost>
</IfModule>

Nun ist der gerade angelegte Virtual Host und das erforderliche Modul für die SSL-Verschlüsselung zu aktivieren. Nach einer Änderung der Module ist der Webserver neu zu starten.

a2ensite wiki-ssl.conf
a2enmod ssl
systemctl restart apache2

Portweiterleitung

Damit das Wiki auch von außerhalb des pädagogischen Netzes (für berechtigte Benutzer) erreichbar ist, muss dieser Dienst nach außen weitergeleitet werden, bzw. Anfragen den jeweiligen Server innerhalb des Netzwerkes erreichen können. Der DNS des IServ muss dazu die angegebene interne IP entsprechend auflösen können, der Server ist mit seiner internen IP also auch in die Geräteverwaltung einzutragen.

vim /etc/bind/db.forward.local
wiki A 10.0.0.10

Remote Name Daemon Control ggf. neustarten (# rdnc reload) und einen Virtual Host auf dem IServ anlegen.

vim /etc/apache2/sites-available/wiki.conf
<VirtualHost *:80>

ServerAdmin Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
ServerName wiki.jbg-schule.de
ErrorLog /var/log/apache2/wiki_error.log
CustomLog /var/log/apache2/wiki_access.log combined

# Let's encrypt-Unterstützung
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/.well-known/acme-challenge/
RewriteRule ^(.*)$ /var/lib/certbot/webroot/$1 [END]
<Directory /var/lib/certbot/webroot>
Allow from all
Require all granted
</Directory>
# SSL erzwingen
Redirect / https://wiki.jbg-schule.de/
</VirtualHost>

<IfModule mod_ssl.c>

<VirtualHost *:443>

ServerAdmin Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
ServerName wiki.jbg-schule.de
ErrorLog /var/log/apache2/wiki_error.log
CustomLog /var/log/apache2/wiki_access.log combined
RewriteEngine On
RewriteRule (.*) https://wiki.jbg-schule.de$1 [P]

SSLEngine on
SSLCertificateFile /etc/ssl/certs/wiki.crt
SSLCertificateChainFile /etc/ssl/certs/wiki.chain
SSLCertificateKeyFile /etc/ssl/private/wiki.key

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
Header always set Strict-Transport-Security: "max-age=15768000"

</VirtualHost>
</IfModule>

SSL auf dem IServ für das Wiki aktivieren. Dadurch ist bei einem Zugriff über den IServ (also von außen) das Zertifikat für das Wiki mit im Zertifikat des IServ integriert. Änderungen an Seiten und Mods aktivieren sowie den Webserver neustarten bzw. neuladen lassen.

vim /etc/iserv/ssl-domains
wiki.jbg-schule.de
a2enmod proxy
a2enmod proxy_http
a2ensite wiki
service apache2 reload

Dann können noch die entsprechenden Zertifikate überprüft werden.

chkcert -l

Abschließend sollte die Anmeldung mit verschiedenen Benutzer geprüft werden.