Mediawiki im Intranet: Nur angemeldete Benutzer zulassen

Geschlossenes Mediawiki

restricted Ein Mediawiki im Intranet muss unter Umständen abgeriegelt und ausschliesslich einer geschlossenen Benutzergruppe zugänglich gemacht werden. Wenn man wissen will, welcher Benutzer welche Wikiseite bearbeitet hat, reichen leider die schönen Basic-Authentication Features von Apache nicht aus. Damit Mediawiki alle zur Anmeldung zwingt muss die Datei LocalSettings.php folgendermassen ergänzt werden:
############## Handmade ################
# Specify who can edit: true means only logged in users may edit pages
$wgGroupPermissions['*'    ]['createaccount']   = false;
$wgGroupPermissions['*'    ]['edit']            = false;
$wgGroupPermissions['*'    ]['read']            = false;
$wgGroupPermissions['sysop']['createaccount']   = true;
$wgGroupPermissions['user' ]['edit']            = true;
$wgGroupPermissions['user' ]['read']            = true;

# Logo
$wgLogo                         = "/images/bbbq.gif";

# Pages anonymous (not-logged-in) users may see
$wgWhitelistRead = array ("Spezial:Userlogin", "Wikipedia:Help");

Benutzer

Am Einfachsten ist sicher das Kopieren eines bestehenden Users (eventuell in MySQL). Dabei müssen user_id unduser_name eindeutig sein. Normalerweise braucht es keine weiteren Rechtemanipulationen. Sollen die Benutzer trotzdem gewissen Gruppen zugeteilt werden, gibt die Mediawiki-Dokumentation Auskunft über die Rechte und die Zuteilung zu Gruppen.

Passworte

In Mediawiki 1.10 ist die Passwortverschlüsselung in der Funktion includes/GlobalFunctions.php definiert:

function wfEncryptPassword( $userid, $password ) {
        global $wgPasswordSalt;
        $p = md5( $password);

        if($wgPasswordSalt)
                return md5( "{$userid}-{$p}" );
        else
                return $p;
}

$wgPasswordSalt kann in LocalSettings.php umdefiniert werden, aber normalerweise ist es in includes/DefaultSettings.php auf true gesetzt. $userid ist die user_id aus der Tabelle user.

Das Passwort kann mit php ausgegeben werden (angenommen für user mit id 15):

<?php echo md5('15-'.md5('PASSWORT'))."\n"; ?>

Oder direkt in Mysql:

UPDATE bi_user SET user_password=md5(concat(user_id,'-',md5('PASSWORT'))) WHERE user_id=15;

Ein passwortverschlüsseltes Verzeichnis in Linux erstellen

Im Zeitalter der Laptops ist es ziemlich einfach geworden, Computer zu klauen. Verschusselten Naturen wie ich eine bin, kann es auch passieren, das man sich beim Besten Willen nicht mehr erinnern kann wo man seine Kiste denn nun schon wieder hingestellt hat… Da leisten geografische Traceroutes gute Dienste.Sollte er dann mal wirklich weg sein, will ich empfindliche Daten (nein, nicht nur pr0n!) auf der HD geschützt wissen…

Ich will nicht eine ganze Partition verschlüsseln, sondern nur ein einzelnes Verzeichnis.

  1. Zuerst brauchen wir eine „Imagedatei“. Die wird sich dann als Laufwerk ausgeben:
    dd if=/dev/zero of=save.img bs=1024k count=100

    Damit wird eine 100 MB grosse Datei erstellt.

  2. Das Modul Cryptoloop sollte im Kernel geladen sein. Um ein Dateisystem in die Imagedatei zu schreiben, muss es als Loopdevice gemountet werden:
    losetup -e blowfish /dev/loop0 save.img

    Dabei kann man auch ein Passwort vergeben.

  3. Auf diesem „Device“ kann ein Dateisystem erstellt werden:
    mkfs.ext3 /dev/loop0
  4. Mounten an ein Verzeichnis:
    mount /dev/loop0 /home/me/secret
  5. Nun können alle geheimen Dateien in /home/me/secret kopiert werden.
  6. Am Schluss den Link wieder entfernen:
    losetup -d /dev/loop0

Um das Verzeichnis später zu verwenden, kann man es relativ einfach mounten:

mount -o encryption=blowfish save.img /home/me/secret

Hat man das „Laufwerk“ zu klein gewählt hat, ist es mit folgenden Kommandos vergrösserbar:

  1. 500 MB hinzufügen:
     dd if=/dev/zero bs=1024k count=500 &gt;&gt; save.img
  2. Loopdevice aufsetzen:
    losetup -e blowfish /dev/loop0 save.img
  3. Aufblasen:
    ext2resize /dev/loop0
  4. Loopdevice entfernen:
    losetup -d /dev/loop0