DokuWiki

It's better when it's simple

ユーザ用ツール

サイト用ツール


ja:auth:ad

Active Directory 認証バックエンド

release 2013-05-10 “Weatherwax” 以降
Active Directory 認証プラグインページを参照してください。

releases 2012-10-13 “Adora Belle” 以前は
以下の情報を参照してください。

この auth backend は、DokuWiki が Active Directory サーバに対して認証できるようにします。

Active Directory 認証は、汎用のLDAP認証バックエンドを用いても可能ですが、専用の認証バックエンドを使うと、より簡単になります。素晴らしいadLDAP ライブラリと James Van Lommel の貢献が元となっています。adLDAP ライブラリは DokuWiki に同梱されており、ダウンロードする必要はありません。

さらに、NTLM と Kerberos に基づいたシングルサインオンの使用も可能です。

このバックエンドは DokuWiki rc2009-12-02 “Mulled Wine” バージョンから同梱されています。

このバックエンドを使用するために、PHPサーバー上でLDAP機能を有効にする必要があります。LDAP機能は、PHPのデフォルトで有効になっていません。ほとんどの場合には、php.iniを編集するだけで簡単に有効になります。しかし、サーバーを特別にインストールしている場合、PHPのインストール状態を確認する必要があるかもしれません。

サーバー設定

サーバー設定は adLDAP PHPライブラリの要件を満たす必要があります。

UbuntuやDebianでApacheを使用している場合は、単にのphp5-ldapパッケージをインストールしてください。 別のディストリビューション上でApacheを使用している場合は、このガイドに従って下さい。

SLES(SUSE Linux Enterprise ServerInstalling) の場合、php5-ldap をインストールしてください。

MS IIS7 サーバーの場合、php-ldapphp-openssl 拡張機能をインストールする必要があります。(二番目はSSLのサポートが必要な場合のみ) php-openssl のために、依存関係のDLL ssleay32.dlllibeay32.dll をシステム上で利用可能にする必要があります。 SSLを使用してADにアクセスする場合、TLS_REQCERT never 行を記載した ldap.conf ファイルを C:\OpenLDAP\sysconf に作成してください。これによって LDAP呼出し時のAD証明書チェックを無効にします。警告! これは中間者攻撃される可能性があります。このファイルに有効な証明書を設定することが、より良い方法です。(詳細は http://linux.die.net/man/5/ldap.conf

Apache以外のWebサーバーを使用している場合、自分自身で把握する必要があります。成功した場合は、この記事を更新してください。

設定

設定管理画面によって上書きされないように、このバックエンドの設定をconf/local.protected.phpに置くことをお奨めします。

最低限の設定項目は以下の通りです。

  // 一般的な DokuWiki 設定項目
  $conf['useacl']         = 1;
  $conf['disableactions'] = 'register';
  $conf['authtype']       = 'ad';
 
  // 各自の Active Directory 設定項目
  $conf['auth']['ad']['account_suffix']     = '@my.domain.org';
  $conf['auth']['ad']['base_dn']            = 'DC=my,DC=domain,DC=org';
  $conf['auth']['ad']['domain_controllers'] = 'srv1.domain.org, srv2.domain.org'; //複数設定可

必要に応じて、以下の設定項目も可能です。

  $conf['auth']['ad']['ad_username']        = 'root';
  $conf['auth']['ad']['ad_password']        = 'pass';
  $conf['auth']['ad']['sso']                = 1;
  $conf['auth']['ad']['real_primarygroup']  = 1;
  $conf['auth']['ad']['use_ssl']            = 1; // ssl、tls オプションは同時使用不可。
  $conf['auth']['ad']['use_tls']            = 1; // どちらか片方だけ
  $conf['auth']['ad']['debug']              = 1;
  $conf['auth']['ad']['recursive_groups']   = 1; // AD のグループの数が多い場合、0 に切り替えると性能が向上します。しかし間接的なメンバーシップは動作しません。
  $conf['auth']['ad']['additional']         = 'department,office'; // 取得する追加属性
  // 数日前にパスワード期限切れをユーザーに警告する(バージョン2012年3月10日以降)
  $conf['auth']['ad']['expirywarn']         = 5;

ad_usernamead_password は、例えば メール通知の登録を可能にするために必要です。 ユーザーの詳細情報を照会するために、このアカウントは AD に結び付けられます。

スーパーユーザー権限を設定には、このコードを local.protected.php に記入してください。

$conf['manager']   = '@LDAPGROUPNAME';
$conf['superuser'] = '@LDAPGROUPNAME';

AD グループ名は、“@” を前に付与されスペースはアンダースコアに置換えられます。例えば、AD グループが “Internal DokuWiki Admins” の場合、Dokuwiki では “@Internal_DokuWiki_Admins” になります。他の LDAP構文は不要です。(例:全ての “CN=”, “DN=”, 等々)グループの名前だけが必要とされます。

$conf['auth']['ad'] で指定された他のオプションは、直接 adldap ライブラリに渡されます。 他にどのようなオプションが使用できるのかの詳細については、 adLDAP マニュアル を参照して下さい。

シングルサインオンとの組み合わせでは、Windowsドメイン固有の設定を追加することができます。 例)NTLMまたはKerberosドメインに応じて別のActive Directoryサーバーに対して認証する。

