ユーザーの記憶に対する小さなウィンドウの影響、およびそれに対する対処方法







Windows Vista \ 2008のリリースでも、管理者は小さなながらも不快な問題に直面しました。画面の最も目立たないコーナーで、パスワードの有効期限の警告が孤独に表示され始めました。 そして、これは以前のように中央にあるウィンドウの代わりです!







したがって、最後の瞬間にパスワードが変更され、アクセス拒否が伴います。 VPNが突然機能しなくなった理由と、出張でそれをどうするかというinり。 もちろん、今年の問題ではありませんが、この現象は迷惑で不快です。 したがって、私たちはそれを克服する方法を理解しています。







メモリの保護に関するレポートとExcel



PowerShellではなくExcel:ADクエリとシステムレポート 」の記事で、Excelを使用してActive Directoryから情報を取得する方法について説明しました。 このメカニズムにより、ユーザーパスワードの有効期限に関するレポートをいつでも取得できます。 最新のドメインでは、 msDS-UserPasswordExpiryTimeComputed属性がthisのユーザークラスに存在します。







Power Queryを使用すると、同様のプレートを簡単に取得できます。









MS Excelのパスワード有効期限レポート。







さて、ビュー式を追加すると







=([@[msDS-UserPasswordExpiryTimeComputed]]<();" !";([@[msDS-UserPasswordExpiryTimeComputed]]-5<();"  !";""))
      
      





次の列で、この種類のテーブルを取得します。









レポートをより視覚的にします。







内容に基づいてセルを色付けするルールを追加するだけで、非常に美しいものになります。









さらに視覚的に。







データの自動更新を設定するときは、表を見て、ユーザーの要求に備えることができます。 または、アカウントマネージャー(はい、どこかにそのような特別な人がいます)を従業員の呼び出しに割り当てます。







PowerShellをアカウントマネージャーとして使用してみましょう。







従業員への自動通知



さいわい、Excelだけでなく、PowerShellなどのお気に入りのスクリプト言語を使用して、Active Directoryからデータを取得できます。







最初に、このリクエストでユーザーとそのアドレスのリストを取得します。







 $users = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False -and PasswordLastSet -gt 0} ` -Properties "Name", "EmailAddress", "msDS-UserPasswordExpiryTimeComputed" | ` Select-Object -Property "Name", "EmailAddress", ` @{Name = "PasswordExpiry"; Expression = {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed").tolongdatestring() }}
      
      





ご覧のとおり、このリクエストでは、次の3つの条件を満たすユーザーのみを取得します。









その結果、ユーザー名、アドレス、パスワードの有効期限が記載された値のテーブルが取得されます。 便宜上、警告時間に3つのオプションを設定します-7、3、1日:







 $SevenDayWarnDate = (get-date).adddays(7).ToLongDateString() $ThreeDayWarnDate = (get-date).adddays(3).ToLongDateString() $OneDayWarnDate = (get-date).adddays(1).ToLongDateString()
      
      





ここで、これら3つの変数を$ user.PasswordExpiryの値と比較すると、適切な通知を送信できます。 電子メールの送信はSend-MailMessageコマンドレットを使用して行われることを思い出させてください。







しかし、ユーザーにメールのみで通知する必要はありません-「 まだボットではありませんが、既に何か-インスタントメッセンジャーとしてZabbixから通知を受け取ります 」という資料を使用し、他の通信チャネル経由で通知を送信できます。

スケジューラを使用して毎日実行できるスクリプトの完全なリストは、ネタバレの下にあります。







知る
 Import-Module ActiveDirectory #    $SevenDayWarnDate = (get-date).adddays(7).ToLongDateString() $ThreeDayWarnDate = (get-date).adddays(3).ToLongDateString() $OneDayWarnDate = (get-date).adddays(1).ToLongDateString() #   $MailSender = " - <bot@domain.com>" $Subject = '!     ' $EmailStub1 = ' -.   ' $EmailStub2 = '' $EmailStub3 = '' $EmailStub4 = '. ,    .     ,       .' $SMTPServer = 'smtp.domain.com' #  $users = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False -and PasswordLastSet -gt 0 } ` -Properties "Name", "EmailAddress", "msDS-UserPasswordExpiryTimeComputed" | Select-Object -Property "Name", "EmailAddress", ` @{Name = "PasswordExpiry"; Expression = {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed").tolongdatestring() }} #     . foreach ($user in $users) { if ($user.PasswordExpiry -eq $SevenDayWarnDate) { $days = 7 $EmailBody = $EmailStub1, $user.name, $EmailStub2, $days, $EmailStub3, $SevenDayWarnDate, $EmailStub4 -join ' ' Send-MailMessage -To $user.EmailAddress -From $MailSender -SmtpServer $SMTPServer -Subject $Subject -Body $EmailBody } elseif ($user.PasswordExpiry -eq $ThreeDayWarnDate) { $days = 3 $EmailBody = $EmailStub1, $user.name, $EmailStub2, $days, $EmailStub3, $ThreeDayWarnDate, $EmailStub4 -join ' ' Send-MailMessage -To $user.EmailAddress -From $MailSender -SmtpServer $SMTPServer -Subject $Subject ` -Body $EmailBody } elseif ($user.PasswordExpiry -eq $oneDayWarnDate) { $days = 1 $EmailBody = $EmailStub1, $user.name, $EmailStub2, $days, $EmailStub3, $OneDayWarnDate, $EmailStub4 -join ' ' Send-MailMessage -To $user.EmailAddress -From $MailSender -SmtpServer $SMTPServer -Subject $Subject -Body $EmailBody } else {} }
      
      





