🐧 Linux 総合学習プラットフォーム
セキュリティ/権限強化 ・ 中級

ログで異変に気づく(last・lastb・journalctl)

不正アクセスは、多くの場合ログに痕跡を残します。ログイン履歴を見るlast、ログイン失敗を見るlastb、いま誰が使っているか分かるwやwho、認証ログを読むjournalctlを使いこなせば、異変の兆候に早く気づけます。この記事では、これらのコマンドの読み方と、深夜の大量失敗や見慣れないIPといった危険サインの見分け方を解説します。

不正アクセスは、成功したものも失敗したものも、たいていログにその痕跡を残す。ログを読む習慣があるかどうかで、異変への気づきの早さがまったく変わってくる。

🔗
たとえログは、建物の入退室記録簿のようなものだ。普段は誰も見返さないが、何かが起きたときに真っ先に確認する場所であり、日頃から目を通していれば「いつもと違う」にすぐ気づける。

📜 認証ログの場所

ログイン試行などの認証に関わる記録は、ディストリビューションによって置き場所が異なる。Debian/Ubuntu系では /var/log/auth.log にテキストとして残ることが多く、systemdを採用した環境全般では journalctl コマンドでシステムログをまとめて確認できる。

認証関連のログだけをjournalctlで絞り込む例。 $ journalctl -u sshd --since today sshdサービスの、今日分のログだけを表示できる。
💡
ポイント/var/log/auth.log はテキストファイルなのでlessやgrepでそのまま読める。journalctlはsystemdが管理するログをまとめて検索・絞り込みできる点が強みだ。どちらも「認証の記録を追う」という目的は同じになる。

🕰️ lastでログイン履歴、lastbで失敗履歴

ログインが成功した記録を時系列で見せてくれるのがlastコマンドだ。誰が、いつ、どこから(IPアドレスや端末)ログインしたかが一覧で分かる。

直近のログイン履歴を確認する例。 $ last -n 10 user pts/0 203.0.113.10 Wed Jul 1 21:03 still logged in admin pts/1 198.51.100.5 Wed Jul 1 09:12 - 09:45 (00:33) 直近10件のログイン記録が新しい順に並ぶ。

一方、ログインに失敗した記録を見せてくれるのがlastbだ。名前の通りlastの「bad」版で、パスワードを間違えた・存在しないユーザー名を試みたといった失敗の試行が並ぶ。これは総当たり攻撃の痕跡を見つけるのに特に役立つ。

last成功したログイン履歴誰が・いつ・どこからlastb失敗したログイン試行総当たり攻撃の痕跡候補
つまずきlastbの実行にはroot権限が必要な環境が多い(対象のログファイルがroot以外に読めない設定になっているため)。sudoを付けて実行する。

👀 今誰がいるか、wとwho

過去の履歴ではなく「今この瞬間」誰がログインしているかを知りたいときは、wやwhoコマンドを使う。whoはログイン中のユーザー名・端末・接続元をシンプルに一覧表示し、wはそれに加えて、各ユーザーが今何のコマンドを実行しているか、CPU負荷の状況まで表示してくれる。

コツ見慣れないユーザー名や、心当たりのない時間帯のログインをwやwhoで見つけたら、まずlastで過去の同じユーザーの履歴も遡って確認する習慣をつけると良い。
今ログインしている全員の状況を一覧する例。 $ w 21:10:03 up 5 days, 3:20, 2 users, load average: 0.08, 0.05, 0.01 USER TTY FROM LOGIN@ IDLE WHAT admin pts/0 203.0.113.10 21:03 0.00s w 負荷状況と合わせて誰が何をしているかまで一目で分かる。

🔍 sshdの失敗ログの読み方

SSH経由の攻撃はログに独特のパターンを残す。よく見る文言に Invalid user と Failed password の2つがある。

Invalid userは、そもそもサーバー上に存在しないユーザー名でログインを試みた記録だ。admin・test・rootなど、よくある名前を機械的に総当たりしている痕跡であることが多い。一方Failed passwordは、実在するユーザー名に対してパスワードが違った記録で、こちらは対象を絞った攻撃の可能性がある分、より注意が要る。

sshdの失敗ログの一例(journalctlで抽出)。 $ journalctl -u sshd | grep 'Failed password' Jul 1 03:14:02 host sshd[1234]: Failed password for invalid user admin from 198.51.100.20 port 51000 ssh2 知らないIPから深夜に集中していれば、総当たり攻撃を疑うサインになる。

🚨 異常の兆候

1件2件のログイン失敗は、誰でも打ち間違いで起こしうる。だが、深夜帯に同じIPから大量の失敗が並ぶ、普段アクセスのない国のIPからの試行が続く、といったパターンは明確な異常のサインだ。

💡
ポイント「量」と「時間帯」と「地域」の3点を意識してログを眺めると、単なる打ち間違いと組織的な攻撃の違いが見分けやすくなる。
単なる打ち間違い1〜2件・自分のIP日中の作業時間帯攻撃の兆候大量・知らないIP深夜帯に集中存在しないユーザー名

こうした兆候を見つけたら、既存トピックのfail2banのような仕組みで自動的に一定回数の失敗でIPを締め出す対策や、SSH鍵認証への一本化が有効な打ち手になる。

🗂️ auditdの存在(紹介レベル)

last・lastb・journalctlは「誰がログインしたか」を追うのに向いているが、「どのファイルが読まれた・書き換えられたか」まで細かく追いたい場合は、auditdという監査専用の仕組みがある。特定のファイルやシステムコールを監視対象に指定し、アクセスがあるたびに詳細な記録を残せる。

つまずきauditdは設定次第で記録量が膨大になり、扱いにも専門知識が要る。ここでは「そういう仕組みがある」という存在の紹介にとどめ、実際の設定は必要になった時点で改めて学ぶのがよい。

まずはlast・lastb・journalctlの3つだけでも定期的に眺める習慣をつけ、物足りなくなったらauditdの導入を検討する、という段階的な進め方で十分だ。

ログを読む習慣は、地味だが最も裏切らない防御だ。lastとlastbで人の出入りを、journalctlで詳細を、wとwhoで今この瞬間を、それぞれ確認できるようにしておこう。

この項目に出てくる用語

認証ログにんしょうろぐ
ログイン試行や権限昇格など、認証に関わる操作を記録したログ。
auditdおーでぃっとでぃー
特定のファイルやシステムコールへのアクセスを詳細に記録する監査の仕組み。

関連コマンド

last

▶ 学習アプリでこの続きを学ぶ・演習する