2013年12月19日木曜日

MediaWikiを ActiveDirectoryのLDAP認証に対応させました!

photo credit: just.Luc via photopin cc

ども(・ω人)ども 認証は統合させるのが大好き!な snicker_jp です!

今回、「MediaWiki」というWikiPediaにも使われているメジャーWikiエンジンを使って、Wikiを立ち上げ・・・ユーザーの認証をLDAP(AD)に対応させました!


前提条件

まず、前提条件を提示しておきます!
  • MediaWiki 1.19
  • LDAP認証先は「ActiveDirectory」
  • 「Extension:LDAP Authentication」を使う
  • DBはMySQL
  • CentOS 6
  • php-ldap

手順

  • php-ldapのインストール
  • 「Extension:LDAP Authentication」のインストール
  • 設定
  • おまけ:「Extension:LDAP Authentication」ソースの修正

php-ldapのインストール

意外と漏れると面倒な、「php-ldap」をインストールします。
sudo yum install php-ldap
確認
rpm -q php-ldap


「Extension:LDAP Authentication」のインストール

ここにすべての情報が載っています!
Extension:LDAP Authentication - MediaWiki

ダウンロード
ここから、使用しているMediaWikiのバージョンを選択して、ダウンロードしてきます!
Download MediaWiki extension - MediaWiki

そして、MediaWikiに配置します!
例:
{MediaWikiのパス}/extensions/LdapAuthentication

と、こんな感じで!

MySQLのデータを変更
cd {MediaWikiのパス}/extensions/LdapAuthentication
mysql -uroot -p wikidb < schema/ldap-mysql.sql

設定

LocalSettings.phpを変更します!
// Enable LDAP Authentication
require_once( "$IP/extensions/LdapAuthentication/LdapAuthentication.php" );
$wgAuth = new LdapAuthenticationPlugin();
$wgLDAPDomainNames = array( "example.com" );
$wgLDAPServerNames = array( "example.com" => "ad.example.com" );
$wgLDAPSearchStrings = array( "example.com" => "EXAMPLE\USER-NAME" );
$wgLDAPEncryptionType = array( "example.com" => "clear" );
// $wgLDAPPort = array( "example.com" => 636 ); // clear:389 , ssl:636
$wgMinimalPasswordLength = 1;
$wgLDAPBaseDNs = array( "example.com" => "OU=member,DC=example,DC=com" );
$wgLDAPSearchAttributes = array( "example.com" => "sAMAccountName" );
$wgLDAPRetrievePrefs = array( "example.com" => "true" );
// $wgLDAPDebug = 3; //for debugging LDAP
// $wgShowExceptionDetails = true; //for debugging MediaWiki
// $wgDebugLogGroups['ldap'] = '/tmp/debug.log';

$wgLDAPUseLocal = true; // MediaWiki のローカルユーザの有効化の有無

これで、使えるようになっているはずです!

おまけ:「Extension:LDAP Authentication」ソースの修正

これでもいいのですが、実はここからが本番!
自分の環境では、「ユーザーID」に「_(アンダースコア、アンダーバー)」が入っているため、認証がうまく通りませんでした。
そこは仕方ないので、公式のFAQから読み取って、ソースを修正しました
Extension:LDAP Authentication/FAQ - MediaWiki
以下のようにしました!(拡張機能のアップデート時には毎回修正が必要です・・・
--- extensions/LdapAuthentication/LdapAuthentication.php.20131213       2013-12-07 10:42:04.000000000 +0900
+++ extensions/LdapAuthentication/LdapAuthentication.php        2013-12-13 12:34:43.248152638 +0900
@@ -1368,6 +1368,7 @@
         */
        function getSearchString( $username ) {
                $this->printDebug( "Entering getSearchString", NONSENSITIVE );
+               $username = str_replace(' ','_',$username); // for 私の USER-ID(snicker_jpとか)
                $ss = $this->getConf( 'SearchString' );
                if ( $ss ) {
                        // This is a straight bind


まとめ


  • これで、MediaWiki独自にユーザー管理しなくて済みます!
  • 「ユーザーID」に「_(アンダースコア、アンダーバー)」は、ハマった・・・
  • 英語の情報しかなくて、つらかった~!ありがとう!助けてくれたコジマさん!

参考サイト


Zenback