第17章 時間ベースのアカウントロックアウトポリシーの設定
アカウントポリシープラグインを使用して、次のようなさまざまな時間ベースのロックアウトポリシーを設定できます。
17.1. 最後に成功したログインで一定時間アカウントを自動的に無効にする
この手順に従って、21 日を超えてログインしない dc=example,dc=com
エントリーの下のユーザーを非アクティブ化する時間ベースのロックアウトポリシーを設定します。
このアカウント非アクティブ機能は、たとえば、従業員が会社を辞め、管理者がアカウントの削除を忘れた場合に、Directory Server が一定時間後にアカウントを非アクティブ化することを保証します。
手順
アカウントポリシープラグインを有効にします。
#
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 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
コマンドは、以下のオプションを使用します。
-
--always-record-login yes
: ログイン時間のログを有効にします。これは、acctPolicySubentry
属性が設定されていない場合でも、サービスクラス (Co S) またはアカウントポリシーを持つロールを使用するために必要です。 -
--state-attr last LoginTime
: アカウントポリシープラグインがユーザーのlast Login Time
属性に最終ログイン時刻を保存するように設定します。 -
--alt-state-attr 1.1
: 代替属性を使用してプライマリー属性が存在しないかどうかをチェックすることを無効にします。デフォルトでは、Directory Server は代わりにcreateTimestamp
属性を使用します。ただし、これにより、アカウントにlastLoginTime
属性が設定されておらず、createTimestamp
が設定された非アクティブ期間よりも古い場合、Directory Server は既存のユーザーを自動的にログアウトします。代替属性を無効にすると、Directory Server は、ユーザーが次回ログインするときに、lastLoginTime
属性をユーザーエントリーに自動的に追加します。 -
--spec-attr acctPolicySubentry
:acctPolicySubentry
属性が設定されているエントリーにポリシーを適用するように Directory Server を設定します。この属性は、CoS エントリーで設定します。 -
--limit-attr accountInactivityLimit
: アカウント非アクティブ化ポリシーエントリーのaccountInactivityLimit
属性が非アクティブ時間を保存するように設定します。
-
インスタンスを再起動します。
#
dsctl instance_name restart
アカウント非アクティブ化ポリシーエントリーを作成します。
#
ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: cn=Account Inactivation Policy,dc=example,dc=com objectClass: top objectClass: ldapsubentry objectClass: extensibleObject objectClass: accountpolicy accountInactivityLimit: 1814400 cn: Account Inactivation PolicyaccountInactivityLimit
属性の値は、Directory Server が最後のログインから1814400
秒 (21 日) 後にアカウントを非アクティブ化するように設定します。CoS テンプレートエントリーを作成します。
#
ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: cn=TemplateCoS,dc=example,dc=com objectClass: top objectClass: ldapsubentry objectClass: extensibleObject objectClass: cosTemplate acctPolicySubentry: cn=Account Inactivation Policy,dc=example,dc=comこのテンプレートエントリーは、アカウントの非アクティブ化ポリシーを参照します。
CoS 定義エントリーを作成します。
#
ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: cn=DefinitionCoS,dc=example,dc=com objectClass: top objectClass: ldapsubentry objectclass: cosSuperDefinition objectclass: cosPointerDefinition cosTemplateDn: cn=TemplateCoS,dc=example,dc=com cosAttribute: acctPolicySubentry default operational-defaultこの定義エントリーは CoS テンプレートエントリーを参照し、
acctPolicySubentry
属性が各ユーザーエントリーに表示され、値がcn=Account Inactivation Policy,dc=example,dc=com
設定されます。
検証
lastLoginTime
属性を、設定した非アクティブ時間よりも古い値に設定します。#
ldapmodify -H ldap://server.example.com -x -D "cn=Directory Manager" -W
dn: uid=example,ou=People,dc=example,dc=com changetype: modify replace: lastLoginTime lastLoginTime: 20210101000000Zこのユーザーとしてディレクトリーに接続してみてください。
#
ldapsearch -H ldap://server.example.com -x -D "uid=example,ou=People,dc=example,dc=com" -W -b "dc=example,dc=com"
ldap_bind: Constraint violation (19) additional info: Account inactivity limit exceeded. Contact system administrator to reset.Directory Server がアクセスを拒否してこのエラーを返した場合、アカウントの非アクティブが機能します。