journalctl を使った Kali Linux ログ分析

Kali LinuxBeginner
オンラインで実践に進む

はじめに

この実験(Lab)では、強力な journalctl ツールやその他のコマンドラインユーティリティを使用して、Kali Linux 環境におけるログ分析の基本を学びます。初心者向けに設計されており、システム管理とデバッグの基本的なスキルに焦点を当てた実践的な体験を提供します。LabEx VM 上の Kali Linux コンテナ内で、システムログへのアクセス、表示、分析を行う方法を学びます。

段階的な実践演習を通して、/var/logのようなディレクトリに保存されているシステムログを表示し、特定のサービスでログをフィルタリングし、エラーを検索し、さらなる分析のためにログをエクスポートします。すべての操作は、ターミナルを開くと自動的に入る Kali Linux コンテナのシェル内で行われます。この実験(Lab)は、システムイベントの監視とトラブルシューティングのスキルを構築するための制御された環境を提供します。

Kali Linux でのシステムログの表示

この最初のステップでは、LabEx VM 上の Kali Linux コンテナ内でシステムログを表示する方法を学びます。システムログは、Linux システム上の問題の監視とトラブルシューティングに不可欠であり、イベント、エラー、およびアクティビティを記録します。初心者にとって、これらのログにアクセスする方法を理解することは、システム管理の基礎的なスキルです。

LabEx VM 環境でターミナルを開くと、自動的に Kali Linux コンテナのシェルに接続されます。コンテナを手動で起動したり、シェルに入ったりする必要はありません。環境はすでに設定されています。この実験(Lab)のすべての操作は、このコンテナのターミナル内で行われます。

Linux システムは、/var/logのようなディレクトリにログを保存します。一般的なログファイルには、一般的なシステムメッセージ用の/var/log/syslogや、認証関連イベント用の/var/log/auth.logなどがあります。これらのファイルの内容を簡単なコマンドで表示することから始めましょう。

ターミナルで次のコマンドを実行して、/var/log/syslogファイルの最後の 10 行を表示します。

tail -n 10 /var/log/syslog

このコマンドは、tailを使用して、ログファイルの最新のエントリを表示します。出力は次のようになりますが、正確な内容はシステムの活動によって異なります。

Oct 15 10:22:34 kali-container kernel: [ 1234.567890] some kernel message
Oct 15 10:23:01 kali-container cron[1234]: (CRON) INFO (pidfile fd = 3)
...

各行には通常、タイムスタンプ、ホスト名、サービスまたはプロセス名、およびイベントの詳細が含まれています。この出力は、システムログに正常にアクセスしたことを確認します。

デバッグに役立つ、新しいログエントリをリアルタイムで継続的に監視するには、次のコマンドを実行します。

tail -f /var/log/syslog

これにより、新しいエントリが追加されるたびに表示されます。監視を停止するには、Ctrl + Cを押してターミナルプロンプトに戻ります。

次に、ログイン試行やその他のセキュリティイベントを記録する認証ログファイル/var/log/auth.logを確認しましょう。次のコマンドを実行します。

tail -n 5 /var/log/auth.log

出力は次のようになり、認証関連のアクティビティが表示される場合があります。

Oct 15 10:20:01 kali-container sudo: root : TTY=pts/0 ; PWD=/root ; USER=root ; COMMAND=/bin/bash
...

このステップでは、ログの表示を紹介します。これは基本的ですが、不可欠なスキルです。次のステップでは、これらのログをフィルタリングし、特定の情報を分析することで、このスキルをさらに発展させます。

ログ表示のための journalctl のインストールと使用

tailのような基本的なコマンドを使用してログを表示する方法を学んだので、より強力なツールであるjournalctlに進みましょう。このツールは、Kali Linux を含む最新の Linux ディストリビューションのシステムおよびサービスマネージャーであるsystemdによって管理されるログを照会および表示するために使用されます。初心者にとって、journalctlを学ぶことは重要です。なぜなら、詳細なシステムログにアクセスするための構造化された方法を提供するからです。

すでに Kali Linux コンテナのシェル内(ターミナルを開くと自動的に入る)にいるため、手動で移動したり、何かを開始したりする必要はありません。ただし、journalctlは、最小限のコンテナ設定ではプリインストールされていないか、完全に機能していない可能性があるため、パッケージリストを更新し、必要なコンポーネントをインストールして、必要なツールが利用可能であることを確認します。

パッケージリストを更新し、必要に応じてsystemdコンポーネントをインストールするには、次のコマンドを実行します。

