none
ドメイン環境下でのログオフ監査とログオフスクリプトの実行について RRS feed

  • 質問

  • 【2019/01/18 13:15 追記】
    どうやらスクリプトが正常に完了していない時、ログオフスクリプトがAD側のイベントビューアに書き込む際
    800A0046のエラーで書き込み拒否されているようです。
    何度かクライアントPCの再起動⇒プロンプトから直接ADのSYSVOL内のスクリプトを叩いたところ、不定期に発生しているようです。
    正常に完了(イベントビューアへの書き込み)ができる時とできない時の差異がわかりません……

    【環境】
    AD:Windows Server 2012 R2 Standard
    クライアントPC:Windows7 SP1,Windows10_1803,Windows10_1809

    【質問内容】
    表題の通り、監査対応のため、ドメイン環境下にてドメインユーザーのログオフ時刻を記録する運びとなりました。
    ログオフスクリプトを登録し、ログオフ時にAD側のイベントログに記録を残すことを想定しています。
    動作テストを兼ねて、OUを作成し、作成したOUに対し、GPOを作成し下記のように設定したのですが、スクリプトが実行される時とされない時があります。

    スクリプトが実行された時はクライアントPCにてログオフ(シャットダウン)を行った際にスムーズに終了し、AD側のイベントビューアのApplicationの項目に記載されますが、実行されなかった時はクライアントPCにてログオフ(シャットダウン)を行った際に待機時間設定と近しい秒数を待機した後に終了し、AD側のイベントビューアに記載されませんでした。

    問題切り分けとして、クライアントPCのプロンプトから直接ADのSYSVOL内のvbsファイルを実行した場合は正常に完了し、AD側のイベントビューアにも記載されました。※イベントビューアへの書き込み許可は設定しております

    安定したログオフスクリプト実行と、速やかなログオフ(シャットダウン)をさせたいのですが、なにか解決法はございますか。

    今回はVBSファイルをログオフスクリプトとして実行させていますが、対象のドメインユーザー名・ログオフ時刻が採取できれば別のアプローチでも構いません。

    宜しくお願い致します。

    【設定事項】
    ・[コンピューターの構成]→[ポリシー]→[管理用テンプレート]→[システム]→[スクリプト]
     グループポリシースクリプトの最大待機時間を指定する:有効 180秒

    ・[ユーザーの構成]→[ポリシー]→[Windowsの設定]→[スクリプト(ログオン/ログオフ)]
     ログオフ: \\hoge.local\SYSVOL\hoge.local\scripts\logoff_script.vbs

    ####################

    【logoff_script.vbs】

    Const AUDIT_SUCCESS = 8

    REM Create Objects
    Set objShell = WScript.CreateObject("WScript.Shell")
    Set objNetwork = WScript.CreateObject("WScript.Network")
    Set objADsys = CreateObject("ADSystemInfo")

    REM Build a message string
    strMsg = "User " + objNetwork.UserName + " log off from " + objNetwork.Userdomain + " [server (" + objADsys.GetAnyDCName + ")]"

    REM Write to Eventlog
    objShell.LogEvent AUDIT_SUCCESS,strMsg,objADSys.GetAnyDCName

    Set objShell = Nothing
    Set objNetwork = Nothing
    Set objADSys = Nothing

    ####################



    2019年1月18日 1:32

回答

  • ヒントとしては 800A0046 のエラーは ”CTL_E_PERMISSIONDENIED” であるということですね。

    プロンプトから直接ADのSYSVOL内のスクリプトを叩いたところ、不定期に発生

    であれば、ログオフスクリプトとして実行していることとは無関係にエラーが発生しているということになります。

    スクリプト自体にデバッグ出力を入れる、スクリプトを最小化したレベルから順に検証する、などの調査方法は考えられますね(イベントログに出力するのではなく、ファイルに書き込むような処理にしたらどうなるか、とかも試せるでしょう)。


    Hebikuzure aka Murachi Akira

    2019年1月18日 6:29
  • チャブーンです。

    エラーコードの件ですが、たとえばグループポリシーの適用失敗の状況下でも発生することがあります。イベントログの[Group Policy Client]のOperationログから、グループポリシーの適用状況が確認できますので、以下の資料を参考に確認してみてはどうでしょうか。

    https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-vista/cc749336(v=ws.10)

    単にSYSVOLへのアクセス状況確認だけでなく、GPO適用の全体を正常化させる方向で確認いただくといいと思います。


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

    2019年1月18日 10:50
    モデレータ
  • チャブーンです。

    フィードバック、ありがとうございます。

    ApplicationイベントログのSDDLの問題、ということですが、何かカスタマイズしていたのでしょうか?ふつうは問題ないはずですので、「できたりできなかったり」というなら、一部のドメインコントローラーだけSDDLをカスタマイズしていた、ということなのでしょうか。

    あとスクリプトですが、cscript.exeベースで実行したほうがいいかもしれません。デフォルトではwscript.exe(GUIベース)で実行するよう設定されているかもしれませんので。ログオフスクリプトの実行ファイルをcscript.exeに、引数にlogoff_script.vbsのフルパスを入れる、ということになると思います。


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

    2019年1月24日 1:42
    モデレータ

