グループポリシーとログオンスクリプトでログオン・ログオフ時間を記録する。

2016/01/27 Windows

Windows-logon-logoff
監査法人による監査や、クライアントの業務管理でActive Directory上のユーザーアカウントがドメインへログオン、ログオフした時間を取得したいというニーズは多いと思います。今回は、このログオン、ログオフした時間をグループポリシーとログオン・ログオフスクリプトを利用してイベントビューワーへ出力する設定について手順を紹介します。

スポンサーリンク

実はWindows Serverでは、ログオンを取得するための機能が実装されています。ただ、この機能は痒いところに手が届かない。ログオフの記録を取得できません。また、時間についても仕様上、正確な取得が出来ず、結果として、余りログ取得の意味を成さない機能になっています。

その為、今回、紹介するような手順での取得が必要となってしまいます。有償のログ取得ツールを利用すれば良いのですが、そういったツールは高価なことが多い。それなら運用でカバーしてしまおうというのが、今回の発端です。

Windowsの監査ログには、ログオン、ログオフを記録する機能が実装されていますが、この機能は仕様上、正確なログオン・ログオフ時間が記録できず、実運用で利用するには、難しい実装になっています。ログオンは記録されるが、ログオフが記録できないなど、機能としては不十分な点も挙げられます。そこで、監査ログを利用せず、ログオン・ログオフ時間を記録するために利用されてきた設定がログオン・ログオフスクリプトとグループポリシーの組み合わせになります。
ユーザーアカウントのドメインログオン、ログオフ時にスクリプトを実行して、ドメインコントローラーのイベントビューワーに時間とユーザーアカウント名、コンピューター名を出力させるという方法です。

最近では、Windows Server 2012をドメインコントローラーにしての、Windowsドメイン環境も増えてきたかと思いますので、2012でこのログオン・ログオフ時の記録を行う設定を試してみました。ドメインコントローラーのOSバージョンはWindows Server 2012 R2ですが、2008 R2でも利用できるかと思います。Windows Server 2012でのActive Directory構築については「Windows Server 2012 R2へActive Directoryをインストール・構成する」を参照下さい。

1.ログオン、ログオフスクリプトの準備

ログオン・ログオフスクリプトの準備を行います。スクリプトを記載したファイルを作成後、必要な部分の変更を行い、所定のパスへ保存します。ログの出力についてはスクリプトを二つ記載しました。運用している環境に応じて、使い分けて下さい。

1-1.スクリプトの変更

スクリプトは任意で変更を行います。以下のスクリプトはWindows Server 2003以上のActive Directory環境で利用できるスクリプトになり、ウェブサイトでよく見かけるWSHのLogEventメソッドを利用したものとなります。
ログオン用スクリプト 1

ログオフ用スクリプト 1

作成したのスクリプトを、LogOnScript.vbs LogOffScript.vbsなど、任意の名前で保存します。

1-2.スクリプトの配置

以下のフォルダへスクリプトを移動します。
移動先フォルダは「ファイル名を指定して実行」ダイアログボックスに以下のパスを入力します。
パスは設定を行う環境に合わせて読み替えて下さい。
\\DC名\SYSVOL\ドメイン名\scrpits\
ここでは
\\win13r2ev\sysvol\testdom.local\scripts\
を入力しています。
path-to-script
以下のようにフォルダが開きますので、ここへスクリプトをドラッグ&ドロップします。
scripts-folder

スクリプトを移動したら、フォルダを閉じます。
これでスクリプトの準備は完了です。

2.グループポリシーの作成

ログオン・ログオフスクリプトをドメインに適用するために、グループポリシーを利用します。グループポリシーの作成と適用については「Windows Server 2012 R2でグループポリシーを設定する」を参照してください。

任意の名前でグループポリシーを作成して、ロギングしたいドメインやOUにリンクします。
ここではLogon_loggingとしてグループポリシーを作成しました。
group-policy-log
グループポリシー作成後は以下の点を変更します。
[ユーザーの構成][ポリシー][Windowsの設定][スクリプト][ログオン] => 先程配置したログオンスクリプトを指定
gp-logon-script
[ユーザーの構成][ポリシー][Windowsの設定][スクリプト][ログオフ]には先程配置したログオフスクリプトを指定
gp-logoff-log

3.アクセス権の設定

通常、イベントビューワーへの書き込みはDomain_Adminsグループに属するアカウントでしか、行うことができません。その為、一般ユーザーで書き込みができるようにログを出力させるドメインコントローラー上で、以下のコマンドを実行します。

gp-cmd
エラーなどが出力されなければ、コマンドは正常に実行できています。

4.スクリプト実行用グループポリシーの有効化

ドメインに所属するクライアント側でグループポリシーを有効化するために、コマンドプロンプトから

を実行します。
グループポリシーが更新されたことが表示されれば、適用は完了です。
ここでは明示的にグループポリシーを更新していますが、一定時間後には伝播されます。
直ぐに確認を行いたい場合は、上記のコマンドを実行することで、反映されます。

5.スクリプトの動作確認

クライアントPCでドメインへのログオン、ログオフを行い、ドメインコントローラーの「アプリケーション」ログに該当するログが出力されていることを確認します。

5-1.ドメインログオン時のログ (スクリプト1の場合)

ドメインログオン時に以下のようなログが出力されます。
gp-log-logon01

5-2.ドメインログオフ時のログ(スクリプト1の場合)

ドメインからのログオフ時には以下のようなログが出力されます。
gp-log-logon02

6.イベントログの「ユーザー」フィールドが必要な場合

