Sichere Wiki-Migration: Difference between revisions

From
Jump to navigation Jump to search
No edit summary
mNo edit summary
 
(25 intermediate revisions by 3 users not shown)
Line 1: Line 1:
Diese Seite erklärt, wie man das Mediawiki des Lehrstuhls Softwarearchitektur erfolgreich migriert. Desweiteren liefert es Techniken, die ein Mediawiki in einigen Bereichen der Sicherheit verbessert.
Diese Seite erklärt, wie man das Mediawiki des Lehrstuhls Softwarearchitektur erfolgreich migriert. Desweiteren liefert es Techniken, die ein Mediawiki in einigen Bereichen der Sicherheit verbessert.


== Der Ist-Zustand des Altsystem ==
== Der Ist-Zustand des Ausgangssystems ==
Beim Altsystem handelt es sich um ein TurnKey-Appliance, welches sich für den Einsatz eines Mediawikis spezialisiert ist. Es hat die Version 12.
Beim Ausgangssystem handelt es sich um eine TurnKey-Linux-Appliance, welche für den Einsatz eines Mediawikis spezialisiert ist. Es hat die Version 12. Aktuell wäre die Version 14.
Als Betriebssystem liegt Debian in der Version 6.0.7 vor.
Als Betriebssystem liegt Debian in der Version 6.0.7 vor. Aktuell ist die Version 9.
Diese Angaben lassen sich auf der Maschine selbst finden.
Diese Angaben lassen sich auf dem System selbst in Erfahrung bringen.


Das Mediawiki befindet sich in der Version 1.15.
Das Mediawiki befindet sich in der Version 1.15. Aktuell ist zurzeit (Stand Oktober 2017) die Version 1.29<ref>https://www.mediawiki.org/wiki/Release_notes/1.29#MediaWiki_1.29.1</ref>.
Die folgende Tabelle zeigt den Unterbau, das das Mediawiki verwendet.
Die folgende Tabelle zeigt den Unterbau, den das Mediawiki verwendet.
{| class="wikitable"
{| class="wikitable"
|-
|-
! Komponente !! Name !! Version
! Komponente !! Name !! Version !! Aktuell (Stand Oktober 2017)
|-
|-
| Webserver || Apache || 2.2
| Webserver || Apache || 2.2 || 2.4<ref>https://httpd.apache.org/</ref>
|-
|-
| Datenbank || MySQL || 5.1
| Datenbank || MySQL || 5.1 || 5.7.19<ref>https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-19.html</ref>
|-
|-
| Programmiersprache || PHP || 5.3
| Programmiersprache || PHP || 5.3 || 7.1<ref>http://php.net/supported-versions.php</ref>
|}
|}
Diese Angaben können auf der [[Special:Version|Versionsseite]] des Mediawiki eingesehen werden.
Diese Angaben können auf der [[Special:Version|Versionsseite]] des Mediawiki eingesehen werden.