すべての返信

  • チャブーンです。

    この件ですが、スクリプトの動作仕様が変わったのは、単にWindowsクライアントOSの仕様が変わったからだと思います。

    そのスクリプトソリューションが生成された頃(たとえばhttp://www.monyo.com/technical/windows/35.htmlなページとか)には、最近のWindowsに実装された「高速スタートアップ機能」など考えられていなかったからです。

    ですから、したのページを参考にWindows 10の高速スタートアップ機能をOFFにして、動作を確認すればいいのではないでしょうか?

    https://blogs.technet.microsoft.com/askcorejp/2017/10/13/%E9%AB%98%E9%80%9F%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E7%95%99%E6%84%8F%E7%82%B9/


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

    2019年1月18日 2:07
    モデレータ
  • チャブーンさん

    早々にご回答いただき、ありがとうございます。
    クライアントPCには払い出し時に高速スタートアップの無効化設定をしておりまして、念の為本件で作成したGPOにも無効化の記載をしてテストを行いましたが、やはりスクリプトの実行に際して正常に処理される場合とタイムアウト?している場合があります。
    ※同一の端末で複数回のログオフ・シャットダウンを行ってテストしました。

    引き続き解決案・代案など募集しております。
    宜しくお願い致します。
    2019年1月18日 2:39
  • ヒントとしては 800A0046 のエラーは ”CTL_E_PERMISSIONDENIED” であるということですね。

    プロンプトから直接ADのSYSVOL内のスクリプトを叩いたところ、不定期に発生

    であれば、ログオフスクリプトとして実行していることとは無関係にエラーが発生しているということになります。

    スクリプト自体にデバッグ出力を入れる、スクリプトを最小化したレベルから順に検証する、などの調査方法は考えられますね(イベントログに出力するのではなく、ファイルに書き込むような処理にしたらどうなるか、とかも試せるでしょう)。


    Hebikuzure aka Murachi Akira

    2019年1月18日 6:29
  • チャブーンです。

    エラーコードの件ですが、たとえばグループポリシーの適用失敗の状況下でも発生することがあります。イベントログの[Group Policy Client]のOperationログから、グループポリシーの適用状況が確認できますので、以下の資料を参考に確認してみてはどうでしょうか。

    https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-vista/cc749336(v=ws.10)

    単にSYSVOLへのアクセス状況確認だけでなく、GPO適用の全体を正常化させる方向で確認いただくといいと思います。


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

    2019年1月18日 10:50
    モデレータ
  • Hebikuzure aka Murachi Akiraさん
    チャブーンさん

    ご回答ありがとうございました。
    問題は解消しました。

    テスト用のScriptsをいくつか試していたところ、MsgboxのようなWriteが発生しないものについては問題なく動作することから
    SDDLの設定がうまくいっていない方向に絞り込みました。
    対象OUに掛かるGPOをなめていき、同一の設定を行いました。
    ※GPOの適用順・上書きについては理解しておりますが、念の為

    またサーバー側のレジストリのCustomSDに設定を書き込みました。
    HLKM\SYSTEM\CurrentControlSet\Services\EventLog\Application

    この度は大変お世話になりました。
    今後とも宜しくお願い致します。
    2019年1月24日 0:01
  • チャブーンです。

    フィードバック、ありがとうございます。

    ApplicationイベントログのSDDLの問題、ということですが、何かカスタマイズしていたのでしょうか?ふつうは問題ないはずですので、「できたりできなかったり」というなら、一部のドメインコントローラーだけSDDLをカスタマイズしていた、ということなのでしょうか。

    あとスクリプトですが、cscript.exeベースで実行したほうがいいかもしれません。デフォルトではwscript.exe(GUIベース)で実行するよう設定されているかもしれませんので。ログオフスクリプトの実行ファイルをcscript.exeに、引数にlogoff_script.vbsのフルパスを入れる、ということになると思います。


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

    2019年1月24日 1:42
    モデレータ