今までに紹介したスクリプトの場合、イベントログの「ユーザー」フィールドにユーザー名が含まれません。ユーザーフィールドの項目が必要な場合、以下のスクリプトを利用します。
本スクリプトは「2008 Active Directoryでログオン・ログオフ監査.sys」を参考にさせて頂きました。

6-1.スクリプトの変更 2

ユーザーフィールドを利用する場合、Logeventではなく、eventcreateを利用したスクリプトを使用します。
最低限、変更が必要な部分はドメインコントローラーの指定部分である
Const EVENTLOG_DC_NAME = “\\DC_NAME”
になります。
ここをスクリプトを配置するドメインコントローラー名に変更して下さい。
以下がログオンスクリプトです。
ログオンスクリプト

以下、ログオフスクリプトになります。
ログオフスクリプト

スクリプトが用意できたら、それ以外の手順は、スクリプト1の場合と同じになります。
項目1-2.から2の最後までと同様に設定を行うことで、ログの取得が可能です。

6-2.ドメインログオン時のログ スクリプト2の場合

ドメインログオン時に以下のようなログが出力されます。
ユーザーフィールドが含まれた形となります。
gp-logon-success

6-3.ドメインログオフ時のログ スクリプト2の場合

ドメインからのログオフ時には以下のようなログが出力されます。
ログオン時と同様に、ユーザーフィールドが含まれた形となります。
gp-logoff-success
この際、セキュリティログではなく、アプリケーションログに出力されることに注意してください。

7.まとめ

ユーザーのドメインログオン・ログオフ時間を取得しようとした場合、資産管理やミドルウェアなどの導入が必要になると考えがちですが、この記事で紹介したようにグループポリシーとログオンスクリプトを利用することによって、AD単体での取得もできます。
イベントに出力されるログからログオン・ログオフ時間をトレースするのは、他のログも出力されることから、少し大変ですが、まずは取得するということが大切な環境もあります。そういった環境の場合、本設定はADがあれば追加の費用無しで導入できます。コストが厳しい状況や、予算が無い場合は、このような方法もあるということを、頭の隅にでも置いておくと、何かと役に立つかと思います。

因みにログを見やすい形に生成するためのアプリケーション(Log Parser)もマイクロソフトでは無償でリリースしていますので、こちらについてもいずれ、記事にしていきたいと思います。

システムでお困りのお客様

もし、貴社で、

  • サポート切れのサーバやネットワーク機器の入れ替えをしたいが、どうしたらよいかわからない
  • サーバやネットワークの管理を行う社員がいないため困っている
  • 業務に利用している機器のセキュリティが大丈夫か心配
  • 機器の障害で、業務への影響が発生している
  • 社内の要望に対して、どのようなシステムを導入したらよいか解らない

など、サーバーやネットワーク、セキュリティでお悩みの方、新規のシステム導入を検討中の方。
多くのシステム構築を行い、成功させてきた実績をもつ弊社が、その問題を解決します。
お気軽にお問い合わせ頂き、貴社の問題解決にお役立てください。

お問い合わせ・ご相談はこちらから

Facebookでのご購読が便利です。

Twitter・Feedlyでもご購読できます。

Twitterでフォローする Feedlyでフォローする

関連する情報

vm-win2012-install

Windows Server 2012 R2をインストールする時の手順

前回の記事「VMware Workstation バージョン8 で Windows Server

windows-wan-slow

Windowsを利用していてWAN越しのファイル共有が遅い場合の検討事項

先日、弊社のお客様より、インターネットVPN経由(WAN越し)でファイルサーバへアクセスした場合

activedirectory-first

Windows Server 2012 R2へActive Directoryをインストール・構成する

以前の記事「Windows server 2012 R2を利用する前に始める10の作業」でWin

2008-C-drive

Windows Server 2008 R2でCドライブの空き容量を確保する

ここ最近、サーバOSとしてWindows Server 2008 R2を使うことも少しずつ減って

windows-42d-passloss

ActiveDirectory 42日間でパスワードの有効期限が切れる問題の回避方法

WindowsのActiveDirectory(以下AD)を利用していて、突然、パスワードの有効

SQL-wsfc

SQL Server 2012 をWSFCへインストール

先日、名古屋でMicrosoft sql server の構築案件がありました。ベースはWind

numlock-unlock-problem

ノートPCを起動時にnumlockが有効になってしまう場合の対処

先日、少し変わったことがノートPCで発生しました。 WindowsXPのノートPCですが、起動

ad-dsadd

CSVを利用してActive Directoryにユーザーを一括登録するコマンド

WindowsのActive Directoryに一括してユーザーを追加したい場合がありますよね

win2008-sysprep-top

Windows Server 2008 R2で仮想マシンを初期化、sysprepの実行手順

仮想化環境(ここでは主にVMWare ESXiやマイクロソフトのHyper-Vなどのhyperv

hyper-v-unconnect

Windowsの仮想サーバ管理ツール、Hyper-VマネージャーからGuestOSに接続できない

少し前に、Windows2008(R2)のhyper-V上に作成した仮想マシンのGuestOSに

Comment

  1. negishi より:

    小村様

    お世話になります。貴殿の記事、参照させていただきました。ありがとうございました。
    今後ともウインドウズインサイダー(@IT様)のような記事をお届けしてくださることを期待いたしております。

    • 小村 定 より:

      negishi様、小村です。
      コメント有難うございました。本記事が参考になれば幸いです。
      Windowsインサイダーのような記事、頑張ってアップしていきますので、またお時間があれば、覗いてみて下さい。

      あと、テーマを変更したばかりで、レイアウトが崩れていたと思います。
      修正しましたので、今は、正常に見ることができます。
      ご迷惑をおかけしました。

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • スポンサーリンク