特別なパスワードポリシーは pwdPolicy(5dsoc) エントリに定義します。ポリシーはディレクトリツリーの任意の場所に定義できますが、一般にポリシーで管理するアカウントでレプリケートされるサブツリーに定義します。ポリシーは cn=policy name、subtree の形式の DN を持ちます。
パスワードポリシーを定義したら、目的のユーザーエントリに pwdPolicySubentry(5dsat) 属性を設定して、パスワードポリシーを割り当てます。
ここで説明する内容は次のとおりです。
Directory Server では、複数のパスワードポリシーを設定できます。この節では、デフォルトのパスワードポリシーと特別なパスワードポリシーについて説明します。さらに、この節では、特定のアカウントに複数のパスワードポリシーを適用できる場合に、どのポリシーを強制するかについても説明します。
初めて Directory Server インスタンスを作成すると、そのインスタンスにはデフォルトのパスワードポリシーが適用されます。デフォルトのパスワードポリシーは、設定エントリ cn=PasswordPolicy,cn=config に示されています。デフォルトのパスワードポリシーはディレクトリマネージャーを除くディレクトリのすべてのアカウントに適用されます。
すべての Directory Server パスワードポリシーと同様に、cn=PasswordPolicy,cn=config はオブジェクトクラス pwdPolicy(5dsoc) とオブジェクトクラス sunPwdPolicy(5dsoc) を持ちます。
Directory Server インスタンスを作成すると、パスワードポリシー属性は Directory Server 5 互換モードのままであるため、以前のバージョンからのアップグレードが簡単です。Directory Server 5 互換モードでは、Directory Server はオブジェクトクラス passwordPolicy(5dsoc) を持つパスワードポリシーエントリも処理します。
アップグレードが完了すると、『Sun Java System Directory Server Enterprise Edition 6.3 Migration Guide』で説明するように、新しいパスワードポリシーの機能をすべて使用できます。管理上の移動は、ディレクトリアプリケーションに対して透過的です。
この章では、新しいパスワードポリシー機能を使用したパスワードポリシー設定について説明します。
デフォルトのパスワードポリシーを変更して、デフォルトの設定を上書きできます。dsconf(1M) コマンドを使用して、デフォルトのパスワードポリシーに関連する、サーバーのプロパティーを設定できます。それらのサーバープロパティー名は一般に pwd- プレフィックスから始まります。それらのプロパティーの設定を変更する場合、インスタンスのデフォルトのパスワードポリシーを上書きします。ただし、レプリケーションでは変更がレプリカにコピーされません。デフォルトのパスワードポリシーの変更は、ディレクトリデータではなく、インスタンスの設定に含まれます。
デフォルトのパスワードポリシーを設定するほかに、特別なパスワードポリシーも設定できます。特別なパスワードポリシーは、ディレクトリツリーのエントリによって定義します。特別なパスワードポリシーエントリは、デフォルトのパスワードポリシーと同じオブジェクトクラス pwdPolicy(5dsoc) を持つため、同じポリシー属性を持ちます。特別なパスワードポリシーは、正規のディレクトリエントリであるため、通常のディレクトリエントリと同じ方法でポリシーエントリがレプリケートされます。
ユーザーエントリは、オペレーショナル属性 pwdPolicySubentry(5dsat) の値によって特別なパスワードポリシーを参照します。ユーザーエントリによって参照した場合、特別なパスワードポリシーはインスタンスのデフォルトのパスワードポリシーを上書きします。多くの配備で、ユーザーロールを割り当てます。pwdPolicySubentry 値を設定して、サービスクラス (CoS) と連携して、ユーザーアカウントに適用するパスワードポリシーを決定するようにロールを設定できます。ロールによってパスワードポリシーセットを上書きするには、そのユーザーのエン トリディレクトリの pwdPolicySubentry 値を変更します。
この節を要約すると、最初にデフォルトのパスワードポリシーが適用されます。デフォルトのパスワードポリシーを変更して、デフォルトを上書きできます。次に、特別なパスワードポリシーエントリを作成して、デフォルトのパスワードポリシーを上書きできます。ロールと CoS によってパスワードポリシーを割り当てる場合に、各エントリにパスワードポリシーを指定して、CoS によって割り当てられたポリシーを上書きできます。
他のディレクトリエントリの作成や変更と同じ方法で、特別なパスワードポリシーを作成、変更できます。次の手順では、テキストエディタを使用して、LDIF にパスワードポリシーエントリを書き込む方法を示します。次に-a オプションを使用して、ldapmodify コマンドを実行し、ディレクトリにパスワードポリシーエントリを追加します。
このタスクは DSCC を使用して実行することができます。詳細については、「Directory Service Control Center のインタフェース」および DSCC オンラインヘルプを参照してください。
ほかに指示がない限り、ここに示すデータの例は Example.ldif から抜粋したものです。
作成するポリシーについて、パスワードポリシーワークシートを完成させます。
サンプルについては、「パスワードポリシーを定義するためのワークシート」を参照してください。
ワークシートに基づいて、パスワードポリシーエントリを LDIF に書き込みます。
たとえば、次のポリシーエントリは、Example.com の臨時従業員のパスワードポリシーを指定します。この従業員のサブツリーのルートは dc=example,dc=com です。
dn: cn=TempPolicy,dc=example,dc=com objectClass: top objectClass: pwdPolicy objectClass: sunPwdPolicy objectClass: LDAPsubentry cn: TempPolicy pwdAttribute: userPassword pwdCheckQuality: 2 pwdLockout: TRUE pwdLockoutDuration: 300 pwdMaxFailure: 3 pwdMustChange: TRUE
デフォルトのパスワードポリシー設定に加えて、ここに示すポリシーは追加の動作を指定します。パスワード品質チェックを実行します。3 回連続してバインドが失敗すると、アカウントは 5 分間 (300 秒) ロックされます。パスワードのリセット後に、パスワードを変更する必要があります。ポリシーをユーザーアカウントに割り当てると、ここに明示的に指定した設定で、デフォルトのパスワードポリシーが上書きされます。
ディレクトリにパスワードポリシーエントリを追加します。
たとえば、次のコマンドは Example.com の臨時従業員のパスワードポリシーを dc=example,dc=com の下に追加します。パスワードポリシーは pwp.ldif というファイルに保存されています。
$ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f pwp.ldif Enter bind password: adding new entry cn=TempPolicy,dc=example,dc=com $ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w --b dc=example,dc=com \ "(&(objectclass=ldapsubentry)(cn=temppolicy))" Enter bind password: version: 1 dn: cn=TempPolicy,dc=example,dc=com objectClass: top objectClass: pwdPolicy objectClass: LDAPsubentry cn: TempPolicy pwdCheckQuality: 2 pwdLockout: TRUE pwdLockoutDuration: 300 pwdMaxFailure: 3 pwdMustChange: TRUE $ |
Example.ldif に示すように、kvaughan は dc=example,dc=com エントリを変更するアクセス権を持つ人事マネージャーです。Example.ldif に示すように、Vaughan のバインドパスワードは bribery です。
定義したポリシーによって管理されるユーザーアカウントを定義するには、「各アカウントにパスワードポリシーを割り当てる」または 「ロールと CoS を使用してパスワードポリシーを割り当てる」を参照してください。
次の手順で、既存のパスワードポリシーを 1 つのユーザーアカウントに割り当てます。
この手順を実行するには、特別なパスワードポリシーを作成している必要があります。「パスワードポリシーを作成する」を参照してください。
このタスクは DSCC を使用して実行することができます。詳細については、「Directory Service Control Center のインタフェース」および DSCC オンラインヘルプを参照してください。
ここに示す例は、ほかに指示がない限り、Example.ldif から抜粋したものです。
ユーザーエントリの pwdPolicySubentry 属性の値にパスワードポリシー DN を追加します。
たとえば、次のコマンドは、「パスワードポリシーを作成する」で定義しているパスワードポリシーを David Miller のエントリに割り当てます。David Miller の DN は uid=dmiller,ou=people,dc=example,dc=com です。
$ cat pwp.ldif dn: uid=dmiller,ou=people,dc=example,dc=com changetype: modify add: pwdPolicySubentry pwdPolicySubentry: cn=TempPolicy,dc=example,dc=com $ ldapmodify -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f pwp.ldif Enter bind password: modifying entry uid=dmiller,ou=people,dc=example,dc=com $ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w - -b dc=example,dc=com \ "(uid=dmiller)" pwdPolicySubentry Enter bind password: version: 1 dn: uid=dmiller, ou=People, dc=example,dc=com pwdPolicySubentry: cn=TempPolicy,dc=example,dc=com $ |
Example.ldif に示すように、kvaughan は人事マネージャーで、dc=example,dc=com エントリを変更するアクセス権を持ちます。Example.ldif に示すように、Vaughan のバインドパスワードは bribery です。
次の手順では、ロールとサービスクラス (CoS) を適用して、既存の特別なパスワードポリシーをユーザーのセットに割り当てます。ロールと CoS の詳細については、第 10 章「Directory Server のグループ、ロール、および CoS」を参照してください。
この手順を実行するには、特別なパスワードポリシーを作成している必要があります。「パスワードポリシーを作成する」を参照してください。
このタスクは DSCC を使用して実行することができます。詳細については、「Directory Service Control Center のインタフェース」および DSCC オンラインヘルプを参照してください。
ここに示す例は、ほかに指示がない限り、Example.ldif から抜粋したものです。
パスワードポリシーによって管理されるエントリのロールを作成します。
たとえば、次のコマンドは Example.com の臨時従業員のフィルタを適用されたロールを作成します。
$ cat tmp.ldif 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 $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f tmp.ldif Enter bind password: modifying entry cn=TempFilter,ou=people,dc=example,dc=com $ |
Example.ldif に示すように、kvaughan は人事マネージャーで、dc=example,dc=com エントリを変更するアクセス権を持ちます。Example.ldif に示すように、Vaughan のバインドパスワードは bribery です。
パスワードポリシーエントリの DN を生成するサービスクラスを作成します。
この DN は、作成したロールを持つユーザーの pwdPolicySubentry 属性の値となります。
たとえば、次のコマンドは、Example.com の臨時従業員のフィルタを適用したロールを作成します。コマンドはロールを持つユーザーに cn=TempPolicy,dc=example,dc=com を割り当てます。
$ cat cos.ldif 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 pwdPolicySubentry: 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: pwdPolicySubentry operational $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f cos.ldif Enter bind password: modifying entry cn=TempFilter,ou=people,dc=example,dc=com $ |
これにより、ステータスが contractor であるユーザーは、cn=TempPolicy,dc=example,dc=com パスワードポリシーの対象となります。
多くの配備で、新しいアカウントに適用するパスワードポリシーは、既存のアカウントに適用するパスワードポリシーと異なります。この節では、初回ログインパスワードポリシーについて説明します。このポリシーでは、ユーザーが新しく作成されたアカウントを 3 日間使用でき、アカウントがロックされる前に、自身の新しいパスワードを設定するようにします。このポリシーは、パスワードがリセットされたユーザーについても同様に機能するように設計されています。
DSCC を使用してこのタスクを実行することはできません。次の手順に示すように、コマンド行を使用します。
新しく作成されたアカウント用に特別なパスワードポリシーを作成します。
たとえば、有効期限を 3 日間、つまり 259,200 秒に設定するパスワードポリシーエントリを追加します。さらに、このパスワードポリシーでは、pwdMustChange(5dsat) に TRUE を設定し、ユーザーが初めてバインドしたときに、自身のパスワードを変更する必要があることを示します。
$ cat firstLogin.ldif dn: cn=First Login,dc=example,dc=com objectClass: top objectClass: LDAPsubentry objectClass: pwdPolicy objectClass: sunPwdPolicy cn: First Login passwordStorageScheme: SSHA pwdAttribute: userPassword pwdInHistory: 0 pwdExpireWarning: 86400 pwdLockout: TRUE pwdMinLength: 6 pwdMaxFailure: 3 pwdMaxAge: 259200 pwdFailureCountInterval: 600 pwdAllowUserChange: TRUE pwdLockoutDuration: 3600 pwdMinAge: 0 pwdCheckQuality: 2 pwdMustChange: TRUE $ ldapmodify -a -D cn=admin,cn=Administrators,cn=config -w - -f firstLogin.ldif Enter bind password: adding new entry cn=First Login,dc=example,dc=com $ |
新しく作成されたすべてのアカウントを含むロールを作成します。
このロールの作成では、新しく作成したアカウントを既存のアカウントと区別するいくつかの方法を設定します。
pwdReset(5dsat) 属性が TRUE に設定されているアカウントが新しいアカウントであると定義します。
ユーザーのパスワードがパスワード管理者などの別のユーザーによって変更された場合、 pwdReset が TRUE に設定されます。
新しいアカウントを識別するロールを作成します。
たとえば、次のコマンドは、パスワードがリセットされたアカウントのロールを作成します。
$ cat newRole.ldif dn: cn=First Login Role,ou=people,dc=example,dc=com objectclass: top objectclass: LDAPsubentry objectclass: nsRoleDefinition objectclass: nsComplexRoleDefinition objectclass: nsFilteredRoleDefinition cn: First Login Role nsRoleFilter: (pwdReset=TRUE) description: Role to assign password policy for new and reset accounts $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f newRole.ldif Enter bind password: adding new entry cn=First Login Role,ou=people,dc=example,dc=com $ |
サービスクラスによって、新しく作成したアカウントのパスワードポリシーを割り当てます。
$ cat newCoS.ldif dn: cn=First Login Template,dc=example,dc=com objectClass: top objectClass: nsContainer dn: cn="cn=First Login Role,ou=people,dc=example,dc=com", cn=First Login Template,dc=example,dc=com objectClass: top objectClass: extensibleObject objectClass: LDAPSubEntry objectClass: CoSTemplate cosPriority: 1 pwdPolicySubentry: cn=First Login,dc=example,dc=com dn: cn=First Login CoS,dc=example,dc=com objectClass: top objectClass: LDAPSubEntry objectClass: CoSSuperDefinition objectClass: CoSClassicDefinition cosTemplateDN: cn=First Login Template,dc=example,dc=com cosSpecifier: nsRole cosAttribute: pwdPolicySubentry operational $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -f newCoS.ldif Enter bind password: adding new entry cn=First Login Template,dc=example,dc=com adding new entry cn="cn=First Login Role,ou=people,dc=example,dc=com", cn=First Login Template,dc=example,dc=com adding new entry cn=First Login CoS,dc=example,dc=com $ |
追加したロールに適合する新しいユーザーを追加します。ユーザーを追加してみて、新しいユーザーが新しいパスワードポリシーの対象となり、既存のユーザーが対象とならないことを確認します。
$ cat quentin.ldif dn: uid=qcubbins,ou=People,dc=example,dc=com objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson uid: qcubbins givenName: Quentin sn: Cubbins cn: Quentin Cubbins mail: quentin.cubbins@example.com userPassword: ch4ngeM3! description: New account $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f quentin.ldif Enter bind password: adding new entry uid=qcubbins,ou=People,dc=example,dc=com $ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w - \ -b dc=example,dc=com uid=qcubbins nsrole pwdPolicySubentry Enter bind password: version: 1 dn: uid=qcubbins,ou=People,dc=example,dc=com nsrole: cn=first login role,ou=people,dc=example,dc=com pwdPolicySubentry: cn=First Login,dc=example,dc=com $ ldapsearch -b dc=example,dc=com uid=bjensen nsrole pwdPolicySubentry version: 1 dn: uid=bjensen, ou=People, dc=example,dc=com $ |
Barbara Jensen の既存のアカウントにはデフォルトのパスワードポリシーが適用されます。しかし、Quentin Cubbins の新しいアカウントには、定義したパスワードポリシーが適用されます。