Auf dem Mediawiki sind folgende Extensions installiert:
Die Funktionalität von MediaWiki kann durch Extensions erweitert werden. Auf dem Mediawiki sind folgende Extensions installiert:
* [https://www.mediawiki.org/w/index.php?oldid=2041521 AWC‘s MediaWiki Forum]
* [https://www.mediawiki.org/w/index.php?oldid=2041521 AWC‘s MediaWiki Forum] (<span style="color: red">veraltet</span>) Alternative: [https://www.mediawiki.org/wiki/Extension:WikiForum WikiForum]
* [https://www.mediawiki.org/wiki/Extension:CategoryTree CategoryTree]
* [https://www.mediawiki.org/wiki/Extension:CategoryTree CategoryTree]
* [https://www.mediawiki.org/wiki/Extension:Charinsert CharInsert]
* [https://www.mediawiki.org/wiki/Extension:Charinsert CharInsert]
* [https://www.mediawiki.org/wiki/Extension:Cite Cite]
* [https://www.mediawiki.org/wiki/Extension:Cite Cite]
* [https://www.mediawiki.org/wiki/Extension:ConfirmEdit ConfirmEdit]
* [https://www.mediawiki.org/wiki/Extension:ConfirmEdit ConfirmEdit]
* [https://www.mediawiki.org/w/index.php?oldid=676802 FCKeditor]
* [https://www.mediawiki.org/w/index.php?oldid=676802 FCKeditor] (<span style="color: red">veraltet</span>) Alternative: [https://www.mediawiki.org/wiki/Extension:WikiEditor WikiEditor]
* [https://www.mediawiki.org/wiki/Extension:Gadgets Gadgets]
* [https://www.mediawiki.org/wiki/Extension:Gadgets Gadgets]
* [https://www.mediawiki.org/wiki/Extension:Nuke Nuke]
* [https://www.mediawiki.org/wiki/Extension:Nuke Nuke]
* [https://www.mediawiki.org/wiki/Extension:Math Math]
* [https://www.mediawiki.org/wiki/Extension:Math Math]
* [https://www.mediawiki.org/wiki/Extension:ParserFunctions ParserFunctions]
* [https://www.mediawiki.org/wiki/Extension:ParserFunctions ParserFunctions]
* [https://www.mediawiki.org/wiki/Extension:Preloader Preloader]
* [https://www.mediawiki.org/wiki/Extension:Preloader Preloader] (<span style="color: red">veraltet</span>) Alternative: Keine
* [https://www.mediawiki.org/wiki/Extension:Renameuser RenameUser]
* [https://www.mediawiki.org/wiki/Extension:Renameuser RenameUser]
* [https://www.mediawiki.org/wiki/Extension:StringFunctions StringFunctions]
* [https://www.mediawiki.org/wiki/Extension:StringFunctions StringFunctions] (<span style="color: red">veraltet</span>) Alternative: [https://www.mediawiki.org/wiki/Extension:ParserFunctions ParserFunctions]
* [https://www.mediawiki.org/wiki/Extension:SyntaxHighlight SyntaxHighlighting (GeSHi)]
* [https://www.mediawiki.org/wiki/Extension:SyntaxHighlight SyntaxHighlighting (GeSHi)]
* [https://www.mediawiki.org/wiki/Extension:UserMerge User Merge and Delete]
* [https://www.mediawiki.org/wiki/Extension:UserMerge User Merge and Delete]


== Aktuell (Oktober 2017) ==
== Migration ==
Dieser Bereich dient zum Vergleich zu [[Der Ist-Zustand des Altsystem|obigen Abschnitt]]


== Aufgaben ==
=== Vorbereitung ===
F&uuml;r die Migration muss ein neues System bereitsstehen, welches mindestens die folgende Software enth&auml;lt<ref>https://www.mediawiki.org/wiki/Installation#Summary</ref>:
Mediawiki aktualisieren
* einen Webserver (beispielsweise Apache)
Erstellung einer Auswahl von Zusatzpaketen
* PHP
Sichere Konfiguration bezüglich Spam und Nutzerverwaltung
* einen relationenalen Datenbankserver (z.B. MySQL, MariaDB, PostgreSQL)
* ein Mediawiki in der gew&uuml;nschten Version


Das Mediawiki sollte so eingerichtet sein, dass man es &uuml;ber einen Browser aufrufen kann. Das heißt, der Webserver muss das Mediawiki nutzen k&ouml;nnen.
== Unsere Ziele ==


Desweiteren w&auml;re es von Vorteil, wenn alle Extensions, die ben&ouml;tigt werden bereits heruntergeladen, entpackt und in das für Erweiterungen vorgesehene Verzeichnis des Mediawikis verschoben sind.
Primär geht es darum, das Mediawiki zu aktualisieren, nach nützlichen Zusatzpaketen zu recherchieren und eine sichere Konfiguartion gegen Spam zu finden.


'''Bemerkungen:'''
Die Aktualisierung des Mediawikis hat den Grund, dass das System schwer zu pflegen ist. Außerdem besteht, aufgrund der Tatsache, dass das Mediawiki sich in einer nicht mehr vom Entwickler gepflegten Version befindet, die Gefahr, das es bekannte Sicherheitslücken, welche nicht behandelt wurden, das Mediawiki gefährden.


Für TurnKey-Appliances wird nicht empfohlen, Betriebssystem-Aktualisierungen innerhalb bestehender Installationen vorzunehmen <ref>https://www.turnkeylinux.org/docs/appliance-upgrade</ref>. Daher ist es zunächst erforderlich, ein neues System bereitzustellen.
Die Recherche nach nützlichen Zusatzpaketen dient zur Verbesserung der Benutzerfreundlichkeit.


Bis auf die Erweiterungen kann man sich diese Vorarbeit sparen, indem man die aktuellste Turnkey-Mediawiki-Appliance nutzt.
Das Finden einer sicheren Konfiguration gegen Spam hat den Grund, dass in der Vergangenheit auf dem Mediawiki Spam ein Problem darstellt.


Das Betriebssystem kann frei gew&auml;lt werden, solange es für dieses die notwendige Software gibt. Wir haben, aus Interesse, die Migration unter Ubuntu, Debian und OpenSuse durchgef&uuml;hrt. Eine Migration war für alle getesteten Distributionen erfolgreich.
Da auch die Komponenten, die


=== Was ist auf dem Altsystem zu sichern? ===
- aktuelle Software
Auf dem Altsystem sind die folgenden drei Bereiche zu sichern und auf dem neuen System zu &uuml;bertragen:
% - Migration des Datenbestandes und der Konfiguration
* die Datenbank
% - Beibehalten der Funktionalität
* hochgeladene Dateien (z.B. Bilder, Verzeichnis <code>images</code>)
% - evtl. Erweiterung bzw. Verbesserung des Systems
* die Datei <code>LocalSettings.php</code> (falls vorhanden, auch <code>extensions.php</code>, weil <code>LocalSettings.php</code> diese benutzt)


Die Datenbank kann man mit folgendem Kommandozeilenbefehl sichern. (Es kann auch statt <code>root</code> der in der Konfiguration eingetragene Datenbankbenutzer genommen werden.)
== Ist-Zustand (Ausgangssituation) ==
<syntaxhighlight lang="bash">mysql -u root -p --databases <Databasename> > <Name>.sql</syntaxhighlight>


Für hochgeladene Dateien ist lediglich das Verzeichnis zu sichern.
=== Altsystem ===
<syntaxhighlight lang="bash">
Gegeben ist ein Turnkey-Mediewiki in der Version 12.
cd /var/lib/mediawiki # Pfad, wo sich das Verzeichnis images befindet.
Auf diesem befindet sich als Betriebsystem Debian 6.0.7.
tar -czf <Name>.tar.gz images/ # Nicht notwendig, erleichert aber den Transport. Packt die Bilder in ein Archiv.
Das Mediawiki liegt in der Version 1.15 vor.
</syntaxhighlight>


Die Konfigurationsdateien <code>LocalSettings.php</code> sowie die <code>extensions.php</code> liegen unter dem Pfad
Webserver: Apache 2.2
<syntaxhighlight lang="bash">/etc/mediawiki</syntaxhighlight>
PHP 5.3
Datenbank: MySQL 5.1
Finden kann man diese Angaben unter [[Special:Version]].


Mit welchen Mitteln die Bereiche zum neuen System &uuml;bertragen werden, ist jedem selbst &uuml;berlassen. Beispielsweise kann die &Uuml;bertragung mit Hilfe des Programms [https://filezilla-project.org/ Filezilla] oder dem Kommadozeilenprogramm <code>scp</code> vollzogen werden.
Da Altsystem verwendet folgende Extensions:
* AWC‘s MediaWiki Forum
* CategoryTree
* CharInsert
* Cite
* ConfirmEdit
* FCKeditor
* Gadgets
* Nuke
* Math
* ParserFunctions
* Preloader
* RenameUser
* StringFunctions
* SyntaxHighlighting (GeSHi)
* User Merge and Delete


'''Bemerkungen:'''


In zuk&uuml;nftigen Mediawikis des Lehrstuhls Softwarearchitektur k&ouml;nnten sich Pfade zu den Bildern und der <code>LocalSettings.php</code> &auml;ndern.
=== Relevante Informationen ===
Laut x ist es nicht empfohlen, Softwareupdates innerhalb auf ein bestehendes Turnkey System durchzuführen. Es empfiehlt gleich eine neue Turnkey-Appliance zu nehmen.


=== Gesicherte Bereiche ins neue System einpflegen ===
Auf das neue System muss sowohl die Datenbank als auch die Bilder vom Altsystem zur Verfügung gestellt werden.


Die gesicherte Datenbank kann man durch ein Einspielen des zuvor erstellten Datenbank-Dumps wiederhergestellt werden.
Die Extensions, die auf dem Altsystem verwendet werden, müssen für das neue System für die entsprechende Mediawiki Version recherchiert werden. Falls welche nicht mehr zu verwenden sind, weil sie als veraltet gelten, dann sind entsprechende Alternativen zu finden.
<syntaxhighlight lang="bash">mysql -u root -p < <Name>.sql</syntaxhighlight>
Eine Übertragung der Extensions sei nicht zu empfehlen, da diese von der Version des Mediawikis abhängen und dadurch auf einer neueren Version unter Umständen nicht funktionieren.
Wird ausschließlich die Datenbank wiederhergestellt, ist es zudem erforderlich, einen Datenbankbenutzer mit Lese- und Schreibrechten für die eingespielte Datenbank zu erstellen. Dieser kann auf der MySQL-Konsole erstellt werden. Die Zugangsdaten des neu eingerichteten Nutzers müssen später auch in der Konfiguration vermerkt werden.
<syntaxhighlight lang="bash">mysql -u root -p # Aufrufen der MySQL-Konsole</syntaxhighlight>
<syntaxhighlight lang="sql">mysql> GRANT ALL PRIVILEGES ON <dbname>.* TO <username>@localhost IDENTIFIED BY '<password>'</syntaxhighlight>
Die gesicherten Bilder sind in das <code>images</code>-Verzeichnis des neuen System abzulegen.
<syntaxhighlight lang="bash">tar -xzf <Name>.tar.gz /var/www/mediawiki # Entpackung des Archives an dem Ort, wo sich die Bilder, im Normalfall, befinden.</syntaxhighlight>
F&uuml;r das Logo (Bild, welches sich links oben, auf jeder Seite, innerhalb des Wikis, befindet.) muss in der LocalSettings.php der Wert der Variable $wgLogo angepasst werden. Wenn an der Verzeichnisstruktur des Mediawikis keine individuellen Änderungen durchgeführt wurden, würde beispielhaft diese Zeile funktionieren.
<syntaxhighlight lang="php">$wgLogo = “$wgResourceBasePath/images/logo.png“; # $wgResourceBasePath beinhaltet, wenn dieser nicht manuell modifiziert wurde, das Verzeichnis der MediaWiki-Installation.</syntaxhighlight>


Eine Aktualisierung der <code>LocalSettings.php</code> kann vereinfacht werden, indem eine Konfiguration mit Default-Einstellungen zu Hilfe genommen wird. Dies hat außerdem den Vorteil, dass eventuelle grundlegende Änderungen an der Konfiguration besser zu erkennen sind.
Folgende Extentions gelten als veraltet und werden daher nicht mehr gepflegt:
Bei der Übernahme von Einstellungen sind insbesondere folgende Punkte zu beachten:
AWC‘s MediaWiki Forum
* Einstellungen der Datenbank (Datenbankname, -nutzer und -passwort)
FCKeditor
* Hostname des Servers (<code>$wgServer</code>)
Preloader
* Anpassungen der Pfade im Dateisystem (<code>$wgScriptPath</code>, <code>$wgArticlePath</code>)
StringFunctions
* Kompatibilitätsmodus der Datenbank (<code>$wgDBmysql5</code>)


=== Konfiguration des Webservers ===
== Mögliche Zielplattformen und Vorgehensweisen ==
Der Webserver (hier Apache) kann zu großen Teilen mit den Standardeinstellungen betrieben werden.
Die Migration wurde auf verschiedenen Plattformen getestet, weil zum Einen ein persönliches Interesse bestand und zum Anderen, weil keine Zielplattform festgelegt wurde.


Wichtige Anpassungen betreffen die Ausführung von PHP, das Verschieben der Installation in das Wurzelverzeichnis des Webserers und das Ausblenden des Dateinamens <code>index.php</code>.
Auf den folgenden Zielplattformen wurde getestet:
* aktuelle TurnKey Version
* Ubuntu
* Debian
* OpenSuse


Mittels des Befehls <code>a2enmod php</code> kann unter Debian bei installiertem Apache-Webserver, PHP und Apache-PHP-Modul die Ausführung von PHP durch den Webserver aktiviert werden.
Je nach Zielplattform nutzte man Mediawiki aus den Paketquellen oder die händische Installation. Unter händischer Installation ist gemeint, dass sowohl die Für TurnKey ist bereits das Mediawiki, samt dessen Voraussetzungen vorhanden.


Das Ausblenden des Dateinames <code>index.php</code> erfordert mehrere Änderungen an der Konfiguration des Webservers. Diese ist im Verzeichnise <code>/etc/apache2/</code> zu finden.
=== Allgemein ===
Folgende Änderungen sind notwendig:
Die Migration erfolgt im Allgemeinen in folgenden Phasen:
* Setzen der <code>DocumentRoot</code> auf das Installationsverzeichnis von MediaWiki
* Die Datenbank und die Bilder, die das Mediawiki verwendet, auf dem Altsystem sichern.
<syntaxhighlight lang="apache">DocumentRoot /var/lib/mediawiki</syntaxhighlight>
* Die gesicherte Datenbank und die gesicherten Bilder ins neue System übertragen.
* Abschalten des Aliases für MediaWiki. Die Direktive <code>Alias ...</code> in der Datei <code>mediawiki.conf</code> muss dazu auskommentiert werden.
* Datenbank ins neue System einspielen.
* Umschreiben der Pfade
* Die Bilder in das entsprechende Verzeichnis des neuen Systems ablegen.
<syntaxhighlight lang="apache">
* Die Datei LocalSettings.php auf dem neuen System anpassen (Datenbank, Bilder).
RewriteCond %{REQUEST_URI} !^/(stylesheets|images|skins|resources)/
* Die Datei update.php, die sich im Verzeichnis maintenance befindet, ausführen.
RewriteCond %{REQUEST_URI} !^/(redirect|texvc|index|load).php
* Individuelle Konfigurationen aus dem Altsystem auf dem neuen System, wenn möglich, umsetzen.
RewriteCond %{REQUEST_URI} !^/error/(40(1|3|4)|500).html
* Extension installieren. Wenn nötig konfigurieren und herrunterladen.
RewriteCond %{REQUEST_URI} !^/favicon.ico
RewriteCond %{REQUEST_URI} !^/robots.txt
RewriteCond %{REQUEST_URI} !^/skins/
RewriteRule ^/(.*)$ /var/lib/mediawiki/index.php/$1 [L]
</syntaxhighlight>
Eine entsprechende Anleitung ist auch auf der Webseite von MediaWiki<ref>https://www.mediawiki.org/wiki/Manual:Short_URL/Apache</ref> zu finden.


=== Installation / Konfiguration der Extensions ===
=== Beispielhafter Ablauf ===
Es wird vorausgesetzt, dass die Extensions sich bereits im extentions Verzeichnis des Mediawikis befinden.


==== [https://www.mediawiki.org/wiki/Extension:CategoryTree CategoryTree] ====
In der Datei LocalSettings.php muss folgendes hinzugef&uuml;gt werden.
<syntaxhighlight lang="php">wfLoadExtension(‘CategoryTree‘);</syntaxhighlight>
F&uuml;r die Extension [https://www.mediawiki.org/wiki/Extension:CategoryTree CategoryTree] bedarf es keiner Konfiguration.
==== [https://www.mediawiki.org/wiki/Extension:Charinsert CharInsert] ====
In der Datei LocalSettings.php muss folgendes hinzugef&uuml;gt werden.
<syntaxhighlight lang="php">wfLoadExtension(‘CharInsert‘);</syntaxhighlight>
F&uuml;r die Extension [https://www.mediawiki.org/wiki/Extension:Charinsert CharInsert] bedarf es, wenn die zu Verf&uuml;gung stehenden Funktionalit&auml;t als ausreichend gelten, keiner weiteren Konfiguration.


==== [https://www.mediawiki.org/wiki/Extension:Cite Cite] ====
In der Datei LocalSettings.php muss folgendes hinzugef&uuml;gt werden.
<syntaxhighlight lang="php">wfLoadExtension(‘Cite‘);</syntaxhighlight>
F&uuml;r die Extension [https://www.mediawiki.org/wiki/Extension:Cite Cite] bedarf es keiner Konfiguration.
==== [https://www.mediawiki.org/wiki/Extension:ConfirmEdit ConfirmEdit] ====
Je nachdem, welcher Captcha verwendet werden soll, ist die Anweisung f&uuml;r die Installation in der Datei LocalSetting.php eine andere.
<syntaxhighlight lang="php">wfLoadExtension( 'ConfirmEdit/MathCaptcha' ); # Beispiel: Installation von ConfirmEdit unter der Verwendung von MathCaptcha</syntaxhighlight>
Die Extension besitzt bereits eine Standardkonfiguration. Man kann sie durch Eintr&auml;ge in der LocalSettings.php &auml;ndern.


<syntaxhighlight lang="php" line="line">
== Absicherung ==
# Welche Nutzergruppen sollen keine Captchas angezeigt bekommen?
Wenn ein Angreifer das System schädigen will, aus welchen Motiven auch immer, dann würde er versuchen Angriffe durchzuführen, die sich entweder gegen die Datenbank richten, oder direkt den Server betreffen. Angriffe, die den Server betreffen hätten den Zweck, diesen lahm zu legen. Dies würde bedeuten, dass keine Clienten kurzzeitig auf das Mediawiki zugreifen könnten. Ein Angriff gegen die Datenbank wäre die bewusste Fehlmanipulation des Datenbestandes oder die völlige Löschung der Datenbank.
$wgGroupPermissions['*' ]['skipcaptcha'] = false;
=== Server ===
$wgGroupPermissions['user' ]['skipcaptcha'] = false;
Folgende Ansätze vermeiden die Chance
$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false;
* Die Datenbank darf nicht von außen zugreifbar sein.
$wgGroupPermissions['bot' ]['skipcaptcha'] = true;
* Der verwendete Webserver muss jede PHP-Datei ausführen.
$wgGroupPermissions['sysop' ]['skipcaptcha'] = true;
* Ein vorgeschalteter (D)DoS-Schutz


# Bei welchen Aktionen soll ein Captcha verlangt werden?
=== Mediawiki ===
$wgCaptchaTriggers['edit'] = false;
Im Mediawiki selbst könnte ein Angreifer für sich einen Account erstellen, um Manipulationen durchzuführen. Oder gleich Anonym. Für die vollständige Löschung benötigt er ein Adminaccount. Aber auch Spambot sind ein Problem.
$wgCaptchaTriggers['create'] = false;
$wgCaptchaTriggers['addurl'] = true;
$wgCaptchaTriggers['createaccount'] = true;
$wgCaptchaTriggers['badlogin'] = true;
</syntaxhighlight>


'''Bemerkungen:'''
=== Sichere Konfiguration für das Mediawiki ===


Es empfiehlt sich alle Konfigurationen, auch die Standardkonfiguration, explizit anzugeben.


Das Mediawiki des Lehrstuhls Softwarearchitektur verwendet, bis auf das Captcha, die Standardkonfiguration.
Für eine sichere Konfiguration gegen Spam können Extensions helfen.

Der hier angegebene Code entspricht dem vom Mediawiki des Lehrstuhls Softwarearchitektur und kann demnach f&uuml;r das neue System verwendet werden.

==== [https://www.mediawiki.org/wiki/Extension:Gadgets Gadgets] ====
In der Datei LocalSettings.php muss folgendes hinzugef&uuml;gt werden.
<syntaxhighlight lang="php">wfLoadExtension(‘Gadgets‘);</syntaxhighlight>
F&uuml;r die Extension [https://www.mediawiki.org/wiki/Extension:Gadgets Gadgets] bedarf es keiner Konfiguration.
==== [https://www.mediawiki.org/wiki/Extension:Nuke Nuke] ====
In der Datei LocalSettings.php muss folgendes hinzugef&uuml;gt werden.
<syntaxhighlight lang="php">wfLoadExtension(‘Nuke‘);</syntaxhighlight>
Standardm&auml;&szlig;ig hat jeder Nutzer der Nutzergruppe "sysop" diese Funktionalit&auml;t. Dies kann ge&auml;ndert werden, in dem man in der LocalSettings.php f&uuml;r jede Nutzergruppe folgendes eintr&auml;gt:
<syntaxhighlight lang="php">$wgGroupPermissions['<Nutzergruppe>']['nuke'] = true; # true - Funktion ist dann bei der Gruppe aktiv</syntaxhighlight>
Ansonsten bedarf es keiner weiteren Konfiguration.

==== [https://www.mediawiki.org/wiki/Extension:Math Math] ====
In der Datei LocalSettings.php muss folgendes hinzugef&uuml;gt werden.
<syntaxhighlight lang="php">wfLoadExtension(‘Math‘);</syntaxhighlight>
Anschlie&szlig;end muss auf dem Server, wo sich das Mediawiki befindet, die ''update.php'' Datei ausgef&uuml;hrt werden, die sich, im Normalfall, im Verzeichnis ''maintenance'' befindet.

Beispiel:
<syntaxhighlight lang="bash">php maintenance/update.php</syntaxhighlight>

Danach kann die Extension verwendet werden.

==== [https://www.mediawiki.org/wiki/Extension:ParserFunctions ParserFunctions] ====
In der Datei LocalSettings.php muss folgendes hinzugef&uuml;gt werden.
<syntaxhighlight lang="php">wfLoadExtension(‘ParserFunctions‘);</syntaxhighlight>
Um die [https://www.mediawiki.org/wiki/Extension:StringFunctions StringFunctions] zu aktivieren muss die Datei LocalSetting.php um einen zus&auml;tzlichen Eintrag erweitert werden.
<syntaxhighlight lang="php">$wgPFEnableStringFunctions = true;</syntaxhighlight>
Ansonsten bedarf es dieser Extension keiner weiteren Konfiguration.

==== [https://www.mediawiki.org/wiki/Extension:Renameuser RenameUser] ====
In der Datei LocalSettings.php muss folgendes hinzugef&uuml;gt werden.
<syntaxhighlight lang="php">wfLoadExtension(‘Renameuser‘);</syntaxhighlight>
Alle Nutzer die der Nutzergruppe ''bureaucrat'' angeh&ouml;ren, k&ouml;nnen diese Funktionalit&auml;t nutzen. Wenn weitere Nutzergruppen diese Funktionalit&auml;t ben&ouml;tigen, dann muss für jede folgendes in die LocalSettings.php eingetragen werden:
<syntaxhighlight lang="php">$wgGroupPermissions['<Nutzergruppe>']['renameuser'] = true;</syntaxhighlight>
Ansonsten bedarf es keiner weiteren Konfiguration.

==== [https://www.mediawiki.org/wiki/Extension:SyntaxHighlight SyntaxHighlighting (GeSHi)] ====
In der Datei LocalSettings.php muss folgendes hinzugef&uuml;gt werden.
<syntaxhighlight lang="php">wfLoadExtension(‘SyntaxHighlight_GeSHi‘);</syntaxhighlight>
Unter Umst&auml;nden muss unter Linux das Ausf&uuml;hrungsrecht f&uuml;r die Datei ''pygmentize'', welche sich unter dem Pfad /SyntaxHighlight_GeSHi/pygments/ befindet, gesetzt werden. Normalerweise ist das Recht f&uuml;r alle Nutzergruppen gesetzt.

Ein Beispiel für das Setzen des Rechts:
<syntaxhighlight lang="bash">chmod a+x /path/to/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize</syntaxhighlight>

Ansonsten bedarf es keiner weiteren Konfiguration.

==== [https://www.mediawiki.org/wiki/Extension:UserMerge User Merge and Delete] ====
Da [https://www.mediawiki.org/wiki/Extension:UserMerge User Merge and Delete] sich nicht implizit konfiguriert, m&uuml;ssen in der Datei LocalSettings.php mindestens folgende Anweisungen hinzugef&uuml;gt werden.
<syntaxhighlight lang="php" line='line'>
wfLoadExtension(‘UserMerge‘); # Installation
$wgGroupPermissions['<Nutzergruppe']['usermerge'] = true; # Diese Nutzergruppe besitzt diese Funktion (beispielsweise <Nutzergruppe> = bureaucrat).
</syntaxhighlight>
Sonst sind keine weiteren Konfigurationen notwendig.

'''Bemerkung:''' So ist es auch im Mediawiki des Lehrstuhls Softwarearchitektur.

==== [https://www.mediawiki.org/wiki/Extension:WikiEditor WikiEditor] ====
Installiert wird der [https://www.mediawiki.org/wiki/Extension:WikiEditor WikiEditor] durch den folgenden Eintrag in der Datei LocalSettings.php.
<syntaxhighlight lang="php">wfLoadExtension(‘WikiEditor‘);</syntaxhighlight>

Zur Erkennung, ob der [https://www.mediawiki.org/wiki/Extension:WikiEditor WikiEditor] vom MediaWiki benutzt wird, k&ouml;nnen folgende Bilder dienen.

{|
|-
|[[File:WikiEditor komplett aktiviert.png|500x350px|thumb|none|WikiEditor komplett aktiviert]]
|[[File:WikiEditor komplett deaktiviert.png|500x350px|thumb|none|WikiEditor komplett deaktiviert]]
|-
|}

Damit der [https://www.mediawiki.org/wiki/Extension:WikiEditor WikiEditor] genutzt werden kann, sind weitere Eintragungen in der Datei LocalSettings.php notwendig.
<syntaxhighlight lang="php" line='line'>
$wgDefaultUserOptions['usebetatoolbar'] = 1; # 1 = aktiviert / 0 = deaktiviert die Toolbar
$wgDefaultUserOptions['usebetatoolbar-cgd'] = 1; # macht die Toolbar nutzerfreundlicher (z.B. Dialog zur Tabellenerzeugung, Links)
$wgDefaultUserOptions['wikieditor-preview'] = 1; # 1 = aktiviert / 0 = deaktiviert die Tabs Preview und Changes
$wgDefaultUserOptions['wikieditor-publish'] = 1; # 1 = sichtbar / 0 = nicht sichtbar der Buttons Publish (gleicht Save Changes) und Cancel
</syntaxhighlight>

'''Bemerkung:''' JavaScript muss im Browser aktiv sein.

==== [https://www.mediawiki.org/wiki/Extension:WikiForum WikiForum] ====
In der Datei LocalSettings.php muss folgendes hinzugef&uuml;gt werden.
<syntaxhighlight lang="php">wfLoadExtension(‘WikiForum‘);</syntaxhighlight>
Anschlie&szlig;end muss auf dem Server, wo sich das Mediawiki befindet, die ''update.php'' Datei ausgef&uuml;hrt werden, die sich, im Normalfall, im Verzeichnis ''maintenance'' befindet.

Beispiel:
<syntaxhighlight lang="bash">php maintenance/update.php</syntaxhighlight>

Danach kann die Extension verwendet werden.

Die Sicherheit kann verbessert werden, indem man in der Datei LocalSettings.php folgende Eintr&auml;ge einf&uuml;gt:
<syntaxhighlight lang="php" line='line'>
$wgWikiForumAllowAnonymous = false; # Nicht angemeldete Besucher ist es nicht gestattet, am Forum aktiv teilzunehmen.

$wgCaptchaTriggers['wikiforum'] = true; # Captchas finden auch im Forum Anwendung (ConfirmEdit muss vorher installiert sein.)
</syntaxhighlight>

== Absicherung ==


== Ausblick ==
== Ausblick ==
Mögliche weitere Ziele sind die Integration des Informatik-LDAP ins Wiki oder auch die Automatisierung von Updates. Zusätzlich bietet sich außerhalb des Themas die Absicherung des Webservers durch Anpassungen der SSL-/TLS-Einstellungen und Setzen von zusätzlichen HTTP-Headern zum Unterbinden bekannter Angriffs-Strategien an.

== Referenzen ==

Latest revision as of 09:38, 21 October 2019

Diese Seite erklärt, wie man das Mediawiki des Lehrstuhls Softwarearchitektur erfolgreich migriert. Desweiteren liefert es Techniken, die ein Mediawiki in einigen Bereichen der Sicherheit verbessert.

Der Ist-Zustand des Ausgangssystems

Beim Ausgangssystem handelt es sich um eine TurnKey-Linux-Appliance, welche für den Einsatz eines Mediawikis spezialisiert ist. Es hat die Version 12. Aktuell wäre die Version 14. Als Betriebssystem liegt Debian in der Version 6.0.7 vor. Aktuell ist die Version 9. Diese Angaben lassen sich auf dem System selbst in Erfahrung bringen.

Das Mediawiki befindet sich in der Version 1.15. Aktuell ist zurzeit (Stand Oktober 2017) die Version 1.29<ref>https://www.mediawiki.org/wiki/Release_notes/1.29#MediaWiki_1.29.1</ref>. Die folgende Tabelle zeigt den Unterbau, den das Mediawiki verwendet.

Komponente Name Version Aktuell (Stand Oktober 2017)
Webserver Apache 2.2 2.4<ref>https://httpd.apache.org/</ref>
Datenbank MySQL 5.1 5.7.19<ref>https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-19.html</ref>
Programmiersprache PHP 5.3 7.1<ref>http://php.net/supported-versions.php</ref>

Diese Angaben können auf der Versionsseite des Mediawiki eingesehen werden.

Die Funktionalität von MediaWiki kann durch Extensions erweitert werden. Auf dem Mediawiki sind folgende Extensions installiert:

Migration

Vorbereitung

Für die Migration muss ein neues System bereitsstehen, welches mindestens die folgende Software enthält<ref>https://www.mediawiki.org/wiki/Installation#Summary</ref>:

  • einen Webserver (beispielsweise Apache)
  • PHP
  • einen relationenalen Datenbankserver (z.B. MySQL, MariaDB, PostgreSQL)
  • ein Mediawiki in der gewünschten Version

Das Mediawiki sollte so eingerichtet sein, dass man es über einen Browser aufrufen kann. Das heißt, der Webserver muss das Mediawiki nutzen können.

Desweiteren wäre es von Vorteil, wenn alle Extensions, die benötigt werden bereits heruntergeladen, entpackt und in das für Erweiterungen vorgesehene Verzeichnis des Mediawikis verschoben sind.

Bemerkungen:

Für TurnKey-Appliances wird nicht empfohlen, Betriebssystem-Aktualisierungen innerhalb bestehender Installationen vorzunehmen <ref>https://www.turnkeylinux.org/docs/appliance-upgrade</ref>. Daher ist es zunächst erforderlich, ein neues System bereitzustellen.

Bis auf die Erweiterungen kann man sich diese Vorarbeit sparen, indem man die aktuellste Turnkey-Mediawiki-Appliance nutzt.

Das Betriebssystem kann frei gewält werden, solange es für dieses die notwendige Software gibt. Wir haben, aus Interesse, die Migration unter Ubuntu, Debian und OpenSuse durchgeführt. Eine Migration war für alle getesteten Distributionen erfolgreich.

Was ist auf dem Altsystem zu sichern?

Auf dem Altsystem sind die folgenden drei Bereiche zu sichern und auf dem neuen System zu übertragen:

  • die Datenbank
  • hochgeladene Dateien (z.B. Bilder, Verzeichnis images)
  • die Datei LocalSettings.php (falls vorhanden, auch extensions.php, weil LocalSettings.php diese benutzt)

Die Datenbank kann man mit folgendem Kommandozeilenbefehl sichern. (Es kann auch statt root der in der Konfiguration eingetragene Datenbankbenutzer genommen werden.)

mysql -u root -p --databases <Databasename> > <Name>.sql

Für hochgeladene Dateien ist lediglich das Verzeichnis zu sichern.

cd /var/lib/mediawiki # Pfad, wo sich das Verzeichnis images befindet.
tar -czf <Name>.tar.gz images/ # Nicht notwendig, erleichert aber den Transport. Packt die Bilder in ein Archiv.

Die Konfigurationsdateien LocalSettings.php sowie die extensions.php liegen unter dem Pfad

/etc/mediawiki

Mit welchen Mitteln die Bereiche zum neuen System übertragen werden, ist jedem selbst überlassen. Beispielsweise kann die Übertragung mit Hilfe des Programms Filezilla oder dem Kommadozeilenprogramm scp vollzogen werden.

Bemerkungen:

In zukünftigen Mediawikis des Lehrstuhls Softwarearchitektur könnten sich Pfade zu den Bildern und der LocalSettings.php ändern.

Gesicherte Bereiche ins neue System einpflegen

Die gesicherte Datenbank kann man durch ein Einspielen des zuvor erstellten Datenbank-Dumps wiederhergestellt werden.

mysql -u root -p < <Name>.sql

Wird ausschließlich die Datenbank wiederhergestellt, ist es zudem erforderlich, einen Datenbankbenutzer mit Lese- und Schreibrechten für die eingespielte Datenbank zu erstellen. Dieser kann auf der MySQL-Konsole erstellt werden. Die Zugangsdaten des neu eingerichteten Nutzers müssen später auch in der Konfiguration vermerkt werden.

mysql -u root -p # Aufrufen der MySQL-Konsole
mysql> GRANT ALL PRIVILEGES ON <dbname>.* TO <username>@localhost IDENTIFIED BY '<password>'

Die gesicherten Bilder sind in das images-Verzeichnis des neuen System abzulegen.

tar -xzf <Name>.tar.gz /var/www/mediawiki # Entpackung des Archives an dem Ort, wo sich die Bilder, im Normalfall, befinden.

Für das Logo (Bild, welches sich links oben, auf jeder Seite, innerhalb des Wikis, befindet.) muss in der LocalSettings.php der Wert der Variable $wgLogo angepasst werden. Wenn an der Verzeichnisstruktur des Mediawikis keine individuellen Änderungen durchgeführt wurden, würde beispielhaft diese Zeile funktionieren.

$wgLogo = $wgResourceBasePath/images/logo.png“; # $wgResourceBasePath beinhaltet, wenn dieser nicht manuell modifiziert wurde, das Verzeichnis der MediaWiki-Installation.

Eine Aktualisierung der LocalSettings.php kann vereinfacht werden, indem eine Konfiguration mit Default-Einstellungen zu Hilfe genommen wird. Dies hat außerdem den Vorteil, dass eventuelle grundlegende Änderungen an der Konfiguration besser zu erkennen sind. Bei der Übernahme von Einstellungen sind insbesondere folgende Punkte zu beachten:

  • Einstellungen der Datenbank (Datenbankname, -nutzer und -passwort)
  • Hostname des Servers ($wgServer)
  • Anpassungen der Pfade im Dateisystem ($wgScriptPath, $wgArticlePath)
  • Kompatibilitätsmodus der Datenbank ($wgDBmysql5)

Konfiguration des Webservers

Der Webserver (hier Apache) kann zu großen Teilen mit den Standardeinstellungen betrieben werden.

Wichtige Anpassungen betreffen die Ausführung von PHP, das Verschieben der Installation in das Wurzelverzeichnis des Webserers und das Ausblenden des Dateinamens index.php.

Mittels des Befehls a2enmod php kann unter Debian bei installiertem Apache-Webserver, PHP und Apache-PHP-Modul die Ausführung von PHP durch den Webserver aktiviert werden.

Das Ausblenden des Dateinames index.php erfordert mehrere Änderungen an der Konfiguration des Webservers. Diese ist im Verzeichnise /etc/apache2/ zu finden. Folgende Änderungen sind notwendig:

  • Setzen der DocumentRoot auf das Installationsverzeichnis von MediaWiki
DocumentRoot /var/lib/mediawiki
  • Abschalten des Aliases für MediaWiki. Die Direktive Alias ... in der Datei mediawiki.conf muss dazu auskommentiert werden.
  • Umschreiben der Pfade
RewriteCond %{REQUEST_URI} !^/(stylesheets|images|skins|resources)/
RewriteCond %{REQUEST_URI} !^/(redirect|texvc|index|load).php
RewriteCond %{REQUEST_URI} !^/error/(40(1|3|4)|500).html
RewriteCond %{REQUEST_URI} !^/favicon.ico
RewriteCond %{REQUEST_URI} !^/robots.txt
RewriteCond %{REQUEST_URI} !^/skins/
RewriteRule ^/(.*)$ /var/lib/mediawiki/index.php/$1 [L]

Eine entsprechende Anleitung ist auch auf der Webseite von MediaWiki<ref>https://www.mediawiki.org/wiki/Manual:Short_URL/Apache</ref> zu finden.

Installation / Konfiguration der Extensions

Es wird vorausgesetzt, dass die Extensions sich bereits im extentions Verzeichnis des Mediawikis befinden.

CategoryTree

In der Datei LocalSettings.php muss folgendes hinzugefügt werden.

wfLoadExtension(‘CategoryTree‘);

Für die Extension CategoryTree bedarf es keiner Konfiguration.

CharInsert

In der Datei LocalSettings.php muss folgendes hinzugefügt werden.

wfLoadExtension(‘CharInsert‘);

Für die Extension CharInsert bedarf es, wenn die zu Verfügung stehenden Funktionalität als ausreichend gelten, keiner weiteren Konfiguration.

Cite

In der Datei LocalSettings.php muss folgendes hinzugefügt werden.

wfLoadExtension(‘Cite‘);

Für die Extension Cite bedarf es keiner Konfiguration.

ConfirmEdit

Je nachdem, welcher Captcha verwendet werden soll, ist die Anweisung für die Installation in der Datei LocalSetting.php eine andere.

wfLoadExtension( 'ConfirmEdit/MathCaptcha' ); # Beispiel: Installation von ConfirmEdit unter der Verwendung von MathCaptcha

Die Extension besitzt bereits eine Standardkonfiguration. Man kann sie durch Einträge in der LocalSettings.php ändern.

# Welche Nutzergruppen sollen keine Captchas angezeigt bekommen?
$wgGroupPermissions['*'            ]['skipcaptcha'] = false;
$wgGroupPermissions['user'         ]['skipcaptcha'] = false;
$wgGroupPermissions['autoconfirmed']['skipcaptcha'] = false;
$wgGroupPermissions['bot'          ]['skipcaptcha'] = true;
$wgGroupPermissions['sysop'        ]['skipcaptcha'] = true;

# Bei welchen Aktionen soll ein Captcha verlangt werden?
$wgCaptchaTriggers['edit']          = false; 
$wgCaptchaTriggers['create']        = false; 
$wgCaptchaTriggers['addurl']        = true; 
$wgCaptchaTriggers['createaccount'] = true;
$wgCaptchaTriggers['badlogin']      = true;

Bemerkungen:

Es empfiehlt sich alle Konfigurationen, auch die Standardkonfiguration, explizit anzugeben.

Das Mediawiki des Lehrstuhls Softwarearchitektur verwendet, bis auf das Captcha, die Standardkonfiguration.

Der hier angegebene Code entspricht dem vom Mediawiki des Lehrstuhls Softwarearchitektur und kann demnach für das neue System verwendet werden.

Gadgets

In der Datei LocalSettings.php muss folgendes hinzugefügt werden.

wfLoadExtension(‘Gadgets‘);

Für die Extension Gadgets bedarf es keiner Konfiguration.

Nuke

In der Datei LocalSettings.php muss folgendes hinzugefügt werden.

wfLoadExtension(‘Nuke‘);

Standardmäßig hat jeder Nutzer der Nutzergruppe "sysop" diese Funktionalität. Dies kann geändert werden, in dem man in der LocalSettings.php für jede Nutzergruppe folgendes einträgt:

$wgGroupPermissions['<Nutzergruppe>']['nuke'] = true; # true - Funktion ist dann bei der Gruppe aktiv

Ansonsten bedarf es keiner weiteren Konfiguration.

Math

In der Datei LocalSettings.php muss folgendes hinzugefügt werden.

wfLoadExtension(‘Math‘);

Anschließend muss auf dem Server, wo sich das Mediawiki befindet, die update.php Datei ausgeführt werden, die sich, im Normalfall, im Verzeichnis maintenance befindet.

Beispiel:

php maintenance/update.php

Danach kann die Extension verwendet werden.

ParserFunctions

In der Datei LocalSettings.php muss folgendes hinzugefügt werden.

wfLoadExtension(‘ParserFunctions‘);

Um die StringFunctions zu aktivieren muss die Datei LocalSetting.php um einen zusätzlichen Eintrag erweitert werden.

$wgPFEnableStringFunctions = true;

Ansonsten bedarf es dieser Extension keiner weiteren Konfiguration.

RenameUser

In der Datei LocalSettings.php muss folgendes hinzugefügt werden.

wfLoadExtension(‘Renameuser‘);

Alle Nutzer die der Nutzergruppe bureaucrat angehören, können diese Funktionalität nutzen. Wenn weitere Nutzergruppen diese Funktionalität benötigen, dann muss für jede folgendes in die LocalSettings.php eingetragen werden:

$wgGroupPermissions['<Nutzergruppe>']['renameuser'] = true;

Ansonsten bedarf es keiner weiteren Konfiguration.

SyntaxHighlighting (GeSHi)

In der Datei LocalSettings.php muss folgendes hinzugefügt werden.

wfLoadExtension(‘SyntaxHighlight_GeSHi‘);

Unter Umständen muss unter Linux das Ausführungsrecht für die Datei pygmentize, welche sich unter dem Pfad /SyntaxHighlight_GeSHi/pygments/ befindet, gesetzt werden. Normalerweise ist das Recht für alle Nutzergruppen gesetzt.

Ein Beispiel für das Setzen des Rechts:

chmod a+x /path/to/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize

Ansonsten bedarf es keiner weiteren Konfiguration.

User Merge and Delete

Da User Merge and Delete sich nicht implizit konfiguriert, müssen in der Datei LocalSettings.php mindestens folgende Anweisungen hinzugefügt werden.

wfLoadExtension(‘UserMerge‘); # Installation
$wgGroupPermissions['<Nutzergruppe']['usermerge'] = true; # Diese Nutzergruppe besitzt diese Funktion (beispielsweise <Nutzergruppe> = bureaucrat).

Sonst sind keine weiteren Konfigurationen notwendig.

Bemerkung: So ist es auch im Mediawiki des Lehrstuhls Softwarearchitektur.

WikiEditor

Installiert wird der WikiEditor durch den folgenden Eintrag in der Datei LocalSettings.php.

wfLoadExtension(‘WikiEditor‘);

Zur Erkennung, ob der WikiEditor vom MediaWiki benutzt wird, können folgende Bilder dienen.

WikiEditor komplett aktiviert
WikiEditor komplett deaktiviert

Damit der WikiEditor genutzt werden kann, sind weitere Eintragungen in der Datei LocalSettings.php notwendig.

$wgDefaultUserOptions['usebetatoolbar'] = 1; # 1 = aktiviert / 0 = deaktiviert die Toolbar
$wgDefaultUserOptions['usebetatoolbar-cgd'] = 1; # macht die Toolbar nutzerfreundlicher (z.B. Dialog zur Tabellenerzeugung, Links)
$wgDefaultUserOptions['wikieditor-preview'] = 1; # 1 = aktiviert / 0 = deaktiviert die Tabs Preview und Changes
$wgDefaultUserOptions['wikieditor-publish'] = 1; # 1 = sichtbar / 0 = nicht sichtbar der Buttons Publish (gleicht Save Changes) und Cancel

Bemerkung: JavaScript muss im Browser aktiv sein.

WikiForum

In der Datei LocalSettings.php muss folgendes hinzugefügt werden.

wfLoadExtension(‘WikiForum‘);

Anschließend muss auf dem Server, wo sich das Mediawiki befindet, die update.php Datei ausgeführt werden, die sich, im Normalfall, im Verzeichnis maintenance befindet.

Beispiel:

php maintenance/update.php

Danach kann die Extension verwendet werden.

Die Sicherheit kann verbessert werden, indem man in der Datei LocalSettings.php folgende Einträge einfügt:

$wgWikiForumAllowAnonymous = false; # Nicht angemeldete Besucher ist es nicht gestattet, am Forum aktiv teilzunehmen.

$wgCaptchaTriggers['wikiforum'] = true; # Captchas finden auch im Forum Anwendung (ConfirmEdit muss vorher installiert sein.)

Absicherung

Ausblick

Mögliche weitere Ziele sind die Integration des Informatik-LDAP ins Wiki oder auch die Automatisierung von Updates. Zusätzlich bietet sich außerhalb des Themas die Absicherung des Webservers durch Anpassungen der SSL-/TLS-Einstellungen und Setzen von zusätzlichen HTTP-Headern zum Unterbinden bekannter Angriffs-Strategien an.

Referenzen