作成中です - Mitsuhiro Yoshida 2007年1月1日 (月) 00:37 (CST)

このドキュメントは、MoodleのLDAP認証をセットアップする方法に関して記述したものです。基本シナリオでは、すべてをシンプルかつ単刀直入に説明していますので、ほとんどのインストールに関して十分な内容になっています。あなたのインストールが若干大規模で複数のLDAPサーバまたはユーザのためにLDAPツリーで複数のロケーション (コンテクスト) を使用している場合、高度なシナリオをご覧ください。

基本シナリオ

前提

  1. あなたのMoodleサイトは、http://your.moodle.site/ にあります。
  2. あなたのPHPにはLDAP拡張モジュールが含まれています。LDAP拡張モジュールは有効かつロードされ、 ユーザ'admin'でログインした場合、 http://your.moodle.site/admin/phpinfo.php' に表示されます。
  3. あなたのLDAPサーバのIPアドレスは、192.168.1.100 です。
  4. あなたは、SSLで保護されたLDAP (LDAPS) を使用していません。この場合、特定のオペレーション (例 MS Active Directoryを使用してデータを更新できません -- 以後MS-AD --) は動作しませんが、ユーザ認証だけでしたらOKです。
  5. あなたは、ユーザの最初のログイン時にパスワードを変更させたくありません。
  6. MS-ADを使用している場合、あなたは認証データのソースとしてシングルドメインを使用しています (詳細は付録をご覧ください)。
  7. あなたは、LDAPツリーのルートとしてトップレベル識別名 dc=my,dc=organization,dc=domain を使用しています。
  8. あなたは、管理者権限のないLDAPユーザアカウントを持ち、LDAPサーバにバインドします。これは、特定のLDAPサーバでは必要ありませんが、MS-ADでは必要とします。あなたのLDAPサーバに匿名バインドを許可する設定がなされていても、LDAPユーザアカウントを使用することで問題が生じることはありません。このアカウントとパスワードが有効期限切れにならないことを確認して、可能な限り強固なパスワードを設定してください。Moodleの設定時、1度だけこのパスワードを入力する必要があります。ですから、可能な限り推測できないパスワードを作成することを恐れないでください。つまり、このユーザは、DN (識別名 Distinguished Name) cn=ldap-user,dc=my,dc=organization,dc=domain およびパスワード hardtoguesspassword を持ちます。
  9. あなたのすべてのMoodleユーザは、root直下にある moodleusers と呼ばれるOU (組織単位 organizational unit) に入ります。このOUは、DN ou=moodleusers,dc=my,dc=organization,dc=domain を持ちます。
  10. あなたは、LDAPユーザのパスワードをMoodleに保存したくありません

Moodle認証の設定

管理者としてログインして、管理 >> ユーザ >> 認証オプション へ移動してください。「認証方法の選択」リストボックスで、「LDAPサーバを使用する」を選択してください。次のようなページが表示されます:

auth ldap config screenshot.jpg


さて、値を入力する必要があります。一歩一歩進みましょう。

フィールド名 入力値
ldap_host_url あなたのLDAPサーバのIPアドレスが 192.168.1.100の場合、"ldap://192.168.1.100" と入力してください (引用符なし)。
ldap_version 本当に古いLDAPサーバを使用していない限り、version 3を選択してください。
ldap_preventpassindb あなたがMoodleデータベースにユーザパスワードを保存したくない場合、「Yes」を選択してください。
ldap_bind_dn 上記で定義されたバインドユーザの識別名です。cn=ldap-user,dc=my,dc=organization,dc=domain と入力してください。
ldap_bind_pw 上記で定義されたバインドユーザのパスワードです。hardtoguesspassword と入力してください。
ldap_user_type 選択:
  • Novel Edirectory あなたのLDAPサーバが、Novell eDdirectoryで稼動している場合、選択してください。
  • posixAccount (rfc2307) あなたのLDAPサーバが、RFC-2307準拠のLDAPサーバ (OpenLDAPサーバ) で稼動している場合、選択してください。
  • posixAccount (rfc2307bis) あなたのLDAPサーバが、RFC-2307準拠のLDAPサーバで稼動している場合、選択してください。
  • sambaSamAccount (v.3.0.7) あなたのLDAPサーバが、SAMBA 3.x LDAPスキーマ拡張で稼動し、あなたが使用したい場合、選択してください。
  • MS ActiveDirectory あなたのLDAPサーバが、Microsoftアクティブディレクトリ (MS-AD)で稼動している場合、選択してください。
