Google+

viernes, 13 de abril de 2012

Autenticación LDAP en MediaWiki


Si hemos montado MediaWiki en nuestra organización, seguramente nos interese tener los usuarios conectados a nuestro LDAP. En este caso he usado Active Directory 2008 pero para OpenLDAP sería prácticamente igual, lo explico.

Lo primero de todo asegurarnos que hemos compilado PHP con el módulo LDAP. En mi caso la compilación fue con la opción: --with-ldap


Una vez nos hemos asegurado de lo anterior, descargamos la extensión LDAP:

# wget http://upload.wikimedia.org/ext-dist/LdapAuthentication-MW1.18-r90286.tar.gz
Ahora descomprimimos
# tar xzvf LdapAuthentication-MW1.18-r90286.tar.gz -C /var/www/html/wiki/extensions/

Añadir al LocalSettings.php lo siguiente, e ir modificando lo marcado en negrita por vuestra configuración:

require_once( "$IP/extensions/LdapAuthentication/LdapAuthentication.php" );
require_once( "$IP/extensions/LdapAuthentication/LdapAutoAuthentication.php" );

$wgAuth = new LdapAuthenticationPlugin();
$wgLDAPDomainNames = array( "Dominio" );
$wgLDAPServerNames = array( "Dominio" => "hostname del LDAP" );
$wgLDAPSearchStrings = array( "Dominio" => "DOMINIO\\USER-NAME" );
$wgLDAPEncryptionType = array( "Dominio" => "clear" );
$wgLDAPUseLocal = false;
$wgMinimalPasswordLength = 1;
$wgLDAPBaseDNs = array( "Dominio" => "dc=dominio,dc=es" );

# Si usáis OpenLDAP: "sAMAccountName" tendréis que cambiarlo por "uid" o vuestro identificador.
$wgLDAPSearchAttributes = array( "Dominio" => "sAMAccountName" );
$wgLDAPRetrievePrefs = array( "Dominio" => "true" );

Todo lo demás es opcional

Esto lo pongo para permisos, no se pueden crear cuentas, paginas o conversaciones, puede leer todo el mundo y no pueden editar los usuarios no autenticados

$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['*']['read'] = true;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['createpage'] = false;
$wgGroupPermissions['*']['createtalk'] = false;

He creado un usuario en el LDAP llamado Wiki que hará consultas para extraer el mail y demás datos, por comodidad.

$wgLDAPProxyAgent = array('Dominio' => 'CN=Wiki,ou=Users,DC=seres');
$wgLDAPProxyAgentPassword = array('Dominio' => 'password del usuario');
$wgLDAPPreferences = array("Dominio"=>array( "email"=>"mail","realname"=>"cn","nickname"=>"givenName"));