(小文字)ドメインは $conf['auth']['ad'] の設定にサブキーとして使用する必要があります。例)デフォルト以外のADサーバーを使用して Foobar Windowsドメインの全てのユーザーを識別するためには、設定に次の追加の行を追加します:

$conf['auth']['ad']['foobar']['account_suffix']     = '@foobar.domain.org';
$conf['auth']['ad']['foobar']['base_dn']            = 'DC=foobar,DC=domain,DC=org';
$conf['auth']['ad']['foobar']['domain_controllers'] = 'otherad.domain.org';
$conf['auth']['ad']['foobar']['ad_username']        = 'otherroot';
$conf['auth']['ad']['foobar']['ad_password']        = 'otherpass';

単一の親の下に複数のDCを持つ組織を使用している場合、デフォルトの Port 389ではなく Port 3268に接続する必要があるかもしれません。 Otherwise, users from the remote DC may not show up as members of any groups. The easiest way to do this is to change adLDAP.php in the source code, because the base call to ldap_connect needs port as a separate argument.

ユーザー情報とパスワードの変更

ユーザーはユーザー情報の更新ボタンを使用して、ユーザー情報(フルネーム、メールアドレス、パスワード)を変更できます。 これには ad_usernamead_password オプションによる特権ユーザーの設定が必要です。パスワードの変更は、SSL 又は TLS を介してのみサポートされます。 adLDAP マニュアルの LDAP over SSL を参照して下さい。

DokuWikiの自動生成されたパスワードは、Active Directoryのデフォルトのパスワードポリシーに一致しないことに注意してください。ADのパスワードポリシーを調整するか、disableactions 定義オプションを使用して“パスワード再発行”オプションを無効にします。

グループ名とユーザー名

グループ名とユーザー名は DokuWiki 内部で整形されます。そのため Active Directory サーバに設定されている内容と異なる場合があります。 スペースはアンダースコアに置き換えられます。”\”(バックスラッシュ)と”#“(ハッシュ記号)は削除されます。

例: Domain Users は DokuWiki 内では Domain_Users になります。ACL を手作業で編集する場合、 Domain%5fUsers と正しくエンコーディングする必要があります。 ”%5f” はアンダースコアを表します。

アクセス制御リスト 設定時、ユーザー名やグループ名を指定する際、このことを念頭においてください。

Enabling SSO

Single Sign On (SSO) means that DokuWiki will use your Windows login name to identify you without the need for you to log in. This relies on the server setting the REMOTE_USER environment variable. The ad backend then will use this username to fetch additional data like your group membership.

To make this work you need to enable the sso setting in local.protected.php and most probably also need to setup a management account with enough permissions to fetch the user info:

$conf['auth']['ad']['sso'] = 1;
$conf['auth']['ad']['ad_username'] = 'MyManager';
$conf['auth']['ad']['ad_password'] = 'ManagerPass';

Additonally some setting have to be made for your server and the used Browser.

Web Server

NTLM on IIS

First configure IIS to use the Windows Logon for authentication (see screenshots):

  1. Open the IIS configuration console using “Start” → “Run” → inetmgr
  2. Right click on the “Default Web Site” entry and choose “Properties”
  3. Switch to the “Directory Security” tab
  4. Click the “Edit” button on “Anonymous access and authentication control”.
  5. Disable “Anonymous access”
  6. Enable “Integrated Windows Authentication”

Choose properties on the default website Switch to the Security Tab and edit the authentication controls Disable anonymous access and select Integrated Authentication

Then make sure NTLM is used as authentication protocol. This has to be done on the commandline:

  1. Open a command line: “Start” → “Run” → cmd
  2. Change to the admin script directory: cd \Inetpub\Adminscripts
  3. Check the current protocol: cscript adsutil.vbs get w3svc/NTAuthenticationProviders
  4. if it doesn't say NTLM, set it: cscript adsutil.vbs set w3svc/NTAuthenticationProviders “NTLM”

Now restart IIS.

NTLM on Apache (Windows)

Download http://sourceforge.net/projects/mod-auth-sspi/ Copy the mod_auth_sspi.so file into your apache modules directory. Add into httpd.conf:

LoadModule sspi_auth_module modules/mod_auth_sspi.so 

<Directory "c:/wamp/www/">
    AuthName "My Intranet"
    AuthType SSPI
    SSPIAuth On
    SSPIAuthoritative On

    require valid-user

</Directory>

Now restart Apache

NTLM on Apache (Linux)

FIXME add info about mod_ntlm and similar here

Kerberos on Apache (Linux)

This setup enables an Apache Server on Linux to verify Kerberos Tickets against an Active Directory server.

Good references for Apache/Kerberos can be found at

