Windows でローカル ログオンの成功と失敗を監視する方法

Windowsマシンに誰がいつログオンしたかを把握するのは、特に事後的に追跡しようとすると、しばしば複雑で厄介な作業になります。ドメインログにアクセスしたくない(面倒な作業です)場合は、ローカルイベントログから直接情報を取得する方が簡単そうに思えるかもしれません。最近のログオンアクティビティを急いで見つけたい場合や、新品のWindows PCを誰が使っているのか知りたい場合は、このガイドが役立つかもしれません。完璧な方法ではありませんが、多くの場合は有効で、ローカルユーザーのアクティビティを理解するのに役立ちます。

Windowsでユーザーログインを追跡する方法:簡単な修正方法

Windowsでユーザーログオン監査ポリシーを有効にする

まず、追跡機能をオンにする必要があります。これにより、Windows はユーザーがログインしたことを記録します。イベントログに有用な情報が何も表示されないのは、このためです。スタンドアロンマシンまたはドメイン環境では、ポリシースイッチをいくつか切り替えるだけで済みます。通常は、ローカルグループポリシーエディターを使用しますが、複数のコンピューターを管理している場合はグループポリシー管理コンソールを使用します。簡単に説明します。

  • 1台のPCだけの場合は、 gpedit.mscスナップインを開きます。ドメイン全体の場合は、gpmc.mscを開きます。
  • [コンピューターの構成] > [ポリシー] > [Windows の設定] > [セキュリティの設定] > [詳細な監査ポリシーの構成] > [監査ポリシー] > [ログオン/ログオフ]に移動します。
  • 「監査ログオン」「監査ログオフ」のチェックボックスをオンにして、両方を有効にしてください。ログイン成功のみを重視する場合は、「成功」のチェックボックスをオンにしてください。
  • 私が見たある設定では、Windows がポリシーをすぐに適用しないという奇妙な挙動をすることがあります。そのため、再起動するか、ターゲットマシンで同様のコマンドをgpupdate /force実行すると、設定が保持される可能性があります。

注: 一部のマシン、特にセキュリティポリシーが厳しいマシンでは、ポリシー変更後にログが蓄積されるまでに少し時間がかかる場合があります。この点にご注意ください。

イベントビューアーでセキュリティログにアクセスする

ログ記録をオンにしたら、イベントビューアー( )で実際のデータを確認しますeventvwr.msc。ここには興味深い情報が含まれています。誰かがログインすると、4624イベントがポップアップ表示され、ユーザー名、ドメイン、ログオンの種類などの詳細が表示されます。

  • イベント ビューアーを開きます。
  • Windows ログ > セキュリティに移動します。
  • 右クリックして、「現在のログをフィルター」を選択します。
  • イベント ID4624ボックスに入力し、[OK] をクリックします。

次に、ログオンタイプ2のエントリに注目してください。これはローカルの対話型ログインです。説明には通常「アカウントが正常にログオンされました」と表示され、ユーザー名とドメインが表示されます。例:

New Logon: Security ID: WOSHUB\a.muller Account Name: a.muller Account Domain: WOSHUB

失敗した試行やその他のログイン詳細に関する簡単な統計が必要な場合は、次の一般的なイベント ID を参照してください。

イベントID 説明
4624 ログイン成功
4625 ログインに失敗しました
4648 明示的な資格情報の使用(資格情報の受け渡しなど)
4634 ログオフイベント
4647 ユーザーが開始したログオフ

ただし、ログにはネットワーク共有やスケジュールされたタスクなど、ローカル以外のアクティビティも含まれるので注意してください。特にローカルの物理ログインだけを確認したい場合は、ログオンタイプ2でフィルタリングすると絞り込みができます。

PowerShell によるログインのフィルタリング

ここがちょっと巧妙なところです。ログを手動で確認する代わりに、PowerShellのGet-WinEventを使えばクエリを簡単にスクリプト化できます。以下は、最近の対話型ログイン( LogonType 2 )を一覧表示する簡単な例です。

$query = @' <QueryList> <Query Id='0' Path='Security'> <Select Path='Security'> *[System[EventID='4624'] and EventData[Data[@Name='LogonType']='2'] ] </Select> </Query> </QueryList> '@

このスクリプトは、セキュリティイベントログで成功したローカルログインを検索します。時間フィルターを追加することで、さらに細かく調整できます。

| Where-Object {$_. TimeCreated -gt (Get-Date).AddDays(-3)}

または、リモート コンピューターから情報を取得します。複数のマシンのトラブルシューティングを行う場合に便利です。

'machine1', 'machine2' | ForEach-Object { Get-WinEvent -ComputerName $_ -FilterXml $query | Select-Object @{n='User';e={$_. Properties[5].Value}}, @{n='Domain';e={$_. Properties[6].Value}}, @{n='Time';e={$_. TimeCreated}} }

RPC が利用できない場合、またはリモート セッションがブロックされている場合は、次のようにInvoke-Commandにフォールバックできます。

Invoke-Command -ComputerName 'machine1', 'machine2' {Get-WinEvent -FilterXml $using:query | Select-Object @{n='User';e={$_. Properties[5].Value}}, @{n='Domain';e={$_. Properties[6].Value}}, @{n='Time';e={$_. TimeCreated}} }

総じて言えば、膨大なログを手動で確認しなくても、誰がそのPCを使用しているかを把握できる、なかなか良い方法です。特にトラブルシューティングをしている場合や、最近のアクティビティを知りたい場合には、かなり便利です。

まとめ

  • ログオン/ログオフの監査ポリシーを有効にします。
  • イベント ビューアーのセキュリティ ログでイベント ID 4624 を確認します。
  • ローカル ログインを見つけるには、ログオン タイプ 2 をフィルターします。
  • より正確なクエリやリモート クエリを実行するには、PowerShell コマンドを使用します。

まとめ

Windowsでのユーザーログインの追跡は、適切なポリシーを導入すれば、それほど難しいことではありません。監査ポリシー、イベントビューアーのフィルタリング、PowerShellスクリプトを組み合わせれば、かなり簡単に管理できます。すべてが完璧というわけではありません。Windowsのログはノイズが多く、フィルターをいろいろと調整する必要がある場合もあります。しかし、一度設定すれば、最近のユーザーアクティビティの適切なスナップショットを取得できます。このツールが、謎のログインを追跡したり、誰がWindowsを使用しているかを確認したりするのに役立つことを願っています。