none
ADのパスワード有効期限が切れるタイミングを、時刻単位でコントロールしたい RRS feed

  • 質問

  • Active Directoryのパスワード期限切れについて、「ジャスト6ヶ月(720時間)」ではなく、「6ヶ月経過後の特定時刻」にすることはできないでしょうか。

    予告通知に気づかず、期限切れまで放置するユーザーが少なからずおります。
    彼らは朝、Windowsへログオンしようとしてパスワード切れに気づき、IT部門へ連絡してきます。
    IT部門はパスワードをリセットしますが、そういうユーザーは同じ過ちを繰り返します(そもそも過ちと思っていない?)。

    前回、朝一番にパスワードをリセット=変更したため、次は6ヶ月後の朝一番に期限切れします。
    その結果、出社時点ではギリギリ旧パスワードが通り(Windowsログオンは成功)、その直後に期限切れを起こす(シングルサインオンが全滅)……という、厄介な状態になっています。
    ユーザーはシングルサインオンなど意識していないので、「おかしくなった!」とヘルプデスクへ文句を言ってきます。

    期限切れならいっそ、Windowsログオンからできないようにしたいのですが、そのためには時刻を指定して期限切れさせる必要があります。
    Windowsログオンの時点でパスワードが通らないよう、深夜のうちに期限切れさせてしまいたい、ということです。

    同じような悩みは多いのではないかと思いますが、そのような設定はできないものでしょうか。


    2017年10月12日 2:03

回答

  • チャブーンです。

    パスワード期限を「日時」で決め打ち指定することはできません。pwdLastSetという「パスワード変更日時」を起点として、有効期間を上乗せすることで、計算によりパスワード期限は管理されているため、時刻を直接代入する意味がないためです。

    しかたがないので、この場合、直近でパスワード期限が来るユーザーの「次回ログオン時にパスワードの変更が必要」オプションをONにしておけば、その瞬間からパスワード期限にかかわらず、パスワード変更が強制されます。

    PowerShellのGet-ADUserのPasswordLastSetプロパティで、パスワード期限は取得できるので、一定ルール(たとえば実行日当日)の期限のアカウントを抽出し、パイプラインでSet-ADUserのChangePasswordAtLogonプロパティをTrueにすれば、設定を自動的に行えるでしょう。

    このスクリプトを、タスクスケジューラーに登録し、毎日深夜(0時過ぎ等)に実行すれば、いいのではないでしょうか。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    2017年10月12日 19:32
    モデレータ

すべての返信

  • はじめまして。

    ご質問の直接の回答ではございませんが,ユーザ単位に "ユーザはパスワードを変更できない" にチェックがオンのため,質問文の問題が発生しているかと思います。

    そのため,以下 Web にある画像のように "ユーザはパスワードを変更できない" にチェックをオフにすると,ユーザのパスワード有効期限後であっても,次回ログオン時にユーザ側にてパスワードの変更が求められます。その結果,本事象に関するヘルプデスクへの問い合わせを無くすことができるかと思います。

    Windowsでユーザーアカウントのロックアウトを解除する
    http://www.atmarkit.co.jp/ait/articles/0311/29/news005.html
    → ユーザーのプロパティ・ダイアログの "ユーザはパスワードを変更できない" のチェックをオフ

    なお,SLJ Sanamiさんの悩みを解消する方法としては,上記が最も一般的との認識です。

    以上,上記回答が参考になれば幸いです。

    2017年10月12日 4:30
  • パスワードの有効期限を正確に日時指定する方法については、生憎ですが分かりかねます。

    日時を正確に指定することはできませんが、細かい設定が可能なパスワードポリシーを使うと、パスワードの有効期間を細かく指定でき、それを任意のADグローバルグループに(もし必要ならADユーザーにも)適用できます。これを利用して、特定のADグローバルグループに属するユーザーのみ、パスワード有効期間を他のユーザーより数時間短くする、といったことができると思います。

    細かい設定が可能なパスワードポリシーで有効期間を細かく指定するには、ADSI EditでmsDS-MaximumPasswordAgeを指定するか、またはNew-ADFineGrainedPasswordPolicyコマンドレットのMaxPasswordAgeパラメーターを使います。(ActiveDirectory管理センターでは日数しか指定できないようです。)

    細かい設定が可能なパスワードポリシーの詳しい情報については、次のページをご参照下さい。

    AD DS: Fine-Grained Password Policies

    AD DS Fine-Grained Password and Account Lockout Policy Step-by-Step Guide

    New-ADFineGrainedPasswordPolicy

    Active Directory 管理センターの強化概要 (レベル 100)


    ご参考になれば幸いです。

    2017年10月12日 15:00
  • チャブーンです。

    パスワード期限を「日時」で決め打ち指定することはできません。pwdLastSetという「パスワード変更日時」を起点として、有効期間を上乗せすることで、計算によりパスワード期限は管理されているため、時刻を直接代入する意味がないためです。

    しかたがないので、この場合、直近でパスワード期限が来るユーザーの「次回ログオン時にパスワードの変更が必要」オプションをONにしておけば、その瞬間からパスワード期限にかかわらず、パスワード変更が強制されます。

    PowerShellのGet-ADUserのPasswordLastSetプロパティで、パスワード期限は取得できるので、一定ルール(たとえば実行日当日)の期限のアカウントを抽出し、パイプラインでSet-ADUserのChangePasswordAtLogonプロパティをTrueにすれば、設定を自動的に行えるでしょう。

    このスクリプトを、タスクスケジューラーに登録し、毎日深夜(0時過ぎ等)に実行すれば、いいのではないでしょうか。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    2017年10月12日 19:32
    モデレータ
  • ありがとうございます。

    なるほど、その方法であれば、実行できそうですね。

    ご回答、ありがとうございました。

    2017年11月7日 5:54
  • チャブーンです。

    本件、ひとつ言い忘れましたが、PasswordLastSetプロパティはあくまで「パスワードを設定した日時」なので、期限日は計算する必要があります。これは面倒ですので、実は計算済みの値が「msDS-userPasswordExpiryTimeComputed」という属性に納められていますので、これを使うといいと思います。

    サンプルスクリプトが、したにありますので、参考にされるといいと思います。

    https://gallery.technet.microsoft.com/scriptcenter/Get-Password-Expire-Date-275cb080


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。

    2017年11月7日 23:51
    モデレータ