LDAP認証
再作成中です - Mitsuhiro Yoshida 2009年1月20日 (火) 21:51 (CST)
Moodle 1.9
ロケーション: サイト管理 > ユーザ > 認証 > LDAPサーバ の設定リンク
このドキュメントは、MoodleのLDAP (Lightweight Directory Access Protocol) 認証をセットアップする方法に関して記述したものです。MoodleにおけるインストールおよびLDAP管理に関してユーザをサポートするため、基本設定、高度な設定およびトラブルシューティングに関して説明します。
目次
基本シナリオ
前提
- あなたのMoodleサイトは、http://your.moodle.site/ にあります。
- あなたのPHPにはLDAP拡張モジュールが含まれています。LDAP拡張モジュールは有効かつロードされ、 ユーザ「admin」でログインした場合、 http://your.moodle.site/admin/phpinfo.php' に表示されます。
- あなたのLDAPサーバのIPアドレスは、192.168.1.100 です。
- あなたは、SSLで保護されたLDAP (LDAPS) を使用していません。この場合、特定のオペレーション (例 MS Active Directoryを使用してデータを更新できません -- 以後MS-AD --) は動作しませんが、ユーザ認証だけでしたらOKです。
- あなたは、ユーザの最初のログイン時にパスワードを変更させたくありません。
- MS-ADを使用している場合、あなたは認証データのソースとしてシングルドメインを使用しています (詳細は付録をご覧ください)。
- あなたは、LDAPツリーのルートとして、トップレベル識別名 dc=my,dc=organization,dc=domain を使用しています。
- あなたは、管理者権限のないLDAPユーザアカウントを持ち、LDAPサーバにバインドします。これは、通常のLDAPサーバでは必要ありませんが、MS-ADでは必要とします。あなたのLDAPサーバに匿名バインドを許可する設定がなされていても、LDAPユーザアカウントを使用することで問題が生じることはありません。このアカウントとパスワードが有効期限切れにならないことを確認して、可能な限り強固なパスワードを設定してください。Moodleの設定時、1度だけこのパスワードを入力する必要があります。ですから、可能な限り推測できないパスワードを作成することを恐れないでください。つまり、このユーザは、DN (識別名 Distinguished Name) cn=ldap-user,dc=my,dc=organization,dc=domain およびパスワード hardtoguesspassword を持ちます。
- あなたのすべてのMoodleユーザは、root直下にある moodleusers と呼ばれるOU (組織単位 organizational unit) に入ります。このOUは、DN (識別名 Distinguished Name) ou=moodleusers,dc=my,dc=organization,dc=domain を持ちます。
- あなたは、LDAPユーザのパスワードをMoodleに保存したくありません。
Moodle認証の設定
管理者としてログインして、管理 >> ユーザ >> 認証オプション へ移動してください。「認証方法の選択」リストボックスで、「LDAPサーバを使用する」を選択してください。次のようなページが表示されます:
さて、値を入力する必要があります。一歩一歩進みましょう。
LDAPサーバ設定
フィールド名 | 入力値 |
---|---|
ホストURI | あなたのLDAPサーバのIPアドレスが 192.168.1.100 の場合、ldap://192.168.1.100 と入力してください。 |
バージョン | 本当に古いLDAPサーバを使用していない限り、version 3 を選択してください。 |
LDAPエンコーディング | LDAPサーバで使用するエンコーディングを指定してください。多くの場合、UTF-8です。 |
BIND設定
フィールド名 | 入力値 |
---|---|
パスワードを隠す | あなたがMoodleデータベースにユーザパスワードを保存したくない場合、「Yes」を選択してください。 |
識別名 | 上記で定義されたバインドユーザの識別名です。cn=ldap-user,dc=my,dc=organization,dc=domain と入力してください (引用符なし)。 |
パスワード | 上記で定義されたバインドユーザのパスワードです。hardtoguesspassword と入力してください (引用符なし)。 |
ユーザlookup設定
フィールド名 | 入力値 |
---|---|
ユーザタイプ | 選択:
|
コンテクスト | あなたのすべてのMoodleユーザは、コンテクスト (コンテナ) のDN (識別名 Distinguished Name) で探されます。ここでは、ou=moodleusers,dc=my,dc=organization,dc=domain と入力してください。 |
サブコンテクストを検索する | ou=moodleusers,dc=my,dc=organization,dc=domain 配下にサブ組織単位 (sub organizational unit サブコンテクスト) があり、あなたがMoodleにサブ組織単位を検索して欲しい場合、「Yes」を選択してください。そうでない場合、「No」を選択してください。 |
エリアスの修飾参照 | しばしば、LDAPサーバはあなたが探している真の値が他のLDAPツリーにあると伝えるでしょう (これはエイリアスと呼ばれます)。あなたがMoodleに修飾参照を求めて、真の値をオリジナルロケーションから取得したい場合、「Yes」を選択してください。Moodleに修飾参照を求めない場合、「No」を選択してください。あなたが、MS-ADを使用している場合、「No」を選択してください。 |
ユーザ属性 | この属性は、あなたの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_user_type 値をデフォルトとして持ちます。ですから、特別なことをすること以外、ここに値を入力する必要はありません。
通常の値は、member および memberUid です。 |
ユーザDNのメンバー属性 | Whether the member attribute contains distinguished names (1) or not (0).This option takes a default value based on the User type value you choosed above. So unless you need something special, you don't need to fill this in. |
オブジェクトクラス | ユーザ検索に使用されるLDAPオブジェクトのタイプです。このオプションは、上記で選択したldap_user_type 値をデフォルトとして持ちます。ですから、特別なことをすること以外、ここに値を入力する必要はありません。
The type of LDAP object used to search for users. This option takes a default value based on the User type value you choosed above. So unless you need something special, you don't need to fill this in. 下記は、ldap_user_type のデフォルト値です:
If you get an error about a problem with updating the ldap server (even if you have specified not to write changes back to the ldap server) try setting the ldap object class to * - see http://moodle.org/mod/forum/discuss.php?d=70566 for a discussion on this problem |
パスワード変更の強制
フィールド名 | 入力値 |
---|---|
パスワード変更の強制 | ユーザが最初にMoodleへログインしたときに、パスワードの変更を強制したい場合、「Yes」を設定してください。そうでない場合、「No」と設定してください。変更を強制されるパスワードは、あなたのLDAPサーバにあるパスワードであることに気をつけてください。
最初のログインでユーザにパスワードを変更させたくない場合、この設定を「No」のままにしてください。 |
Use standard Change Password Page |
MoodleからLDAPパスワードを変更するには、LDAPS接続が必要であることに注意してください (少なくともMS-ADでは間違っていません)。 また、Novell eDirectory以外は、Moodleからパスワードを変更するコードは、ほとんどテストされていません。ですから、他のLDAPサーバでの動作は保証されません。 |
ldap_expiration |
現在のコードでは、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 (識別名 Distinguished Name) のグループです。これは、あなたが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のコードを修正することもできますが、より良いソリューションは、新しい posixGroup の objectClass 属性をあなたの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サーバのユーザの追加の電話番号を持ちます。homePhone、mobile、pager、facsimileTelephoneNumber または他の名称を使用できます。
この設定は任意です。 |
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) がインストールされていない場合、まず次のようにインストールしてください:
- スタート -> コントロールパネル -> プログラムの追加と削除 をクリックする。
- 「'Windowsコンポーネントの追加と削除」をクリックして、インターネット認証サービス を選択する。
- インターネット認証サービス のインストール手順に従う。エンタープライズレベルの選択をお勧めします。
WindowsインストールCDの\Support\toolsディレクトリから suptools.msi をインストールすることで、SSLが有効にされていることを確認してください。サポートツールをインストールした後に:
- スタート -> ファイル名を指定して実行 を選択して、入力フィールドに ldp と入力してください。
- 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等) がセットの中に含まれています。特定の利用に対して、スキーマの様々な属性を削除または追加することができます。
ほとんどの場合、グローバルカタログはリードオンリーです。標準のLDAPポートを通して、問題になっているオブジェクトを保持しているドメインコントローラのクエリーを更新する必要があります (私たちの例では、学生の詳細を更新するには、students.example.orgのドメインコントローラ (dc03) に対するLDAPクエリーが必要です。グローバルカタログのクエリーで更新することはできません)。例外は、これがアクティブディレクトリフォレストのシングルドメインのみにある環境です。この場合、グローバルカタログはドメイン内のそれぞれのオブジェクト属性のフルセットに対する書込み権を保有します。しかし、Moodle認証では、この場合のグローバルカタログを使用する必要はありません。
グローバルカタログを有効にする
グローバルカタログは、Windows 2000およびWindows 2003のアクティブディレクトリサーバで利用することができます。有効にするには「アクティブディレクトリサイトとサービス」のMMC (Microsoft Management Console) スナップインを開いてください。「Sites」を広げて、あなたが使用したいアクティブディレクトリフォレストを含むサイト名を入力してください。あなたがグローバルカタログを有効にしたいサーバをクリックして、右クリックで「NTDS settins」を選択した後、「Properties」タブを選択してください。有効にするには、「Global Catalog」チェックボックスをクリックしてください。Windows2000サーバでは、(再起動を要求されませんが) サーバを再起動する必要があります。Windows2003サーバでは、サーバを再起動する必要はありません。一般的にどちらのケースでも、全体を表示するためにグローバルカタログの複製を待つ必要があります。アクティブディレクトリで行われる変更でも、複製に関わるわずかな遅れが生じます。あなたのADサーバがファイアーウォール内にあり、ポート3268が閉じられている場合、グローバルカタログサーバのために開ける必要があります。あなたの組織がMicrosoft Exchangeを使用している場合、すでに1つ以上のドメインコントローラでグローバルカタログが有効にされていると思われます。Exchange 2000および2003は、情報を解決するためにグローバルカタログを信頼し、ユーザがGAL (Global Adress List) を使用している場合、グローバルカタログにアクセスすることもできます。
ldap auth_user_create() は、Novellのみサポートする
ユーザ認証をLDAPに設定した後で、私は気付きました。メールによるユーザ確認と組み合わせた場合、LDAPはedit (Novell) のみサポートするようです。例えば私の場合 (openladapを使用)、ユーザフォーム入力時に下記のエラーが表示されます:
auth: ldap auth_user_create() does not support selected usertype:"rfc2307" (..yet)
関連情報
- Using Moodle ユーザ認証j フォーラム - 英語
- Using Moodle PHP LDAPモジュールがインストールされていないようです フォーラムディスカッション - 英語
- LDAPユーザ登録