現在、ユーザーは警告を受けており、ユーザーの責任を期待しています。 別の通知オプションを検討してください。







ログイン時にユーザーに通知する



ログオンスクリプトまたは起動中のプログラムを介して、有効期限切れのパスワードに関するメッセージを画面に戻すことができます。 残念ながら、明らかな理由により、このオプションはドメインサービスをリモートで操作するユーザーには適していません。







以下は、グループポリシーによって自動ロードに組み込まれた単純なPowerShellスクリプトの例です。







 $user= Get-ADUser -Identity $env:username -Properties 'msDS-UserPasswordExpiryTimeComputed','PasswordNeverExpires' if ( -not $user.'PasswordNeverExpires') { $diff=(new-timespan -start (get-date) -end ([datetime]::FromFileTime($user."msDS-UserPasswordExpiryTimeComputed"))).Days if ($diff -lt 7) { $msgBoxInput = [System.Windows.MessageBox]::Show("    "+ $diff + " !`n    ?","!","YesNo","Warning") switch ($msgBoxInput) { 'Yes' { cmd /c "explorer shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}" } 'No' { } } } }
      
      





エクスプローラーシェル起動ライン::: {2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}は、Windowsセキュリティインターフェイスの起動です。 Windows 2012のリリース後、[スタート]メニューから消え、RDP接続の場合はCtrl + Alt + DelまたはCtrl + Alt + Endを押すだけで使用可能になりました。













通知ウィンドウ。

ネタバレの対象となるのは、古いバージョンのスクリプトです。







AutoITで
 #Include <AD.au3> #include <Date.au3> _AD_Open() $array=_AD_GetPasswordInfo() if $array[9] <> "" then $t=_DateDiff ( "d", _NowCalc(), $array[9] ) if $t < 7 Then $a=MsgBox ( 4, "!", "      " &$t &" ."&@crlf&"    ?" ) if $a=6 then Run("explorer shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}") sleep(1000) endif endif endif _AD_Close()
      
      





単純な実装は、 AD.au3ライブラリの_AD_GetPasswordInfo()関数によって支援されます。 有効期限を含むパスワード情報を含む値の配列を提供します。







このメカニズムの導入後、期限切れのパスワードに関する問題は表示されなくなりました。







ドメインの欠如



Active Directoryインフラストラクチャが展開されていない場合(たとえば、別のターミナルサーバーの場合)、少し複雑ですが、ソリューションも存在します。







これを行うには、少しのWMIマジックとお気に入りのスクリプト言語が必要です。 PowerShellの例に戻ります。







 # . $Computer = $env:computername #  $UserName = $env:username #   $Days = 2 $User = [ADSI]"WinNT://$Computer/$UserName,user" $Flags = $User.UserFlags.psbase.Value #    . If ($Flags -band 65536) { "     " } Else { #   . $AgeDays = $User.PasswordAge.psbase.Value / 86400 $MaxAge = $User.MaxPasswordAge.psbase.Value / 86400 If ($AgeDays -gt $MaxAge) { " " } Else { If (($AgeDays + $Days) -gt $MaxAge) { "    $Days " } Else { "  " } } }
      
      





適切に改良することで、このようなスクリプトは、定期的に起動されたとき、またはログインしたときにユーザーに通知できます。







長い間、パスワードの存在の意味について考えていました。 一方で、安全でありながら、常に新しいパスワードを発明すると、これらのパスワードを忘れてしまい、その結果、モニターやキーボードの下にステッカーが貼られてしまいます。







そのため、ユーザーが自分でパスワードを思いついたときのプラクティスはますます身近になっていますが、同時に、 L0phtCrackなどのユーティリティを使用した辞書攻撃によって、創造性が定期的に監査されています。 パスワードの長さの要件のみが必須です( xkcdの有名な写真を思い出してください)。







そのため、 Qwerty123のようなすばらしい組み合わせの形で、人々の生活を楽にし、「ネジを締める」ことに対する防御的な反応を避けることができます。 さて、そして何-システムは誓っていませんが、これはあなたです...彼らはここでそれを発明しました。







ところで、パスワードを変更するアカウントマネージャーやファッションユースの練習はありますか?








All Articles