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 プラグインを設定するには、以下を実行します。
  1. アカウントポリシープラグインを有効にします。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy enable
  2. プラグイン設定エントリーを設定します。
    # 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"
  3. プラグイン設定エントリーを作成します。
    • アカウントポリシーで CoS またはロールを使用するには、alwaysRecordLogin の値を yes に設定します。これは、acctPolicySubentry 属性がない場合でも、すべてのエントリーにログイン時間が記録されることを意味します。
    • アカウントポリシー評価に使用するプライマリー属性を stateAttrName の値として設定します。アカウントの停止状態の場合は、lastLoginTime 属性を使用します。単純なアカウントの有効期限の場合は、createTimestamp 属性を使用します。
    • altStateAttrName にセカンダリー属性を設定できます。これは、stateAttrName で定義されたプライマリー属性が存在しない場合にチェックできます。属性を指定していない場合は、デフォルト値の createTimestamp が使用されます。
      警告
      プライマリー属性の値が lastLoginTimealtStateAttrNamecreateTimestamp に設定されていると、既存の環境のユーザーは、アカウントに 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
  4. サーバーを再起動して、新しいプラグイン設定を読み込みます。
    # dsctl instance_name restart
  5. アカウントポリシーを定義します。
    # 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: extensibleObject
    objectClass: accountpolicy
    accountInactivityLimit: 2592000
    cn: Account Inactivation Policy
  6. サービステンプレートエントリーのクラスを作成します。
    # 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 つのエントリーに複数のポリシーを適用することができます。
  7. サービス定義エントリーのクラスを作成します。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 は作成しないでください。
  1. アカウントポリシープラグインを有効にします。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin account-policy enable
  2. ログイン時間を記録するプラグイン設定エントリーを作成します。
    • すべてのエントリーにログイン時間が記録されるように、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
  3. サーバーを再起動して、新しいプラグイン設定を読み込みます。
    # 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 タイムゾーン) で保存することがわかります。