The following examples assume your wiki to be running on dokuwiki.yourdomain.com, with your Active Directory server running at dc1.yourdomain.com;

Note: Kerberos is case sensitive, if it is all caps - it should be!

  1. Install Kerberos client1)
  2. Configure Kerberos if necessary, sample /etc/krb5.conf:
    [logging]
     default = FILE:/var/log/krb5libs.log
     kdc = FILE:/var/log/krb5kdc.log
     admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
     default_realm = YOURDOMAIN.COM
     ticket_lifetime = 24h
     forwardable = yes
    
    [realms]
     YOURDOMAIN.COM = {
      kdc = dc1.yourdomain.com
      admin_server = dc1.yourdomain.com
      default_domain = yourdomain.com
     }
    
    [domain_realm]
     dokuwiki.yourdomain.com = YOURDOMAIN.COM
     .yourdomain.com = YOURDOMAIN.COM
     yourdomain.com = YOURDOMAIN.COM
    
    [appdefaults]
     pam = {
      debug = false
       ticket_lifetime = 36000
       renew_lifetime = 36000
       forwardable = true
       krb4_convert = false
     }
  3. Verify that the time on the DokuWiki server is within 5 minutes of the Active Directory server. Otherwise Kerberos will not authenticate.
  4. Verify that the Kerberos environment is working by running:
    kinit username@YOURDOMAIN.COM
    klist
    kdestroy
    (If you get any errors here, make sure your DNS setup is working and you wrote all marked as "YOURDOMAIN.COM" hosts in uppercase in your krb5.conf. Try resolve every hostname manually.
  5. Create a keytab file for your DokuWiki server. Make sure you have created a non-admin user in Active Directory with no password expiration. Run this as a Domain Admin on a Windows server with Support Tools installed:
    ktpass -princ HTTP/dokuwiki.yourdomain.com@YOURDOMAIN.COM -mapuser name_of_ad_user_you_have_created -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapop set +desonly -pass the_ad_users_password -out dokuwiki.HTTP.keytab

    Use the following if you're running Windows 7/Server 2008 R2 clients because des is disabled by default on these operating systems:

    ktpass -princ HTTP/dokuwiki.yourdomain.com@YOURDOMAIN.COM -mapuser name_of_ad_user_you_have_created@yourdomain.com -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -pass the_ad_users_password -out dokuwiki.HTTP.keytab 

    RC4-HMAC is supported on Windows 2000 and higher.

  6. If no errors occurred, copy the keytab file to /etc/httpd/conf/.
  7. Create /etc/httpd/conf.d/dokuwiki.conf:
    <Directory "/var/www/html/dokuwiki">
            # Kerberos Auth
            AuthType Kerberos
            KrbAuthRealms YOURDOMAIN.COM
            KrbServiceName HTTP
            Krb5Keytab /etc/httpd/conf/dokuwiki.HTTP.keytab
            KrbMethodNegotiate on
            KrbMethodK5Passwd on
            require valid-user
    </Directory>
  8. (Re)start Apache: service httpd restart.
Troubleshooting
  • Restart Apache. Web server config changes won't apply until restarted.
  • Try using the FQDN of the DokuWiki server, i.e. http://dokuwiki.yourdomain.com/dokuwiki.
  • If you are presented with a login window, do not enter domain/realm info, just user name and password.
  • Verify that the time on the DokuWiki server is within 5 minutes of the Active Directory server. Otherwise Kerberos will not authenticate.
  • Check all Kerberos files for case inconsistencies.
  • Review this instruction from start to end. See reference links where possible.

Browser

Your browser needs to be setup to forward authentication info to the Webserver.

Setup MS Internet Explorer

FIXME add detailed description

  1. add dokuwiki server to trusted zone
  2. Enable authentication forwarding (Windows Integrated Authentication). Restart your browser to complete the change. IE 8 shown here:

Setup Firefox

  1. Open Firefox and type about:config in the address bar.
  2. In the ‘Filter’ field type one of the following (depending if you're using NTLM or Kerberos) network.automatic-ntlm-auth.trusted-uris or network.negotiate-auth.trusted-uris
  3. Double click the name of the preference that we just searched for
  4. Enter the URLs of the sites you wish to pass NTLM auth info to in the form of:
    http://intranet.company.com,http://email.company.lan

Notice that you can use a comma separated list in this field.

Effect on Plug-Ins

Some plug-ins may not gracefully work once you've switched over to the ad auth backend. Specifically, pulling the user's display name will not work if you don't provide valid authentication information. One such plugin is WikiStatistics, where a simple workaround to only display the username can be employed.

Due to missing support for paged queries in PHP's LDAP extension, plugins that try to get all users from the auth backend will fail if you use AUTH:AD and have more than 1000 objects in Active Directory. One example is the IssueTracker plugin.

1)
Redhat: yum install krb5-workstation, Debian: krb5-user
2)
Redhat: yum install mod_auth_kerb, Debian: libapache2-mod-auth-kerb
ja/auth/ad.txt · 最終更新: 2015-06-23 05:32 by 121.83.218.94

特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki