セキュリティの強化が叫ばれている昨今。
なんでもログをとれーログをとれーとうるさくなってきました。
でも、Windowsサーバーに蓄積されるログって使い勝手が悪いもの。どうしたものかと考えた日々でした・・・。
ある日、監査でパソコンのログインのログは取っているか?との指摘がありました。
・・・・・
正直とっていませんでした(^^ゞ
で、「パソコンのログインのログを取れ!」
と命令が下ったのでした。
[1回]
・・・・・・・・
自分がシステム部長だった頃は全然手をつけなかったではないか!
基幹システムのアクセスログはシステムから取得できます。
当然それは取ってあり、複雑怪奇なログからどんな業務をいつ実行したかの分析ツールまで作ってありました。
が、パソコンそのもののアクセスログはとっていませんでした。
休日や時間外にパソコンの電源を入れても誰もわからないという状況でもあったのです・・・。
さてどうしたものか・・・・。
幸いにして、Windows2003サーバー上で、アクティブディレクトリ(AD)を構築しており、ドメイン管理をしているので、そこからログを取得することはできます。
が、対話的なログインのログを取得するのは困難。
ではどうするか・・・。
ここを参考にして、スクリプトでログインログオフのイベントをイベントビューアーに書き込むことにしました。
まず、ログインスクリプトから。login.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 = "<Logon> ユーザ" + objNetwork.UserName + " が、ドメイン" + _
objNetwork.Userdomain + " (サーバー" + objADsys.GetAnyDCName + _
")にログオンしました。"
REM Write to Eventlog
objShell.LogEvent AUDIT_SUCCESS,strMsg,objADSys.GetAnyDCName
Set objShell = Nothing
Set objNetwork = Nothing
Set objADSys = Nothing
で、次にログオフのスクリプト logoff.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 = "<Logoff> ユーザ" + objNetwork.UserName + " が、ドメイン" + _
objNetwork.Userdomain + " (サーバー" + objADsys.GetAnyDCName + _
")にログオフしました。"
REM Write to Eventlog
objShell.LogEvent AUDIT_SUCCESS,strMsg,objADSys.GetAnyDCName
Set objShell = Nothing
Set objNetwork = Nothing
Set objADSys = Nothing
これ、結構有名なスクリプトです。
これを、ADのグループポリシーに設定してやります。
ADの、設定したOUをクリックし、[操作]→[プロパティ]とクリック→[グループポリシー]タブをクリック。
[グループポリシー」で[ユーザの構成]→[Windows の設定]→[スクリプト(ログオン/ログオフ)]
で、作ったスクリプトを指定してやります。
実はこれだけではだめで、イベントビューアに書き込むときにエラーになってしまいます。
マイクロソフトに設定がありますので
そっちを参考にします。
こちらも参考になるかもしれません。
これで、どうなるかというと、ユーザーがドメインにログインもしくはログオフするたびに、サーバーのイベントビューア(アプリケーション)にログが書き込まれるようになります。
ソースがWSHなので、それでフィルターをかけてやれば一応、見ることができます・・・・。
さて、ここからが問題。
イベントビューワーの使いにくいこと使いにくいこと。
一覧にしてみることができない、とかエクセルに変換しにくとかいろいろ。
フリーソフトでも、イベントビューワーのログを一覧形式にして見やすくするものが出ていますが、あともう一歩!というものがほとんど。皆さん苦労しているんです。
で、以外に役に立つのが、マイクロソフトのLogParser(ログパルサー)。
ここの記事で見つけました。
コマンドで使えるということは、batにしてタスクに仕込んでおけば、勝手にログを収集しテキストに出力することも可能です。
下のコマンドは、ログパルサーで先ほどのスクリプトのログを取得し、c:\logにlogin.csvに書き込みます。で、取得した日付にリネームするというもの。WSHはログイン、ログオフスクリプトでしか使用していないので、それを抽出条件としました。
LogParser -i:EVT "SELECT TimeGenerated,EventTypeName,ComputerName,Message INTO 'C:\log\login.csv' FROM Application WHERE SourceName = 'WSH' AND TimeGenerated >= TO_LOCALTIME( SUB(SYSTEM_TIMESTAMP(),TIMESTAMP('2','d')))"
REM BACKUP
SET DT=%date:~-10%
set FNAME=C:\log\%DT:~0,4%%DT:~5,2%%DT:~8,2%-login.csv
copy C:\log\login.csv "%FNAME%"
これを夜中の日付が変わるちょっと前に実行するようにタスクにしこみます(23時55分とか)。
すると結果はこうなります。
TimeGenerated,EventTypeName,ComputerName,Message
2009-04-18 09:07:07,Success Audit event,"コンピューター名",<Logon> ユーザ"ユーザー名" が、ドメイン"ドメイン名"にログオンしました。
2009-04-18 15:10:10,Success Audit event,"コンピューター名",<Logoff> ユーザ"ユーザー名" が、ドメイン"ドメイン名"にログオフしました。
csvなのでエクセルでの管理ができるというもの。
中小規模の企業はこれで十分かもしれませんね。
このログパルサー(LogPrser)。使い込めばもっと便利なログ取得に使えます。
PR