20.10. 時間ベースのアカウントロックアウトポリシーの設定
認証に失敗した場合にアカウントをロックする以外にも、アカウントの非アクティブ化やアカウントのエイジに基づいてアカウントロックアウトポリシーを定義する方法があります。アカウントポリシープラグインは、相対 時間設定を使用してアカウントをロックする必要があるかどうかを判断します。
注記
サービスのロールまたはクラスは、絶対 アカウント時間に基づいてアカウントを非アクティブにするのに使用できます。たとえば、特定の日付の前に作成されたすべてのアカウントで CoS を作成できます。
アカウントポリシープラグインには、3 つの設定エントリーが必要です。
- プラグイン自体の設定エントリー。これにより、そのサーバーに設定されたすべてのアカウントポリシーに使用されるグローバル値が設定されます。
- アカウントポリシー設定エントリー。このエントリーはユーザーディレクトリー内にあり、基本的にはユーザーアカウントエントリーに参照および適用されるテンプレートとなります。
- アカウントポリシーエントリーを適用するエントリー。ユーザーアカウントは、直接アカウントポリシーを参照したり、CoS またはロールを使用してアカウントポリシーを自動的にユーザーアカウントのセットに適用することができます。注記アカウントポリシーは、
acctPolicySubentry
属性を介して適用されます。この属性はユーザーアカウントに直接追加できますが、この属性は単値になります。つまり、そのアカウントにはアカウントポリシーを 1 つだけ適用できます。これはほとんどの場合で問題ありません。しかし、現実的には、2 つのアカウントポリシーを作成することができます。1 つはアカウントの非アクティブ化のため、もう 1 つは年齢に基づくアカウントの失効のためです。CoS を使用してアカウントポリシーを適用すると、複数のアカウントポリシーをアカウントに使用できます。
20.10.1. アカウントポリシープラグインの構文
Account Policy プラグイン自体には 2 つの設定属性のみがあります。
- nsslapd-pluginEnabled: プラグインが有効かどうかを設定します。この属性はデフォルトで off です。
- nsslapd-pluginarg0: プラグイン設定ディレクトリーの DN を参照します。設定エントリーは、通常プラグイン自体の子エントリーです (例: cn=config,cn=Account Policy Plugin,cn=plugins,cn=config)。
そのため、アカウントポリシーは 2 つの部分で定義されます。
- nsslapd-pluginarg0 属性で特定されたプラグイン設定エントリー。これにより、アカウントポリシー設定エントリーの特定やユーザーアカウントエントリーの管理に使用するプラグインのグローバル設定が設定されます。これらの設定はサーバー全体に適用されます。設定エントリー属性は、『Red Hat Directory Server 設定、コマンド、およびファイルリファレンス』 の 『アカウントポリシープラグインの属性』 セクションで説明されています。
- アカウントポリシーの設定エントリー。これは、アカウントポリシーに特定の値を設定するテンプレートエントリーとよく似ています。ユーザーアカウントは、直接または CoS エントリーを介して、このアカウントポリシーエントリーを参照します。アカウントポリシーとユーザーエントリーの属性については、以下の表で説明されています。
表20.2 アカウントポリシーエントリーおよびユーザーエントリーの属性 属性 定義 設定またはユーザーエントリー accountpolicy (オブジェクトクラス) アカウントの無効化または期限切れポリシーのテンプレートエントリーを定義します。 設定 accountInactivityLimit (属性) アカウントの最終ログイン時刻から、非アクティブ時にアカウントがロックされるまでの時間を秒単位で設定します。 設定 acctPolicySubentry (属性) アカウントのポリシー (具体的には、アカウントロックアウトポリシー) に属するエントリーを指定します。この属性の値は、エントリーに適用されるアカウントポリシーの DN を参照します。 ユーザー createTimestamp (操作属性) エントリーが最初に作成された日時が含まれます。 ユーザー lastLoginTime (操作属性) 指定のアカウントがディレクトリーに対して認証された最終時刻のタイムスタンプが含まれます。 ユーザー 詳細は、『Red Hat Directory Server 設定、コマンド、およびファイルリファレンス』 の属性の説明を参照してください。
20.10.2. アカウントアクティビティーとアカウントの有効期限
Account Policy
プラグインを使用すると、以下を設定できます。
- アカウントの有効期限: アカウントの作成後に一定時間無効になります。
- アカウントの非アクティブ化: 最後にログインに成功してから一定時間が経過すると、アカウントが無効になります。これにより、未使用のアカウントを自動的に無効にできます。
無効にされたアカウントはログインできなくなります。
Account Policy
プラグインを設定するには、以下を実行します。
- アカウントポリシープラグインを有効にします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy enable
- プラグイン設定エントリーを設定します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy set --config-entry="cn=config,cn=Account Policy Plugin,cn=plugins,cn=config"
- プラグイン設定エントリーを作成します。
- アカウントポリシーで CoS またはロールを使用するには、
alwaysRecordLogin
の値をyes
に設定します。これは、acctPolicySubentry
属性がない場合でも、すべてのエントリーにログイン時間が記録されることを意味します。 - アカウントポリシー評価に使用するプライマリー属性を
stateAttrName
の値として設定します。アカウントの停止状態の場合は、lastLoginTime
属性を使用します。単純なアカウントの有効期限の場合は、createTimestamp
属性を使用します。 altStateAttrName
にセカンダリー属性を設定できます。これは、stateAttrName
で定義されたプライマリー属性が存在しない場合にチェックできます。属性を指定していない場合は、デフォルト値のcreateTimestamp
が使用されます。警告プライマリー属性の値がlastLoginTime
とaltStateAttrName
でcreateTimestamp
に設定されていると、既存の環境のユーザーは、アカウントにlastLoginTime
属性がなく、設定した非アクティブ期間よりもcreateTimestamp
が古い場合に、既存の環境のユーザーは自動的にロックされます。この状況に対処するには、代替属性を1.1
に設定します。これは、代替として属性を使用しないことを明示します。lastLoginTime
属性は、ユーザーが次回ログインした後に自動的に作成されます。- アカウントポリシーを適用するエントリーを表示するのに使用する属性を設定します (
acctPolicySubentry
)。 - 実際のタイムアウト期間の設定に使用されるアカウントポリシーの属性を秒単位で設定します (
accountInactivityLimit
)。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy config-entry set "cn=config,cn=Account Policy Plugin,cn=plugins,cn=config" --always-record-login yes --state-attr lastLoginTime --alt-state-attr 1.1 --spec-attr acctPolicySubentry --limit-attr accountInactivityLimit
- サーバーを再起動して、新しいプラグイン設定を読み込みます。
# dsctl instance_name restart
- アカウントポリシーを定義します。
# ldapadd
-a
-D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=Account Inactivation Policy,dc=example,dc=com objectClass: top objectClass: ldapsubentry objectClass: extensibleObjectobjectClass: accountpolicy
accountInactivityLimit: 2592000
cn: Account Inactivation Policy - サービステンプレートエントリーのクラスを作成します。
# ldapadd
-a
-D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=TempltCoS,dc=example,dc=com objectClass: top objectClass: ldapsubentry objectClass: extensibleObject objectClass: cosTemplate acctPolicySubentry: cn=Account Inactivation Policy,dc=example,dc=comアカウントポリシーは、CoS を使用する代わりに、ユーザーエントリーで直接定義できます。しかし、CoS を使用することで、複数のエントリーに対して確実にアカウントポリシーを適用および更新することができ、1 つのエントリーに複数のポリシーを適用することができます。 - サービス定義エントリーのクラスを作成します。CoS の管理エントリーはアカウントポリシー属性
acctPolicySubentry
です。この例では、CoS をディレクトリーツリー全体に適用します。# ldapadd
-a
-D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=DefnCoS,dc=example,dc=com objectClass: top objectClass: ldapsubentry objectclass: cosSuperDefinition objectclass: cosPointerDefinition cosTemplateDn: cn=TempltCoS,dc=example,dc=com cosAttribute: acctPolicySubentry default operational-default
20.10.3. パスワード失効後の特定期間のアカウントの無効化
Directory Server では、パスワードの期限が切れてから一定期間アカウントを無効にするアカウントポリシーを設定できます。無効にしたアカウントはログインできなくなります。
この設定を設定するには、「アカウントアクティビティーとアカウントの有効期限」の手順に従います。ただし、プラグイン設定エントリーを設定する場合は、代わりに以下の設定を使用してください。
dn: cn=config,cn=Account Policy Plugin,cn=plugins,cn=config objectClass: top objectClass: extensibleObject cn: config alwaysrecordlogin: yes stateAttrName: non_existent_attribute altStateAttrName: passwordExpirationTime specattrname: acctPolicySubentry limitattrname: accountInactivityLimit
この設定では、
stateAttrName
パラメーターにダミー値を使用します。したがって、altStateAttrName
パラメーターで設定した passwordExpirationTime 属性のみが、アカウントの期限が切れるタイミングを算出するために使用されます。
また、ユーザーエントリーの
lastLoginTime
属性に最後に成功したログインの時間を記録するため、以下を設定します。
dn: cn=config,cn=Account Policy Plugin,cn=plugins,cn=config alwaysRecordLoginAttr: lastLoginTime
この設定では、ユーザーの
passwordExpirationTime
属性とaccountInactivityLimit
パラメーターの値に設定されている時間の合計が過去になった場合は、アカウントが自動的に無効になります。この設定では、ユーザーの passwordExpirationTime
属性と accountInactivityLimit
パラメーターの値の合計が、alwaysRecordLoginAttr
属性が最後に更新されてからの時間を超えた場合は、アカウントが自動的に無効になります。
20.10.4. ロックアウトポリシーを設定しないログイン時間の追跡
アカウントポリシープラグインを使用して、有効期限や非アクティブ期間を設定 しなくても、ユーザーのログイン時間を追跡することもできます。この場合、アカウントポリシープラグインは
lastLoginTime
属性をユーザーエントリーに追加するために使用されますが、他のポリシールールを設定する必要はありません。
その場合には、アカウントポリシープラグインを通常どおりに設定して、ログイン時間を追跡します。ただし、追跡中のログイン情報に作用する CoS は作成しないでください。
- アカウントポリシープラグインを有効にします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy enable
- ログイン時間を記録するプラグイン設定エントリーを作成します。
- すべてのエントリーにログイン時間が記録されるように、
alwaysRecordLogin
の値を yes に設定します。 lastLoginTime
属性をアカウントポリシー (stateattrname
) に使用する属性として設定します。- アカウントポリシーを適用するエントリーを表示するのに使用する属性を設定します (
acctPolicySubentry
)。 - 実際のタイムアウト期間 (秒単位) を設定するのに使用されるアカウントポリシーの属性を設定します (
accountInactivityLimit
)。
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy config-entry set "cn=config,cn=Account Policy Plugin,cn=plugins,cn=config" --always-record-login yes --state-attr lastLoginTime --alt-state-attr createTimestamp --spec-attr acctPolicySubentry --limit-attr accountInactivityLimit
- サーバーを再起動して、新しいプラグイン設定を読み込みます。
# dsctl instance_name restart
20.10.5. Inactive アカウントのロックの解除
非アクティブ制限に達したためにアカウントがロックされた場合は、以下のいずれかの方法で再アクティベートできます。
- dsidm ユーティリティーの使用:
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" account unlock "uid=example"
lastLoginTime
属性を現在のタイムスタンプに手動でリセット:# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: uid=example,ou=people,dc=example,dc=com changetype: modify replace: lastLoginTime lastLoginTime: 20210901000000Z
タイムスタンプにZ
が追加されているため、lastLoginTime
属性は値を GMT/UTC 時間 (Zulu タイムゾーン) で保存することがわかります。