![]() | |
Sun Java™ System Directory Server 5.2 2005Q1 管理ガイド |
第 7 章
ユーザーアカウントとパスワードの管理ユーザーが Directory Server に接続すると、ユーザー認証が行われ、ディレクトリは認証中に確立された識別情報に基づいて、アクセス権限とリソース制限をユーザーに設定します。この章では、ユーザーアカウントを管理するための作業について説明します。
これらのタスクは、ディレクトリのパスワードおよびアカウントのロックアウトポリシーの設定、ディレクトリに対するアクセスを防止するためのアカウントまたはグループの無効化、およびバインド DN に応じたユーザーのシステムリソースの使用制限などを行います。
Directory Server は個別パスワードポリシーをサポートしています。異なるパスワードポリシーをいくつでも定義し、特定のユーザーやユーザーグループに個別に適用できます。これにより、異なるタイプのユーザーによるディレクトリへのアクセスを簡単に制御できます。
この章は、次の節で構成されています。
パスワードポリシーの概要安全なパスワードポリシーを使用して、次の項目を義務付けることによって、簡単に推測されそうなパスワードに関するリスクを最小限に抑えることができます。
Directory Server は、個別パスワードポリシーとグローバルパスワードポリシーの両方をサポートしています。個別パスワードポリシーはディレクトリツリーのサブエントリによって定義され、そのポリシーが設定されたユーザーエントリによって参照されます。ユーザーエントリが個別ポリシーを参照しない場合、cn=PasswordPolicy,cn=config のグローバルパスワードポリシーが適用されます。
パスワードポリシーは、ユーザーエントリに存在している場合に userPassword 属性だけに適用され、認証時にこの属性に基づいて適用されます。SASL GSSAPI や SSL ベースの認証など、その他の認証スキーマには適用されません。
次の節では、パスワードポリシーの実装方法と、ユーザーおよびグループへの割り当て方法について説明します。詳細については、『Directory Server 配備計画ガイド』を参照してください。
グローバルパスワードポリシーの設定グローバルパスワードポリシーは、個別ポリシーが定義されていない、ディレクトリのすべてのユーザーに適用されます。ただし、グローバルパスワードポリシーは Directory Manager には適用されません。
コンソールを使用したパスワードポリシーの設定
Directory Server のグローバルパスワードポリシーを設定または変更するには、次の手順を実行します。
- Directory Server コンソールの最上位の「設定」タブで「データ」ノードを選び、右側のパネルで「パスワード」タブを選びます。
- 「パスワード」タブで、ポリシーに関する次の項目を設定します。
- 「リセット後、ユーザーにパスワード変更を要求」チェックボックスを選択して、初回ログオン時に、ユーザーがパスワードを変更しなければならないように指定します。
このチェックボックスを選択した場合、ユーザーのパスワードのリセットは Directory Manager だけができます。一般の管理者は、パスワードの更新をユーザーに義務付けることはできません。
- 各ユーザーが、自分のパスワードを変更できるようにするには、「ユーザーによるパスワードの変更可」チェックボックスを選択します。
- ユーザーが本人のパスワードを変更できる頻度を制限するには、「再変更を許可」テキストボックスに日数を指定します。制限を設けずにユーザーが自由に本人のパスワードを変更できるようにするには、「制限なし」チェックボックスを選択します。
- ユーザーが同じパスワードを何度も繰り返して利用することを禁じるには、「パスワードの履歴を保持」チェックボックスを選択し、「保存数 X パスワード」テキスト ボックスで、ユーザーごとにサーバーが保持するパスワード数を指定します。ユーザーは、リストに残されているパスワードを設定することができません。効率的に機能させるには、ユーザーがパスワードを変更する頻度を制限する必要があります。
- ユーザーのパスワードを無期限にする場合は、「パスワードは永久に失効しない」ラジオボタンを選択します。
- ユーザーにパスワードを定期的に変更させる場合は、「パスワードの失効まで」ラジオボタンを選択し、パスワードの有効日数を入力します。
- 有効期限が近づいたパスワードを選択した場合に、期限が切れる何日前に警告をユーザーに送信するかを指定するには、「警告を送信」フィールドに日数を指定します。
- ユーザーが警告を受信すると、パスワードは当初の期日に失効します。警告の送信後に完全な警告期間を設けて有効期限を延長するには、「失効の警告を行わない」チェックボックスの選択を解除します。警告と延長は、それぞれ 1 回ずつ行われます。パスワードが失効した後にユーザーがバインドしたときは、猶予ログインは認められなくなります。
- ユーザーパスワードの構文を検査して、パスワードポリシーで設定した要件を満たしていることをサーバー側で確認する場合は、「パスワード構文を検査」チェックボックスを選択します。次に、「パスワードの最低長」テキストボックスに、最小限必要なパスワードの文字数を指定します。
- デフォルトでは、Directory Manager はパスワードポリシーに違反するパスワード (履歴に残されているパスワードの再使用など) をリセットできません。これを許可するには、「Directory Manager がパスワードポリシーをバイパスする」チェックボックスを選択します。
- 「パスワードの暗号化」プルダウンメニューで、パスワードの格納時にサーバーで使用する暗号化方式を指定します。
- アカウントのロックアウトポリシーを定義するときは、「アカウントのロックアウト」タブをクリックし、「アカウントのロックアウト機能を利用」チェックボックスを選択します。
- パスワードポリシーの変更が完了したら、「保存」をクリックします。新しいグローバルパスワードポリシーは、直ちに適用されます。
コマンド行からのパスワードポリシーの設定
グローバルパスワードポリシーは、cn=Password Policy,cn=config エントリの属性によって定義されます。このエントリ内のグローバルポリシーを変更するには、ldapmodify ユーティリティを使います。
パスワードポリシーに関連するすべての属性の説明については、『Directory Server Administration Reference』を参照してください。
たとえば、デフォルトではパスワードの構文の長さの検査は行われず、アカウントロックアウトも無効になっています。構文検査を有効にして最小文字数を 8 に設定し、5 回のパスワード入力に失敗した場合に 5 分間の一時的なロックアウトを設定するには、次のコマンドを実行します。
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn: cn=Password Policy,cn=config
changetype: modify
replace: passwordCheckSyntax
passwordCheckSyntax: on
-
replace: passwordMinLength
passwordMinLength: 8
-
replace: passwordLockout
passwordLockout: on
-
replace: passwordMaxFailure
passwordMaxFailure: 5
-
replace: passwordLockoutDuration
passwordLockoutDuration: 300
-
replace: passwordUnlock
passwordUnlock: on
個別パスワードポリシーの管理個別パスワードポリシーは、passwordPolicy オブジェクトクラスを使用してサブエントリに定義されます。ポリシーは、cn=policy name,subtree という形式の DN でディレクトリツリー内の任意の場所に定義できます。Directory Server コンソールまたはコマンド行ユーティリティを使用してパスワードポリシーを定義したら、該当するユーザーエントリの passwordPolicySubentry 属性を設定してパスワードポリシーを割り当てます。
ここでは、サブツリールートが dc=example,dc=com の Example.com の一時従業員にパスワードポリシーを実装する例を使います。
コンソールからのポリシーの定義
- Directory Server コンソールの最上位にある「ディレクトリ」タブで、個別パスワードポリシーのサブエントリを定義するエントリを表示します。
- エントリをマウスの右ボタンでクリックし、「新規」、「パスワードポリシー」を順に選択します。あるいは、エントリをクリックして選択し、「オブジェクト」メニューから「新規」、「パスワードポリシー」を順に選択します。
パスワードポリシーエントリのカスタムエディタが表示されます。
- このポリシーの名前と、オプションとしてポリシーの説明を「一般」の「ポリシー名」と「説明」フィールドに入力します。この名前は、ポリシーを定義するサブエントリの cn ネーミング属性の値となります。
- 「パスワード」タブをクリックし、ポリシーに関する次の項目を設定します。
- 「リセット後、ユーザーにパスワード変更を要求」チェックボックスを選択して、初回ログオン時に、ユーザーがパスワードを変更しなければならないように指定します。このチェックボックスを選択した場合、ユーザーのパスワードのリセットは Directory Manager だけができます。一般の管理者は、パスワードの更新をユーザーに義務付けることはできません。
- 各ユーザーが、自分のパスワードを変更できるようにするには、「ユーザーによるパスワードの変更可」チェックボックスを選択します。
- ユーザーが本人のパスワードを変更できる頻度を制限するには、「再変更を許可」テキストボックスに日数を指定します。制限を設けずにユーザーが自由に本人のパスワードを変更できるようにするには、「制限なし」チェックボックスを選択します。
- ユーザーが同じパスワードを何度も繰り返して利用することを禁じるには、「パスワードの履歴を保持」チェックボックスを選択し、ユーザーごとに保存されるパスワード数を指定します。ユーザーは、このリストに残されているパスワードを設定することができません。効率的に機能させるには、ユーザーがパスワードを変更する頻度を制限する必要があります。
- ユーザーのパスワードを無期限にする場合は、「パスワードは永久に失効しない」ラジオボタンを選択します。
- ユーザーにパスワードを定期的に変更させる場合は、「パスワードの失効まで」ラジオボタンを選択し、パスワードの有効日数を入力します。
- 有効期限が近づいたパスワードを選択した場合に、期限が切れる何日前に警告をユーザーに送信するかを指定します。パスワードの有効期限の何日前に警告を送信するかを「警告を送信」テキストボックスに入力します。
ユーザーが警告を受信すると、パスワードは当初の期日に失効します。警告の送信後に完全な警告期間を設けて有効期限を延長するには、「失効の警告を行わない」チェックボックスの選択を解除します。警告と延長は、それぞれ 1 回ずつ行われます。パスワードが失効した後にユーザーがバインドしたときは、猶予ログインは認められなくなります。
- ユーザーパスワードの構文を検査して、パスワードポリシーで設定した要件を満たしていることをサーバー側で確認する場合は、「パスワード構文を検査」チェックボックスを選択します。次に、「パスワードの最低長」テキストボックスに、最小限必要なパスワードの文字数を指定します。
- デフォルトでは、Directory Manager はパスワードポリシーに違反するパスワード (履歴に残されているパスワードの再使用など) をリセットできません。これを許可するには、「Directory Manager がパスワードポリシーをバイパスする」チェックボックスを選択します。
- 「パスワードの暗号化」プルダウンメニューで、パスワードの格納時にサーバーで使用する暗号化方式を指定します。
- アカウントのロックアウトポリシーを定義するときは、「ロックアウト」タブをクリックし、「アカウントのロックアウト機能を利用」チェックボックスを選択します。
- カスタムエディタの「了解」をクリックして、ポリシーを保存し、サブエントリを作成します。
コマンド行からのポリシーの定義
このパスワードポリシーでは、一時従業員のパスワードの有効期限を 100 日 (8,640,000 秒) とします。また、パスワードの有効期限が切れる 3 日 (259,200 秒) 前から、バインド時にユーザーへ有効期限切れの警告を開始します。構文検査を有効にして、パスワードセキュリティのための最小限必要な文字数の検査を行います。ロックアウトによって、辞書攻撃を使用してパスワードを解読しようとする侵入者を阻止します。その他のポリシー項目については、デフォルト値を適用します。
dc=example,dc=com の下に次のサブエントリを追加して、example.com のサブツリーにこのパスワードポリシーを定義します。
ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=TempPolicy,dc=example,dc=com
objectClass: top
objectClass: passwordPolicy
objectClass: LDAPsubentry
cn: TempPolicy
passwordStorageScheme: SSHA
passwordChange: on
passwordMustChange: on
passwordCheckSyntax: on
passwordExp: on
passwordMinLength: 6
passwordMaxAge: 8640000
passwordMinAge: 0
passwordWarning: 259200
passwordInHistory: 6
passwordLockout: on
passwordMaxFailure: 3
passwordUnlock: on
passwordLockoutDuration: 3600
passwordResetFailureCount: 600パスワードポリシーに関連するすべての属性の説明については、『Directory Server Administration Reference』を参照してください。
注
以前のバージョンの Directory Server とは異なり、オペレーショナル属性 passwordExpirationTime は単一値の属性です。コマンド行からユーザエントリを追加する場合、この属性の値は指定しないでください。操作が拒否されてしまいます。以前のバージョンの Directory Server で作成されたエントリでも、この属性に複数の値が存在すれば拒否されます。
パスワードポリシーの割り当て
個別パスワードポリシーの割り当ては、適切なポリシーサブエントリを指定することによって行います。passwordPolicySubentry の値として単一エントリにポリシーを追加するか、CoS とロールを使用してポリシーを管理します。また、アクセス制御を設定して、ユーザーが自分に設定されているパスワードポリシーを変更することを禁止する必要があります。
コンソールから
Directory Server コンソールには、ユーザーまたはグループに割り当てられているパスワードポリシーを管理するためのインタフェースが用意されています。
- Directory Server コンソールの最上位にある「ディレクトリ」タブで、個別パスワードポリシーを割り当てるか、変更するユーザーまたはグループのエントリを表示します。
- このエントリをマウスの右ボタンでクリックし、ポップアップメニューから「パスワードポリシーを設定」を選択します。あるいは、エントリをクリックして選択し、「オブジェクト」メニューから「パスワードポリシーを設定」を順に選択します。
- 「パスワードポリシー」ダイアログが表示され、このエントリに適用されているパスワードポリシーを示します。
- ポリシーの変更が完了したら、「パスワードポリシー」ダイアログの「了解」ボタンをクリックします。新しいポリシーは直ちに適用されます。
コマンド行から
ユーザーまたはグループのエントリにパスワードポリシーを割り当てるには、パスワードポリシーの DN を passwordPolicySubentry 属性の値として追加します。たとえば、次のコマンドは cn=TempPolicy,dc=example,dc=com を Barbara Jensen に割り当てます。
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: passwordPolicySubentry
passwordPolicySubentry: cn=TempPolicy,dc=example,dc=comロールと CoS の使い方
ロールを使用してユーザーをグループ化するときには、CoS を使用して適切なポリシーサブエントリに指定できます。ロールと CoS の使用方法については、第 5 章「ID とロールの管理」を参照してください。
たとえば次のコマンドは、Example.com の一時従業員のフィルタリングされたロールを作成し、このロールを持つ従業員に cn=TempPolicy,dc=example,dc=com を割り当てます。
ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=TempFilter,ou=people,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsFilteredRoleDefinition
cn: TempFilter
nsRoleFilter: (&(objectclass=person)(status=contractor))
description: filtered role for temporary employees
dn: cn=PolTempl,dc=example,dc=com
objectclass: top
objectclass: nsContainer
dn: cn="cn=TempFilter,ou=people,dc=example,dc=com",
cn=PolTempl,dc=example,dc=com
objectclass: top
objectclass: extensibleObject
objectclass: LDAPsubentry
objectclass: costemplate
cosPriority: 1
passwordPolicySubentry: cn=TempPolicy,dc=example,dc=com
dn: cn=PolCoS,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosClassicDefinition
cosTemplateDN: cn=PolTempl,dc=example,dc=com
cosSpecifier: nsRole
cosAttribute: passwordPolicySubentry operationalこれにより、契約社員ステータスを持つユーザーは、cn=TempPolicy,dc=example,dc=com パスワードポリシーの対象となります。
個別パスワードポリシーの保護
ユーザーが自分に割り当てられるパスワードポリシーを変更できないようにするには、ルートエントリに次のような ACI を追加する必要があります。
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn: dc=example,dc=com
changetype: modify
add: aci
aci: (targetattr != "passwordPolicySubentry")(version 3.0; acl
"Allow self modification except for passwordPolicySubentry";
allow (write) (userdn ="ldap:///self");)
ユーザーパスワードのリセットディレクトリは、ユーザーエントリの userPassword 属性にパスワード値を格納しています。サーバーのアクセス制御設定によっては、指定したパスワードポリシーに基づいて、ldapmodify などの標準ツールを使用して、userPassword 値を設定することもできます。
永久的なアカウントロックアウトが発生した場合 (ユーザーのオペレーショナル属性 accountUnlockTime が 0 で、パスワードポリシーの passwordUnlock が off の場合) は、Directory Manager としてパスワードをリセットして、ユーザーアカウントのロックを解除できます。たとえば、Example.com のディレクトリユーザーである Barbara Jensen がパスワードを思い出せないために、永続的なロックアウトが適用されたと仮定します。
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: ChAnGeMeパスワードポリシーで passwordMustChange が有効の場合、このユーザーは次回のバインド後にパスワードを変更する必要があります。このユーザーのパスワードが ChAnGeMe に変更されたことを、できるだけ安全な方法でこのユーザーに知らせる必要があります。
ユーザーとロールの無効化と有効化1 つのユーザーアカウントまたはアカウントのセットを、一時的に無効にすることができます。アカウントが無効になると、ユーザーはディレクトリにバインドできません。そのため、このユーザーの認証操作は失敗します。
ここで説明する手順は、ユーザーとロールの両方の無効化に利用できます。ただし、ロールを無効化すると、ロールのメンバーは無効になりますが、ロールのエントリ自体は無効になりません。ロールの概要、およびロールとアクセス制御が相互に及ぼす影響については、第 5 章「ID とロールの管理」を参照してください。
コンソールからのユーザーとロールの有効化設定
- Directory Server コンソールの最上位レベルにある「ディレクトリ」タブでディレクトリツリーを表示し、有効化または無効化するユーザーまたはロールのエントリを探します。
- このエントリをダブルクリックしてカスタムエディタを表示し、左側の列の「アカウント」タブをクリックします。
右側のパネルには、このエントリの有効化状態が表示されます。
- ボタンをクリックして、このエントリに対応するユーザーまたはロールを無効化または有効化します。ユーザーまたはロールのアイコンに表示される赤いボックスとバーは、そのエントリが無効化されることを示しています。
- 「了解」をクリックしてダイアログボックスを閉じ、このエントリの新しい有効化状態を保存します。
有効、無効を簡単に設定するには、エントリを選択して「オブジェクト」メニューから「無効」または「有効」を選びます。
「表示」メニューから「表示」をクリックし、「アクティブでない状態」を選択すると、任意のディレクトリオブジェクトの有効化状態を確認できます。無効化されているエントリのすべてのアイコンには、赤いバーが表示されます。ユーザーエントリの有効化状態は、そのエントリが直接無効化されたか、ロールメンバーシップとして無効化されたかに関係なく、正しく表示されます。
コマンド行からのユーザーとロールの有効化設定
ユーザーアカウントまたはロールのメンバーを無効にするには、directoryserver account-inactivate コマンドを使用します。ユーザーまたはロールを有効化、または再有効化するには、directoryserver account-activate コマンドを使用します。
次のコマンドは、これらのコマンドを使用して Barbara Jensen のユーザーアカウントを無効化および再有効化する方法を示しています。
/usr/sbin/directoryserver account-inactivate -h host -p port -D "cn=Directory¥
Manager" -w password -I "uid=bjensen,ou=People,dc=example,dc=com"/usr/sbin/directoryserver account-activate -h host -p port -D "cn=Directory¥
Manager" -w password -I "uid=bjensen,ou=People,dc=example,dc=com"どちらのコマンドでも、-I オプションは、有効化状態を設定するユーザーまたはロールの DN を指定します。
コマンドの詳細については、『Directory Server Man Page Reference』を参照してください。
個別のリソース制限の設定ディレクトリにバインドするクライアントアプリケーションでは、特別なオペレーショナル属性値を使用して、検索操作に関するサーバーの制限を制御できます。検索操作に関しては、次の制限を設定できます。
特定のユーザーに対して設定したリソース制限は、グローバルサーバー設定で設定したデフォルトのリソース制限より優先されます。個別リソース制限を格納する属性がユーザー自身によって変更されないように、ユーザーエントリを含むサフィックスに次の ACI を追加する必要があります。
(targetattr != "nsroledn || aci || nsLookThroughLimit || nsSizeLimit || nsTimeLimit || nsIdleTimeout || passwordPolicySubentry || passwordExpirationTime || passwordExpWarned || passwordRetryCount || retryCountResetTime || accountUnlockTime || passwordHistory || passwordAllowChangeTime")(version 3.0; acl "Allow self entry modification except for nsroledn, aci, resource limit attributes, passwordPolicySubentry and password policy state attributes"; allow (write)userdn ="ldap:///self";)
コンソールを使用したリソース制限の設定
コマンド行からのリソース制限の設定
ldapmodify コマンドを使用して次の属性をユーザーエントリに設定することで、ユーザーによるリソース使用を制限できます。
たとえば、次のように ldapmodify を実行することによって、エントリのサイズの制限を設定できます。
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: nsSizeLimit
nsSizeLimit: 500この ldapmodify 文は、Barbara Jensen のエントリに nsSizeLimit 属性を追加し、検索結果のサイズの制限を 500 エントリに設定します。