apt update
apt install -y systemd

これらのコマンドは、パッケージリポジトリを更新し、journalctlを含むsystemdをインストールします。インストールが完了するまで待ちます。これにはしばらく時間がかかる場合があります。

インストールが完了したら、journalctlを使用してシステムログを表示できます。最新のログエントリを表示するには、次のコマンドを実行します。

journalctl -n 10

-n 10オプションは、出力を最後の 10 行に制限します。出力は次のようになりますが、システムの活動によって異なります。

Oct 15 10:25:01 kali-container systemd[1]: Starting system activity...
Oct 15 10:25:02 kali-container systemd[1]: Started system activity...
...

この出力は、タイムスタンプ、サービス名、およびメッセージを含むログエントリを示しています。このようなものが表示された場合、journalctlが正しく動作していることを意味します。出力が表示されない場合やエラーが発生した場合は、コンテナ環境内のログデータが限られていることが原因である可能性があります。これは、この実験(Lab)の設定では正常です。

tail -fと同様に、ログをリアルタイムで表示するには、次のコマンドを実行します。

journalctl -f

これにより、新しいログエントリが継続的に表示されます。監視を停止してターミナルプロンプトに戻るには、Ctrl + Cを押します。

このステップでは、基本的なファイル表示よりも高度な、ログを表示するためのjournalctlの使用方法を理解するのに役立ちます。次のステップでは、特定のサービスに対してこれらのログをフィルタリングする方法を学びます。

journalctl を使用したサービス別ログのフィルタリング

journalctlでログを表示する能力を基盤として、このステップでは、特定のサービスに関連するエントリを表示するようにログをフィルタリングすることに焦点を当てます。初心者にとって、フィルタリングは重要なスキルです。なぜなら、システムログにはさまざまなプロセスからのメッセージが混在していることが多く、関連情報を分離することで、特定の問題のトラブルシューティングに役立つからです。

ターミナルを開いたときに自動的に入った Kali Linux コンテナのシェル内で引き続き作業しています。手動でのナビゲーションやコンテナの起動は必要ありません。Linux でスケジュールされたタスクを管理するcronなど、特定のサービスのログをフィルタリングするためにjournalctlを使用します。これにより、無関係なデータに圧倒されることなく、単一のコンポーネントに関連するログに集中できます。

cronサービスのログをフィルタリングするには、次のコマンドを実行します。

journalctl -u cron

-uオプションは、フィルタリングするユニット(サービス)を指定します。この場合はcronです。出力には、システムの活動に応じて、次のようなcronサービスに特に関連するログが表示されます。

Oct 15 10:30:01 kali-container cron[1234]: (CRON) INFO (pidfile fd = 3)
Oct 15 10:30:02 kali-container cron[1235]: (CRON) STARTUP (fork ok)
...

この出力は、タイムスタンプやイベントの詳細を含む、cron関連のエントリのみを表示します。出力が表示されない場合は、cronサービスがこのコンテナで最近ログを生成していないことを意味する可能性がありますが、学習目的には問題ありません。

cronログが利用できない場合、または別のサービスを調べたい場合は、SSH 接続を処理するsshd(インストールされている場合)のフィルタリングを試すことができます。まず、次のコマンドを実行して、openssh-serverがインストールされていることを確認します。

apt install -y openssh-server

インストールが完了するまで待ちます。次に、このコマンドでsshdのログをフィルタリングします。

journalctl -u ssh

サービスがアクティブな場合、出力には SSH 関連のイベントが表示される場合があります。出力が表示されなくても、フィルタリングプロセスを学習することが目的であるため、この実験(Lab)では問題ありません。

このステップでは、journalctlを使用して、ログデータを特定のサービスに絞り込む方法を学びます。次のステップでは、これらのログ内でエラーを検索して、潜在的な問題を特定する方法を学びます。

journalctl を使用したエラーログの検索

サービスごとにログをフィルタリングする方法を学んだので、このステップでは、journalctlを使用してシステムログ内のエラーを検索する方法を説明します。初心者にとって、ログ内のエラーを特定することは、トラブルシューティングに不可欠です。なぜなら、ログにはサービスやアプリケーションの問題を示すメッセージが頻繁に含まれているからです。このスキルは、注意が必要な問題をすばやく特定するのに役立ちます。

ターミナルを開いたときに自動的にアクセスする Kali Linux コンテナのシェル内で引き続き操作しています。追加のセットアップやナビゲーションは必要ありません。journalctlを使用して、優先度レベルに基づいてログをフィルタリングすることにより、エラーメッセージを検索します。エラーは通常、特定の重大度でログに記録されます。

