Sichere Wiki-Migration: Difference between revisions
mNo edit summary |
mNo edit summary |
||
Line 111: | Line 111: | ||
Folgende Änderungen sind notwendig: |
Folgende Änderungen sind notwendig: |
||
* Setzen der <code>DocumentRoot</code> auf das Installationsverzeichnis von MediaWiki |
* Setzen der <code>DocumentRoot</code> auf das Installationsverzeichnis von MediaWiki |
||
<syntaxhighlight>DocumentRoot /var/lib/mediawiki</syntaxhighlight> |
<syntaxhighlight lang="apache">DocumentRoot /var/lib/mediawiki</syntaxhighlight> |
||
* Abschalten des Aliases für MediaWiki. Die Direktive <code>Alias ...</code> in der Datei <code>mediawiki.conf</code> muss dazu auskommentiert werden. |
* Abschalten des Aliases für MediaWiki. Die Direktive <code>Alias ...</code> in der Datei <code>mediawiki.conf</code> muss dazu auskommentiert werden. |
||
* Umschreiben der Pfade |
* Umschreiben der Pfade |
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:
- AWC‘s MediaWiki Forum (veraltet) Alternative: WikiForum
- CategoryTree
- CharInsert
- Cite
- ConfirmEdit
- FCKeditor (veraltet) Alternative: WikiEditor
- Gadgets
- Nuke
- Math
- ParserFunctions
- Preloader (veraltet) Alternative: Keine
- RenameUser
- StringFunctions (veraltet) Alternative: ParserFunctions
- SyntaxHighlighting (GeSHi)
- User Merge and Delete
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, auchextensions.php
, weilLocalSettings.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 Dateimediawiki.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.
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.