Active Directory

提供:MoodleDocs
2009年3月1日 (日) 18:27時点におけるMitsuhiro Yoshida (トーク | 投稿記録)による版 (Done.)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索

Microsoft社のActive Directory (AD) では、LDAP (Lightweight Directory Access Protocol) のような機能を含む、様々なネットワークディレクトリサービスを提供しています。このサービスは、Windows 2000サーバおよびそれ以降のバージョンに実装されています。このページでは、LDAP認証機能を中心に説明します。

ADおよびLDAPのトラブルシューティング

Warning: The PHP LDAP module does not seem to be present. Please ensure it is installed and enabled.

通常、これはメインのldap dllまたはサポートされているdllのひとつが見つからないことを意味します。 メインのdllから始めてみましょう。 http://(moodleserver)/admin/phpinfo.phpを閲覧して、どのphp.iniを使用するか指定する「Configuration File (php.ini) Path 」フィールドを確認した後、php.iniをエディタで開いてください。「extension=php_ldap.dll」の行を見つけて、先頭にセミコロンがある場合、セミコロンを削除してください。このセミコロンにより、モジュールの読み込みは停止されてしまいます! このファイルを開いている間に「extension_dir」を探して、どのフォルダが設定されているかメモしてください。そのフォルダを開いて、そこにphp_ldap.dllがあるかどうか確認してください。 まだ、問題が解決しない場合、サポートされているdllがありませんが、あなたはどのdllがないのか伝えられていません。どのdllがないのか確認するには、コマンドプロンプトを開いてPHPディレクトリに移動した後、コマンド「php -m」を実行してください。あなたは、何らかのエラーメッセージを確認することができるはずです。スマートではありませんが、あなたは少なくともエラーに関する情報を取得することができます! 一覧表示されているDLLを見つけて、PHPディレクトリにコピーしてください。そして、apache/httpサービスをリスタートしてください。再度、「php -m」コマンドを実行するとエラーが表示されないはずです。また、Moodle内のメッセージにもエラーが表示されません。

すべてのLDAPサーバにLDAPモジュールから接続できません

LDAP-module cannot connect any LDAP servers: 
Server: 'ldap://my.ldap.server/' 
Connection: 'Resource id #26' Bind result: 

このメッセージが表示される場合、あなたは正しくないバインドユーザ情報でログインを試みているか、ユーザアカウントにAcrive Directoryの十分なパーミッションがないことが考えられます。この問題を解決する最良の方法は、ldp.exeを使用して、成功するまでバインドをテストすることです。ldp.exeのインストールに関するインストラクションは下記にあります。 プログラムを開いて、ADに接続します。サーバ名を入力して、接続メニューからバインドを選択してください。あなたが正しいと思う詳細情報を入力すると、恐らくエラーメッセージが返されると思われます。アカウントの特権を調整するか、別のアカウントを使用して「Authenticated as」メッセージが表示されるまで試してください。あなたのアカウントをADのバインドに使用することができると確信できるようになった場合、ユーザ名のDNが正しいかどうか確認してください。あなたがバインドに使用するユーザが見つかるまで、左側のツリーを広げてください。アイテムの上で右クリックして、DNをコピーしてください。Moodleのユーザ認証ページに移動して、コピーした値をldap_bind_dnフィールドに貼り付けてください。パスワードを追加してください。これで、あなたのユーザを正常にバインドできるようになります。

コンテクストおよびクリエータに関して、正しいCNを取得する

ADに精通していない人にとって、これは非常に難解であり、精通している人にとっても、それほど簡単だというわけではありません。再び、ldp.exeはあなたの友人であると言えます。ldp.exeのインストールに関するインストラクションは下記にあります。 あなたがバインドに使用するユーザが見つかるまで、左側のツリーを広げてください。アイテムの上で右クリックして、DNをコピーしてください。Moodleのユーザ認証ページに戻って、コピーした値をldap_contextsまたはldap_creatorsに貼り付けてください。

正しいuser_attributeを取得する

デフォルトで、認証のためMoodleはアカウントのcn (フルネーム) を使用します。しかし、多くのネットワークでは、推測することが非常に簡単なため、完全な姓を使用しません。また、あなたは簡単に同じアカウント名のユーザを2名持つことができてしまいます。このケースがあなたに当てはまる場合、あなたはログインIDに関して、別のフィールドをMoodleに伝える必要があります。 ldp.exeでは、あなた自身でユーザアカウントを探せるよう、左側にツリーが表示されます。ツリーのアイテムをダブルクリックすることで、ユーザアカウント詳細が画面の右側に表示されます。あなたがログインIDを見つけるまで、一覧表示されているアイテムを閲覧してください。私にとって、また多くの人にとって、sAMAccountNameになると思います。このアカウント名をコピーして、Moodleユーザ認証ページのldap_user_attributeに貼り付けてください。 ldp.exeのインストールに関するインストラクションは下記にあります。

ldp.exeサーバツールをインストールする

ほとんどのバージョンのWindowsサーバでは、ldp.exeは一部のサーバツールとして提供されます。あなたのWindowsサーバインストールディスクを探して、その中でSupport\Toolsというフォルダ名のフォルダを探してください。そのフォルダの中にサーバツールのインストールを実行できるSupTools.msiがあります。インストール実行後、あなたはProgram Filesフォルダ配下に、ldp.exeが入ったSupport Toolsというフォルダを持ちます。Windows XP Support Toolsでも使用できるldp.exeはMicrosoftのここからダウンロードすることができます。代わりに単一のldp.exeは、ここからダウンロードすることができます。

Active Directory設定例

以下、Active Directoryの設定例です。上記詳細のように、あなたのローカルActive Directory設定に基づき、各設定値は異なります。しかし、ほとんどのケースに関して、有効なスターティングポイントを例示します。

ldap_host_url = ldap://ads.example.com
ldap_version = 3
ldap_preventpassindb = yes
ldap_bind_dn = bind-user@example.com
ldap_bind_pw = bind-password
ldap_user_type = MS ActiveDirectory
ldap_contexts = ou=moodleusers,dc=example,dc=com
ldap_user_attribute = sAMAccountName


ldap_bind_dnの値は、メインのインストラクションで表示されている「CN=bin-user,CN=Users,DC=example,DC=com」フォーマットまたはここで例示されている「bind-user@example.com」フォーマットのどちらか適用することができます。

グローバルカタログ

現在、Moodleは複数ドメインコントローラのみ限定サポートしています。特に、同一の情報セットを含むLDAPサーバを想定しています。あなたのユーザが複数のドメインに登録されている場合、問題が生じてしまいます。MS-ADでの一つの解決方法は、グローバルカタログを使用することです。グローバルカタログは、読み取り専用に設計されています。また、MS-ADフォレスト全体の一部を指定して、所要のオブジェクトのドメインが分からない場合、ディレクトリ全体を検索するよう設計されています。

グローバルカタログを有効化する

グローバルカタログは、Windows 2000およびWindows 2003 Active Directoryサーバのみで利用できます。有効にするには、「Active Directoryサイトとサービス」 MMC (Microsoft Management Console) スナップインを開いてください。「サイト」を広げると、あなたが使用したいActive Directoryフォレストを含んだサイト名が表示されます。あなたがグローバルカタログを有効にしたいサーバを広げて、右クリックで「NTDS設定」、そして「プロパティ」タブを選択してください。有効にするには、「グローバルカタログ」チェックボックスをチェックしてください。Windows 2000以下では、サーバを再起動する必要があります (あなたが再起動を求められることはありません)。Windows 2003以下では、サーバの再起動は必要ではありません。両方のケースで、グローバルカタログがADフォレスト全体を提供するまで、あなたは一般的にADフォレストの複製を待つ必要があります。また、Active Directory内の変更は、複製の影響で若干遅れる場合もあります。あなたのADサーバのポート3268がファイアーウォールで閉じられている場合、グローバルカタログサーバのために開ける必要があります。あなたの組織がMicrosoft Exchangeを使用している場合、少なくとも1つのドメインコントローラでグローバルカタログが有効にされている可能性が極めて高いと考えられます – Exchange 2000および2003では、アドレス情報に関してグローバルカタログに依存します。また、GAL (Global Address List) を使用する場合、ユーザはグローバルカタログにアクセスします。

子ドメイン

あなたの組織がexample.orgというメインのドメインを使用している場合、スタッフおよび学生は、2つの子ドメイン「staff.example.org」および「students.example.org」に入ります。3つのドメイン (example.org、staff.example.org、students.example.org) は、個々のドメインコントローラ (dc01、dc02、dc03) を持ちます。それぞれのドメインコントローラは、そのドメインに属している、完全で書き込み可能なオブジェクト表現のみ含みます。しかし、1つのドメインコントローラ (例 dc01) でグローバルカタログが有効にされていると仮定すると (下記をご覧ください)、グローバルカタログへのクエリは、すべて3つのドメインにおいて、合致するオブジェクトを露呈することになります。グローバルカタログは、Active Directoryフォレスト間のレプリケーションを通して、自動的にメンテナンスされます。また、 (あなたが、冗長性/ロードバランシングが必要な場合) 複数のサーバ間でも可能です。

これを利用できるようにするには、複数ドメインからMoodleにログインできるようにするだけです。グローバルカタログは、標準的なLDAPクエリのポート389とは反対のポート3268で動作します。結果として、まだグローバルカタログがdc01で動作しているとすると、ldap_host_urlは、「ldap://dc01.example.org:3268」のようになります。後の設定は、他のMS-AS認証設定と同じです。

あなたがアクセスを与えたい個人のロケーションを指示するには、ldap_contexts設定を使用してください。上記例を少しだけ拡張するには: example.orgドメインのユーザは、すべてUsersのOUにあり、staff.example.orgドメインのユーザは、ドメインのrootにある「Support Staff」および「Teaching Staff」の2つのOUにあります。そして、students.example.orgドメインの学生は、登録された年度を示すOUにあります。これら、すべては「Students」のOU配下にあります。結果として私たちのldap_contexts設定は次の内容に似た感じになります:「OU=Users,DC=example,DC=org; OU=Support Staff,DC=staff,DC=example,DC=org; OU=Teaching Staff,DC=staff,DC=example,DC=org; OU=Students,DC=students,DC=example,DC=org」Moodleが子OUを検索できるようにするため、ldap_search_subオプションは、「Yes」に設定してください。

Microsoftから提供されたPartial Attribute Set (部分的な属性セット) として、グローバルカタログにおいて、それぞれのオブジェクトの属性一部のみを含んでいることは注目に値します。しかしながら、一般的なMoodleインストレーションでは、セットに含まれている共通情報 (Forename、Surname、Email Address、sAMAccountName等) が使用されるようです。必要に応じて、属性を削除または追加することにより、スキーマを変更することができます。

多くの場合、グローバルカタログはリードオンリーであり、クエリの更新は問題のオブジェクトを保持しているドメインコントローラに対して標準的なLDAPポート経由で実行されるべきです (私たちの例では、学生の詳細情報の更新には、students.example.orginドメインコントローラ - dc03のLDAPクエリを必要とします。また、グローバルカタログのクエリにより、詳細情報を更新することはできません)。 これに関する例外は、Active Directoryフォレストに単一ドメインのみ存在する環境です。この場合、ドメイン内それぞれのオブジェクトに対して、グローバルカタログは書き込み可能な属性のフルセットを保持します。しかし、Moodleの権限授与の目的では、グローバルカタログの使用は必要ではありません。

Active Directory + Moodle 1.8

Modle 1.8において、Active Directoryアクセスが必要な場合、PHP LDAPオプションに問題があります。

Active Directory認証のLAPMプラットフォームでMoodleを使用する場合、エラーが発生します。

詳細は、このバグレポート http://tracker.moodle.org/browse/MDL-10921 MDL-10921 を確認するか、この投稿 http://moodle.org/mod/forum/discuss.php?d=78316 をご覧ください。

MSアクティブディレクトリ + SSL

認証局 (Certificate Authority) がインストールされていない場合、まず次のようにインストールしてください:

  1. スタート -> コントロールパネル -> プログラムの追加と削除 をクリックする。
  2. Windowsコンポーネントの追加と削除」をクリックして、インターネット認証サービス を選択する。
  3. インターネット認証サービス のインストール手順に従う。エンタープライズレベルの選択をお勧めします。

WindowsインストールCDの\Support\toolsディレクトリから suptools.msi をインストールすることで、SSLが有効にされていることを確認してください。サポートツールをインストールした後に:

  1. スタート -> ファイル名を指定して実行 を選択して、入力フィールドに ldp と入力してください。
  2. ldapウィンドウから 接続 -> 接続 を選択して、有効なホスト名およびポート番号 636 を入力してください。また、SSLチェックボックスをチェックしてください。

正常に設定された場合、接続に関する情報が表示されます。

クライアント再度に関する設定の詳細は、クライアントサイド (Moodleサーバ) でLDAPSを有効にするをご覧ください。

関連情報