journalctlでは、ログエントリは優先度レベル別に分類され、3はエラー(重大な問題)を表し、4は警告を表します。すべてのログでエラーメッセージを検索するには、次のコマンドを実行します。

journalctl -p 3

-p 3オプションは、優先度レベル 3(エラー)のエントリのみを表示するようにログをフィルタリングします。出力は、システムの活動に応じて、次のようになる場合があります。

Oct 15 10:35:10 kali-container some-service[5678]: error: failed to initialize module
...

この出力は、タイムスタンプと詳細を含むエラーメッセージを表示します。出力が表示されない場合は、ログにこの優先度レベルの最近のエラーがないことを意味します。これは、制御されたコンテナ環境では一般的です。

エラーとともに警告を含めるには、次のコマンドを実行して、優先度レベル 3 と 4 を検索できます。

journalctl -p 3..4

このコマンドは、エラーと警告の両方を表示します。出力には、次のような追加の行が含まれる場合があります。

Oct 15 10:36:15 kali-container another-service[7890]: warning: connection timeout
...

出力が表示されなくても、検索プロセスを学習することが目的であるため、この実験(Lab)では問題ありません。このステップでは、journalctlを使用してログ内の重大な問題を特定する能力を身につけます。次のステップでは、これらのログをエクスポートしてさらに分析する方法を学びます。

journalctl を使用したログのエクスポートと分析

このステップでは、journalctlを使用してシステムログをさらに分析するためにエクスポートする方法を学びます。ログの表示、フィルタリング、検索を行った前のステップに基づいて、エクスポートにより、特定のログデータをファイルに保存できます。これは、詳細な調査や、トラブルシューティングのために他の人と共有するのに役立ちます。初心者にとって、このスキルは、元のログに繰り返しアクセスすることなく、調査結果を文書化するのに役立ちます。

ターミナルを開いたときに自動的に入った Kali Linux コンテナのシェル内で引き続き作業しています。手動でのコンテナ起動やナビゲーションは必要ありません。journalctlを使用してログを抽出し、/rootディレクトリ内のファイルに出力をリダイレクトして、簡単にアクセスできるようにします。

すべての最近のログを/rootディレクトリ内のsystem_logs.txtという名前のファイルにエクスポートしてみましょう。次のコマンドを実行します。

journalctl -n 50 > /root/system_logs.txt

-n 50オプションは、出力を最後の 50 個のログエントリに制限し、>記号は出力を指定されたファイルにリダイレクトします。ファイルに保存されているため、ターミナルには出力が表示されません。ファイルが作成され、データが含まれていることを確認するには、次を実行します。

cat /root/system_logs.txt

出力には、タイムスタンプとメッセージを含め、journalctl -n 50で表示されたものと同様の保存されたログエントリが表示されます。

次に、cronなどの特定のサービスでフィルタリングされたログを、cron_logs.txtという名前のファイルにエクスポートしてみましょう。次のコマンドを実行します。

journalctl -u cron > /root/cron_logs.txt

これにより、cron関連のログのみが/root/cron_logs.txtに保存されます。次を実行して、内容を確認します。

cat /root/cron_logs.txt

出力には、利用可能な場合はcronサービスのログが表示され、エクスポートが成功したことを確認します。

最後に、エラーログをerror_logs.txtという名前のファイルにエクスポートしてみましょう。次のコマンドを実行します。

journalctl -p 3 > /root/error_logs.txt

これにより、エラーメッセージが指定されたファイルに保存されます。次を使用して内容を確認します。

cat /root/error_logs.txt

この出力には、エラーログが存在する場合に表示されます。このステップを完了することにより、後で確認するためにログデータを保存する方法を学びました。これは、システム管理とデバッグの実用的なスキルです。

まとめ

この実験(Lab)では、journalctlツールと基本的なコマンドラインユーティリティを使用して、Kali Linux でのログ分析の基本を学びました。まず、tailのようなコマンドを使用して、/var/logディレクトリ内のシステムログを表示することから始め、より構造化されたログアクセスにjournalctlの使用へと進みました。実践的な手順を通して、サービスごとにログをフィルタリングし、エラーを検索し、LabEx VM 上の Kali Linux コンテナ内でさらに分析するためにログをエクスポートしました。これらの基礎的なスキルは、Linux 環境での効果的なシステム管理とデバッグに役立ちます。