blogimg/blog_219.jpg

Rakensinpa töihin MediaWiki-pohjaisen intranet-wikin ja integroin siihen Apache-http-autentikaation. Ideana on, että Apachen konfiguraatiossa voidaan määritellä joukko IP-verkkoja, joista pääsee wikiin ilman sisäänkirjautumista, ja muualta tullessa taas pitää autentikoitua tunnuksella ja salasanalla. Kun autentikoinnista vastaa Apache, ei tarvitse myöskään luottaa MediaWikin tietoturvaan.

Asia olisi muuten helppo, mutta halusin, että käyttäjätunnukset tallennetaan vain yhteen paikkaan, eli MediaWikin omaan MySQL-tietokantaan. Silloin rekisteröintiin ja käyttäjien lisäämiseen voidaan käyttää MediaWikin toimintoja normaaliin tapaan.

Homma onnistui parilla virityksellä:

1) HttpAuth on MediaWikin laajennus, jonka avulla wiki ymmärtää Apache-tasolla tehdyn http-autentikoinnin. Apacheen tehdään normaalit AuthType Basic, require valid-user ym. asetukset.

2) libapache2-mod-auth-mysql (Ubuntu) on Apache 2 -moduuli, jonka avulla voi autentikoida käyttäjät MySQL-tietokannasta. Siihen konfiguroidaan taulun nimi ja käyttäjätunnus/salasana-kentät. Password encryption -asetus pitää olla PHP_MD5.

3) Konfiguroidaan MediaWiki käyttämään puhtaita MD5-salasanoja tietokannassa, eli lisätään LocalSettings.php:hen rivi: $wgPasswordSalt = false; Tämän jälkeen aiemmin luodut käyttäjätunnukset eivät sitten enää toimi, ellei niiden salasanakenttää päivitä manuaalisesti tietokantaan.

4) mod_auth_mysql:llä vaikuttaa olevan ongelmia jatkuvan MySQL-yhteyden kanssa, joten Apachen konfiguraatioon voi lisätä rivin "Auth_MySQL_Non_Persistent on". Silloin moduuli avaa ja sulkee MySQL-yhteyden joka kerta tehdessään autentikointitarkastuksen.

5) Viimeinen silaus: MediaWiki käyttää oletuksena isolla alkukirjaimella alkavia käyttäjätunnuksia tietokannassa. Jos haluaa, että http-autentikointi onnistuu pienillä kirjaimilla, voi tehdä tietokantaan erillisen näkymän: create view mysql_auth as select lower(user_name) as user_name, user_password from user; ja konffata mod_auth_mysql:n käyttämään kyseistä näkymää.