ldap_contexts あなたのすべてのMoodleユーザは、コンテクスト (コンテナ) のDNで探されます。ここでは、ou=moodleusers,dc=my,dc=organization,dc=domain と入力してください。
ldap_search_sub ou=moodleusers,dc=my,dc=organization,dc=domain 配下にサブ組織単位 (sub organizational unit サブコンテクスト) があり、あなたがサブ組織単位をMoodleに検索して欲しい場合、yesを選択してください。そうでない場合、noを選択してください。
ldap_opt_deref しばしば、LDAPサーバはあなたが探している真の値が他のLDAPツリーにあると伝えるでしょう (これはエイリアスと呼ばれます)。あなたがMoodleに修飾参照を求めて、真の値をオリジナルロケーションから取得したい場合、「Yes」を選択してください。Moodleに修飾参照を求めない場合、「No」を選択してください。あなたが、MS-ADを使用している場合、「No」を選択してください。
ldap_user_attribute この属性は、あなたのLDAPツリーでユーザに名前をつける/検索するために使用されます。このオプションは、あなたが上記で選択した ldap_user_type の値から初期値を取得します。ですから、特別なことをすること以外、ここに値を入力する必要はありません。

通常、cn (Novell eDirectoryおよびMS-AD) または uid (RFC-2037, RFC-2037bisおよびSAMBA 3.x LDAP extension) ですが、あなたがMS-ADを使用している場合、必要であれば sAMAccountName (pre-Windows 2000 ログオンアカウント名) を使用することもできます。

ldap_memberattribute グループのメンバ一覧を表示するために使用される属性です。このオプションは、上記で選択したldap_user_type 値をデフォルトとして持ちます。ですから、特別なことをすること以外、ここに値を入力する必要はありません。

通常の値は、member および memberUid です。

ldap_objectclass ユーザ検索に使用されるLDAPオブジェクトのタイプです。このオプションは、上記で選択したldap_user_type 値をデフォルトとして持ちます。ですから、特別なことをすること以外、ここに値を入力する必要はありません。

下記は、ldap_user_type のデフォルト値です:

  • User Novel eDirectory用
  • posixAccount RFC-2037およびRFC-2037bis用
  • sambaSamAccount SAMBA 3.0.x LDAP extension用
  • user MS-AD用
Force change password ユーザが最初にMoodleへログインしたときに、パスワードwの変更を強制したい場合、Yes を設定してください。そうでない場合、no と設定してください。変更を強制されるパスワードは、あなたのLDAPサーバにあるパスワードであることに気をつけてください。

最初のログインでユーザにパスワードを変更させたくない場合、この設定を No のままにしてください。

Use standard Change Password Page
  • 「Yes」を設定した場合、Moodleは標準のパスワード変更ページを使用し、ユーザはいつでも自分のパスワードを変更することができます。
  • 「No」を設定した場合、Moodleは「パスワードURLの変更」 (管理 >> ユーザ >> 認証 >> 一般設定) で指定されたページを使用します。

MoodleからLDAPパスワードを変更するには、LDAPS接続が必要であることに注意してください (これはMS-ADでは本当です)。

また、Novell eDirectory以外は、Moodleからパスワードを変更するコードは、ほとんどテストされていません。ですから、他のLDAPサーバでの動作は保証されません。

ldap_expiration
  • この設定を「No」にすると、Moodleは有効期限に関わらずユーザのパスワードをチェックしません。
  • この設定を「LDAP」にすると、Moodleは有効期限に関わらずユーザのLDAPパスワードをチェックしません。そして、何日でパスワードの有効期限が切れるかユーザに警告します。

現在のコードでは、Novell eDirectory LDAPサーバのみ扱うことができます。しかし、MS-ADでも動作するようにできるパッチがあちこちに投稿されています (authenticationを参照)。

ですから、あなたがNovell eDirectoryサーバを使用している (またはパッチを使用している) 以外、ここでは「No」を選択してください。

ldap_expiration_warning この属性では、パスワード有効期限切れの何日前に、ユーザにパスワード有効期限が警告されるか設定します。
ldap_exprireattr この属性は、パスワードの有効期限をチェックするために使用されます。このオプションは、デフォルト値として、あなたが上記で選択した ldap_user_type の値を取得します。ですから、特別なことをすること以外、ここに値を入力する必要はありません。
ldap_gracelogins ここでは、Novell eDirectory特有の設定を行います。「Yes」に設定した場合、LDAPグレースログインをサポートします。パスワードの有効期限が切れた後、ユーザはグレースカウントがゼロになるまでログインできます。

あなたがNovell eDirectoryサーバを使用し、グレースログインをサポートする以外、ここでは「No」を選択してください。

ldap_graceattr 現在、この設定はコードで使用されていません (Novell eDirectory特有の設定です)。

ですから、ここに値を入力する必要はありません。

ldap_create_context
ldap_creators すべてのMoodlecreatorを含むDNのグループです。これは、あなたがcreatorとしたい各ユーザに関するposixGroupの "memberUid" 属性です。あなたのグループが「creators」と呼ばれる場合、ここに creators, type cn=creators,ou=moodleusers,dc=my,dc=organization,dc=domain と入力してください。ユーザのフルDNを使用しないでください (例 memberUid: cn=JoeTeacher,ou=moodleusers,dc-my,dc=organizations,dc=domain ではなく、 memberUid: JoeTeacher を使用してください)。

eDirectoryでは、グループのオブジェクトクラスは (デフォルトで) posixGroup ではありませんが、メンバー属性は memberUid, ではなく member, です。また、メンバー属性の値は、当該ユーザのフルDNとなります。このフィールドを使用できるようMoodleのコードを修正することもできますが、より良いソリューションは、新しい posixGroupobjectClass 属性をあなたのcreatorグループに追加し、それぞれのcreatorグループの memberUid 属性にCNにを設定することです。

MSアクティブディレクトリでは、セキュリティグループを作成して、あなたのcreatorの一部に追加する必要があります。上記のLDAPコンテクストが 'ou=staff,dc=my,dc=org' の場合、あなたのグループでは 'cn=creators,ou=staff,dc=my,dc=org' に設定してください。ユーザの一部が他のコンテクストにあり、同じセキュリティグループに追加された場合、同じフォーマットを使用して、これらを分離したコンテクストとして最初のコンテクストの次に追加する必要があります。

この設定は任意です。

First name この属性は、LDAPサーバのユーザの名を持ちます。通常、givenName です。

この設定は任意です。

Surname この属性は、LDAPサーバのユーザの姓を持ちます。通常、sn です。

この設定は任意です。

Email address この属性は、LDAPサーバのユーザのメールアドレスを持ちます。通常、mail です。

この設定は任意です。

Phone 1 この属性は、LDAPサーバのユーザの電話番号を持ちます。通常、telephoneNumber です。

この設定は任意です。

Phone 2 この属性は、LDAPサーバのユーザの追加の電話番号を持ちます。homePhonemobilepagerfacsimileTelephoneNumber または他の名称を使用できます。

この設定は任意です。

Department この属性は、LDAPサーバのユーザの学部または学科名を持ちます。これは通常、departmentNumber(posixAccountおよび恐らくeDirectory) または department' (MS-AD) です。

この設定は任意です。

Address この属性の名称は、あなたのLDAPサーバでユーザの所在地住所 (番地) を保持します。これは通常、streetAddress または street' です。

この設定は任意です。

City/town この属性の名称は、あなたのLDAPサーバで、ユーザの所在地住所 ( 市/町 ) を保持します。これは通常、l (小文字のL) または localityName (MS-ADでは有効ではありません) です。

この設定は任意です。

Country この属性の名称は、あなたのLDAPサーバで、ユーザの所在地住所 ( 国 ) を保持します。これは通常、c または countryName (MS-ADでは有効ではありません) です。

この設定は任意です。

Description description

この設定は任意です。

ID Number

この設定は任意です。

Language preferredLanguage

この設定は任意です。

Instructions

その他のフィールドは、すべての認証方法で一般的なため、ここには記載しません。

高度なシナリオ

複数のLDAPサーバを使用する

複数のldap_host_urlフィールドを作成することで、あなたのシステムに弾性を与えることができます。単に下記のシンタックスを使用してください:
ldap://my.first.server ; ldap://my.second.server ; ...

もちろん、これはすべてのサーバがディレクトリ情報を共有し、複製または同期メカニズムがeDirectoryに導入され、メインのLDAP互換ディレクトリが一般化されている場合に動作します。

Moodle 1.5 - 1.6に実装されているLDAP認証には1つの欠陥があります: auth_ldap_connect() 関数は、サーバをラウンドロビンモードでは処理せず、連続的に処理します。このため、プライマリサーバが停止した場合、次のサーバに切り替わるまでコネクションのタイムアウトを待つ必要があります。

LDAPツリーで複数ユーザロケーション (コンテクスト) を使用する

例えば、すべてのユーザアカウントが ou=people,dc=my,dc=organization,dc=domain または ou=people,o=myorg コンテナの中に保存されるようにディレクトリツリーがフラットな場合、複数ユーザロケーションを使用する必要はありません。

逆に、あなたがユーザ管理をACLメカニズムに委任する場合、ユーザをou=students,ou=dept1,o=myorg および ou=students,ou=dept2,o=myorg のようなコンテナに保存することができます。

次に、代わりの方法です :

  • ldap_search_sub属性で o=myorg レベルを探して yes を設定してください。
  • ldap_contextに ou=students,ou=dept1,o=myorg ; ou=students,ou=dept2,o=myorg を設定してください。

