Jump to: navigation, search

Setting up MediaWiki to run against FreeIPA

Introduction


The following documentation is practical guide to set up MediaWiki to run against FreeIPA. It will show how to secure access to MediaWiki with Kerberos and SSL in FreeIPA environment.

We suppose that there are one server and several clients configured in following way:

  • Domain: example.com
  • Realm: EXAMPLE.COM
  • Server hostname: master.example.com
  • Client 0 hostname: client-0.example.com
  • Client 1 hostname: client-1.example.com etc.
  • All passwords used by FreeIPA: secret123

Server runs freeipa-server with Dogtag and DNS. Client-0 has freeipa-client, freeipa-admintools, MediaWiki, mod_nss and mod_auth_kerb. Other clients run freeipa-client only.

MediaWiki was installed and configured with default settings(it's located in /var/www/wiki) and its configuration(/etc/httpd/conf.d/mediawiki.conf) looks like this:

Alias /wiki/skins /usr/share/mediawiki/skins
Alias /wiki       /var/www/wiki

Secure access to MediaWiki by Kerberos


We are going to permit access to MediaWiki only to those users who has valid kerberos ticket. In order to do it we must have mod_auth_kerb installed on client-0. Because we have freeipa-admintools installed on client-0, we can get kerberos ticket for Admin and then run all commands without any need to logging into server.

  • Get kerberos ticket for admin user:
kinit admin
  • Create service for MediaWiki:
ipa service-add HTTP/client-0.example.com
  • Get keytab for service and make the keytab readable by Apache(httpd):
ipa-getkeytab -s master.example.com -p HTTP/client-0.example.com -k /etc/httpd/conf/http.keytab
chown apache /etc/httpd/conf/http.keytab
  • Allow access to MediaWiki only to those who has valid kerberos ticket. Add these lines into mediawiki.conf:
<Location "/wiki">
  AuthType Kerberos
  AuthName "Kerberos Login"
  KrbMethodNegotiate on
  KrbMethodK5Passwd off
  KrbServiceName HTTP
  KrbAuthRealms EXAMPLE.COM
  Krb5KeyTab /etc/httpd/conf/http.keytab
  KrbSaveCredentials off
  Require valid-user
</Location>

Automatic login of users into MediaWiki

Additionally we can use one of MediaWiki extensions to automatically log in every user with valid kerberos ticket. The extension is called Auth_remoteuser and could be downloaded from:

http://upload.wikimedia.org/ext-dist/Auth_remoteuser-trunk-r85015.tar.gz
  • Extract the archive into directory /var/www/wiki/extensions
  • Edit /var/www/wiki/LocalSettings.php by adding these lines:
require_once('extensions/Auth_remoteuser/Auth_remoteuser.php');
$wgAuth = new Auth_remoteuser();
  • Additionally you can add also these lines:
$wgAuthRemoteuserAuthz = true; /* Your own authorization test */
$wgAuthRemoteuserName = $_SERVER["AUTHENTICATE_CN"]; /* User's name */
$wgAuthRemoteuserMail = $_SERVER["AUTHENTICATE_MAIL"]; /* User's Mail */
$wgAuthRemoteuserNotify = false; /* Do not send mail notifications */
$wgAuthRemoteuserDomain = "EXAMPLE.COM"; /* Remove EXAMPLE.COM\ from the beginning or @EXAMPLE.COM at the end of a IWA username */
/* User's mail domain to append to the user name to make their email address */
$wgAuthRemoteuserMailDomain = "example.com";
// Don't let anonymous people do things...
$wgGroupPermissions['*']['createaccount']   = false;
$wgGroupPermissions['*']['read']            = false;
$wgGroupPermissions['*']['edit']            = false;

Instructions for installing Auth_remoteuser extension were taken from www.mediawiki.org.


Configuring SSL


Last step is to secure connection to our Wiki by SSL. In order to do that we must have mod_nss installed on client-0 and server must be running CA(Dogtag).

  • First of all we must generate new NSS database(by default stored in /etc/httpd/alias):
certutil -N -d /etc/httpd/alias
  • Save the database password into a file and make it accessible by Apache(httpd):
echo "internal:mypassword" > /etc/httpd/alias/passwd.txt
chown apache /etc/httpd/alias/passwd.txt
chmod 600 /etc/httpd/alias/passwd.txt
  • Create a certificate request
certutil -R -s "CN=client-0.example.com, O=EXAMPLE.COM" -d /etc/httpd/alias -a > mediawiki.csr
  • Request the certificate from CA and remember its number
ipa cert-request --principal=HTTP/client-0.example.com mediawiki.csr
  • Save the certificate into a file
ipa cert-show #number --out=wikicert.crt
  • Add the certificate to client-0 NSS database under the name "Https-cert"
certutil -A -d /etc/httpd/alias/ -n "Https-cert" -a -i wikicert.crt -t ",,"
  • Edit NSS configuration file, usually stored in /etc/httpd/conf.d/nss.conf. Some/all of these settings could already be there, so check for duplicity.
Listen 443
<VirtualHost _default_:443>
NSSRenegotiation on
NSSRequireSafeNegotiation on
NSSEnforceValidCerts off
NSSNickName "Https-cert"
NSSPassPhraseDialog "file:/etc/httpd/alias/passwd.txt"
  • Add rewrite rules to activate SSL. Following lines must be added into MediaWiki configuration file (/etc/httpd/conf.d/mediawiki.conf):
RewriteEngine on
RewriteCond %{SERVER_PORT}  !^443$
RewriteCond %{REQUEST_URI}  ^/wiki/
RewriteRule ^/(.*) https://client-0.example.com/$1 [L,R]
  • Restart httpd service