2つのソリューションのどちらを選ぶかは、あなたのディレクトリツリーおよびLDAPソフトウェアのインデックス能力のベンチマークに大きく依存します。そのような深いツリーには、異なる識別名を持ちながら、同じ一般名 (cn) を共有する可能性があることに注意してください。この場合、結果として (常に同じユーザを返す) 2番目のソリューションを選ぶ必要があります。

LDAPS (LDAP + SSL) を使用する

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

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

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

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

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

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

次のステップでは、PHPのOpenLDAP拡張モジュールのSSL証明書チェックを無効にしてください。ほとんどの場合、WindowsサーバではプレコンパイルされているPHPバージョンを使用していると思われますので、C:\OpenLDAP\sysconf ディレクトリを作成してください。新しく作成したディレクトリに、次のコンテンツを含んだ "ldap.conf" という名称のファイルを作成してください::

TLS_REQCERT never.

この設定で、あなたはMS-AD接続時に ldaps:// を使用できるはずです。

付録

MSアクティブディレクトリの子ドメインおよびグローバルカタログ

現在、Moodleでは複数ドメインコントローラのサポートのみに限定されています。特にそれぞれのLDAPサーバは同一の情報を含んでドメインコントローラリスト上にある必要があります。あなたが複数のドメインにユーザを持っている場合、これが問題となります。1つの解決方法は、MS-ADと連携するときにグローバルカタログを使用することです。グローバルカタログはリードオンリー、MS-ADフォレストを部分的に表示するために、またオブジェクトのディレクトリが見つからないときにディレクトリ全体を検索するために設計されています。

例えば、あなたの属している組織が「example.org」というドメインを持っていて、スタッフおよび学生が2つの子ドメイン「staff.example.org」および「student.exapmle.org」に含まれているとしましょう。3つのドメイン (example.org、staff.example.orgおよびstudents.example.org) は、それぞれドメインコントローラ (dc01、dc02およびdc03) を持っています。それぞれのドメインコントローラは、そのドメインのみに属し完全に書込み権があるオブジェクトを含みます。しかし、ドメインコントローラの1つでグローバルカタログが有効にされていると仮定すると (下記参照)、グローバルカタログへのクエリーにより、合致したオブジェクトがすべてのドメインから漏洩してしまいます。グローバルカタログは、アクティブディレクトリフォレストの複製を通して自動的に保持され、複数のサーバで有効にすることもできます (その場合、冗長性およびロードバランシングが必要です)。

複数のドメインからログインできるよう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ドメインの2つのOU 「Support Staff'」および「Teaching Staff」に入ります。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から提供される部分的な属性セットとして、グローバルカタログがそれぞれのオブジェクト属性の部分的な表現のみ含んでいることは注目に値します。しかし、一般的なMoodleインストールで使用される通常の情報 (姓、名、メールアドレス、sAMAccountName等) がセットの中に含まれています。特定の利用に対して、スキーマの様々な属性を削除または追加することができます。

In most cases the Global Catalog is read-only, update queries must be made over the standard LDAP ports to the domain controller that holds the object in question (in our example, updating a student's details would require an LDAP query to the students.example.org domain controller - dc03, it would not be possible to update details by querying the Global Catalog.) The exception to this would be in an environment where there is only a single domain in the active directory forest; in this case the Global Catalog holds a writable full set of attributes for each object in the domain. However, for the purposes of Moodle authorisation, there would be no need to use the Global Catalog in this case.

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

The Global Catalog is available on Windows 2000 and Windows 2003 Active Directory servers. To enable, open the ‘Active Directory Sites and Services’ MMC (Microsoft Management Console) snap-in. Extend ‘Sites’ and then the name of the Site containing the active directory forest you wish to use. Expand the server you wish to enable the Global Catalog on, right click ‘NTDS settings’ and select the ‘Properties’ tab. To enable, simply click the ‘Global Catalog’ checkbox. Under a Windows 2000 server it is necessary to restart the server (although it won’t prompt you to); under Windows 2003 server it is not necessary to restart the server. In either case you will generally have to wait for the AD forest to replicate before the Global Catalog offers a representation of the entire AD forest. Changes made in Active Directory will also be subject to a short delay due to the latency involved with replication. If your AD servers are firewalled port 3268 will need to be opened for Global Catalog servers. If your organisation uses Microsoft Exchange then it its highly likely that at least one Domain Controller will already have Global Catalog enabled ? Exchange 2000 and 2003 rely on the Global Catalog for address information, users also access the Global Catalog when using the GAL (Global Address List)

ldap auth_user_create() は、Novellのみサポートする

ユーザ認証をLDAPに設定した後で、私は気付きました。メールによるユーザ確認と組み合わせた場合、LDAPはedit (Novell) のみサポートするようです。例えば私の場合 (openladapを使用)、ユーザフォーム入力時に下記のエラーが表示されます:

auth: ldap auth_user_create() does not support selected usertype:"rfc2307" (..yet)

関連情報