「あれ…?サーバーがなんか重い…」「もしかして、誰か不正アクセスしてる!?」 「linux ログって言われても、どのファイルを見ればいいのか全然わからない!」
ある日突然、あなたのLinuxサーバーがそんな状態になって、スマホで慌てて「linux ログ 確認」「linux ログイン履歴 見方」なんて検索して、このページにたどり着いてくれたんじゃないでしょうか。
もしかして、システムがエラーを吐いてるみたいだけど、ログファイルが巨大すぎて開けなくてイライラしていませんか…? それとも、「linux 誰が何をしたか」っていう「操作ログ」を追跡しなきゃいけないのに、もう途方に暮れていたり…?
わかります、わかります!私も最初は全く同じでした。 「/var/logって何!?」「ファイルがいっぱいありすぎて、どれが重要なの!?」って、もうパニックになっちゃいますよね😥
でも、大丈夫です!
その焦る気持ち、よーくわかります。でも、ログの見方は一度覚えれば怖くありません!
Linuxのログ管理は、システム管理者にとって「必須スキル」ですが、確認するファイルや使うコマンドは、実はだいたい決まっているんです😲
この記事は、そんな「ログファイル地獄」に陥ってしまったあなたを救うための、安全で効率的な「ログ確認の完全ガイド」です🕵️♀️✨
主要なログファイルの場所や種類といった基本のキから、「less」や「tail」といった必須コマンドの使い方、さらには「journalctl」っていう現代の標準コマンド、「linux ログイン履歴」を追跡する「last」コマンドまで。 私と一緒に、一つずつ冷静に確認していきましょうね🥰
Linuxログの基本:なぜ重要で、どこにあるのか?
まず、Linuxのログがなんでそんなに大事なのか、そして、その大事なログたちは大体どこに隠れているのか、っていう基本的な知識から押さえていきましょう。
ログの重要性
Linuxのログファイルっていうのは、システムやアプリが動いた「証拠(あかし)」そのものなんです。 この証拠を分析することで、私たちは主に3つのことができるようになります。
1. トラブルシューティング: システムやアプリに何か障害(エラー)が起こった時、ログファイルには「エラーメッセージ」や「その直前に何をしていたか」が、しっかり記録されています。 これらの情報を読み解くことで、問題の原因を特定して、すばやく復旧作業に移れるんですね。 「なぜかWebサーバーが停止した」「メールが送信できない」みたいな問題の解決には、ログの分析が絶対に欠かせません!
2. セキュリティ監査:
ログは、システムの安全を守るための、すっごく重要な情報源です。
例えば、認証ログ(secureやauth.log)を監視することで、「誰が」「いつ」ログインに成功したか、あるいは失敗したかを、ぜーんぶ把握できちゃいます。
怪しいIPアドレスから、何度も何度もログインしようとしている(ブルートフォースアタック)のを見つけて、対策するためにもログが使われるんですよ。
3. システム監視とパフォーマンス分析: ログをずーっと監視することで、システムがちゃんと元気に動いているかを確認できます。 それに、リソース(CPUとかメモリとか)の使用状況や、特定の処理にどれくらい時間がかかってるかをログから分析して、システムのパフォーマンスを良くしたり、将来のためにサーバーを強くしたりする計画にも役立てられるんです。
ログファイルはどこにある?
Linuxシステムでは、ログファイルの多くは「/var/log」っていうディレクトリ(フォルダ)の中に、まとめて保存されています。
ls -l /var/log ってコマンドを打ってみると、いろんなログファイルやサブディレクトリが、うわーっ!て出てくるのが確認できるはずです。
ただし、すべてのログがここにある!っていうわけじゃなくて、一部のアプリ(特に後から入れたやつ)は、独自に/opt/の中とか/usr/local/の中にログを保存したり、設定ファイルでログの場所を変えられたりすることもあります。
でもでも、まずは「Linuxのログは、だいたい /var/log にある!」って覚えておけば、間違いありません!
主要なログファイルの種類と役割
/var/log の中にはたくさんのログファイルがありますけど、特に重要で、私たちがよく確認するファイルっていうのは、だいたい決まってるんです。
ここでは、代表的なログファイルとその役割について解説しますね。 ディストリビューション(Red Hat系とかDebian系とか)によってファイル名がちょっとだけ違うことがあるので、両方書いておきます!
主要ログファイル一覧表
| ログファイル名 (Red Hat系/CentOSなど) | ログファイル名 (Debian系/Ubuntuなど) | 内容・役割 |
|---|---|---|
messages | syslog | システム全体の動作に関する汎用的なメッセージログ。カーネル、各種サービス、デーモンなどからの情報が記録される、最も基本的で重要なログの一つ。 |
secure | auth.log | 認証やセキュリティに関するログ。SSHやsudoコマンドによるログインの成功・失敗、ユーザーの切り替え(su)などが記録される。不正アクセスの調査では真っ先に確認するファイル。 |
dmesg | dmesg | Linuxカーネルが起動時に出力するメッセージ(カーネルリングバッファ)を表示するためのログ。ハードウェアの認識状態やドライバのエラーなどを確認する際に使用する。(dmesgコマンドで閲覧) |
cron | cron.log | 定期実行タスク(cronジョブ)の実行履歴ログ。cronが正しく実行されたか、エラーが出ていないかを確認する。 |
maillog | mail.log | メールサーバー(Postfix, Sendmailなど)の動作ログ。メールの送受信履歴やエラーが記録される。 |
boot.log | boot.log | システムの起動シーケンスに関するログ。起動時にどのサービスが正常に開始(または失敗)したかを確認できる。 |
httpd/ | apache2/ | Apache Webサーバーのログが格納されるディレクトリ。アクセスログ(access_log)とエラーログ(error_log)が分離されているのが一般的。 |
nginx/ | nginx/ | Nginx Webサーバーのログが格納されるディレクトリ。同様にアクセスログ(access.log)とエラーログ(error.log)がある。 |
yum.log | apt/history.log | パッケージ管理システム(YUMやAPT)によるソフトウェアのインストール、アップデート、削除の履歴。 |
wtmp | wtmp | ログイン・ログアウトの履歴。バイナリファイルのため、lastコマンドで閲覧する。(詳細は後述) |
btmp | btmp | ログイン失敗の履歴。バイナリファイルのため、lastbコマンドで閲覧する。(詳細は後述) |
これらのログファイルの中身を確認することこそが、システム管理の第一歩になるんですよ!
【基本の「き」】巨大なログ閲覧の必須コマンド less
ログファイルっていうのは、システムが動いている限り、ずーっと書き足され続けていきます。 なので、数GB(ギガバイト)とか、とんでもなく巨大なサイズになっちゃうことも珍しくないんです😥
こんな巨大なファイルを、catコマンドやテキストエディタ(viとかnano)で開こうとしちゃうと…。
大量のメモリを使ってシステムが不安定になったり、開くだけでめちゃくちゃ時間がかかったりする可能性があります。
そこで登場するのが、less コマンドです!
less は、ファイルをぜーんぶ読み込むんじゃなくて、ちょっとずつ読み込みながら、私たちが見やすいように表示してくれる、すっごく賢いコマンド(ページャ)なんです。
less の基本的な使い方
使い方はとってもカンタンで、less [ファイル名] って入力するだけです。
less /var/log/messages
これを実行すると、ターミナルの画面いっぱいに、ログファイルの先頭部分が表示されます。 この状態では、まだファイル全体を読み込んでるわけじゃないので、どんなに巨大なファイルでも一瞬で開くことができるんです!すごくないですか?
less の便利な操作方法
less が「必須コマンド」って呼ばれる理由は、その高機能な操作方法にあります。
ファイルを開いた後、いろんなキー操作でファイルの中を自由自在に移動したり、検索したりできるんですよ。
以下に、最低限これだけは覚えておいてほしい、less の主要な操作キーをまとめますね!
| キー | 操作内容 | 解説 |
|---|---|---|
f または Space | 1画面分、下(ファイルの末尾方向)へ進む | 最もよく使う操作の一つ。 |
b | 1画面分、上(ファイルの先頭方向)へ戻る | 読みすぎた場合に便利。 |
j または Enter | 1行分、下へ進む | 微妙な位置調整に使います。 |
k | 1行分、上へ戻る | 微妙な位置調整に使います。 |
g (Go) | ファイルの先頭へ移動する | ログを最初から見直したい時に。 |
G (Go) | ファイルの末尾へ移動する | 最新のログを(tailのように)確認したい時に。 |
/キーワード | 文字列の前方検索(下方向) | less を開いた状態で / を押し、検索したい文字列(例: ERROR)を入力して Enter を押します。 |
?キーワード | 文字列の後方検索(上方向) | / とは逆方向に検索します。 |
n (Next) | 次の検索結果へ移動する | / や ? で検索した後、次の候補にジャンプします。 |
N (Next) | 前の検索結果へ移動する | n とは逆方向にジャンプします。 |
q (Quit) | less を終了する | q を押すと、less が終了し、元のプロンプトに戻ります。 |
▼実践的な使い方:▼
例えば、/var/log/secure の中で、特定のIPアドレス(例: 192.168.1.100)からのアクセス履歴を調査したいなーって時は、こんな感じで操作します。
less /var/log/secureでファイルを開きます。/192.168.1.100と入力してEnterを押します。- 最初に見つかった該当箇所にピョン!とジャンプします。
nキーを押して、次の該当箇所へジャンプ、ジャンプ。Nキーで前の該当箇所に戻ったりもできます。- 調査が終わったら
qキーで終了!
こんな感じで、less コマンドを使えば、巨大なログファイルでもメモリを圧迫しないで、快適に調査を進めることができちゃいます。
「linux less コマンド」は、Linux管理者がいっちばん最初にマスターすべきコマンドの一つって言ってもいいくらいですよ!
【リアルタイム監視】ログの追跡に最強の tail コマンド
less が過去のログを「調査」するのにピッタリなのに対して、「今、まさに、何が起きてるの!?」っていうのを監視するのに特化したコマンドが tail です。
tail コマンドは、その名前の通り、ファイルの「末尾(しっぽ)」を表示するコマンドなんです。
tail の基本的な使い方
何もオプションを付けないで実行すると、ファイルの末尾10行を表示してくれます。
/var/log/messages の末尾10行を表示
tail /var/log/messages
表示する行数を指定したいなーって時は、-n オプションを使います。
/var/log/messages の末尾100行を表示
tail -n 100 /var/log/messages
tail の真骨頂:-f オプションによるリアルタイム監視
でも!tail コマンドの一番すごくて、一番大事な機能は、-f (follow) オプションなんです!
tail -f /var/log/messages
このコマンドを実行すると、tail はファイルの末尾を表示した後、終了しないで待機状態になります。
そして、そのファイルに新しい行が書き足されるたびに、その内容を即座に!リアルタイムで!画面に表示してくれるんです!
これって、例えば「今からWebサーバーにアクセスしてみるから、エラーログ(/var/log/httpd/error_log)に何か変なログが出ないか確認してて!」みたいな、リアルタイムでの動作確認やデバッグ作業で、もうとんでもない威力を発揮します💪
監視を終わりたい時は Ctrl + c を押せばOKです。
-F オプションとの違い
tail には -f とよーく似た -F オプションもあります。
tail -f: ファイルを「ファイルディスクリプタ」っていうので監視します。tail -F: ファイルを「ファイル名」で監視します。
この違いは、「ログローテーション」が発生した時にハッキリと現れます。
ログローテーションっていうのは、ログファイルが無限に大きくなっちゃうのを防ぐために、古いログを(例えば messages.1 みたいに)名前を変えて保存して、新しいログファイル(messages)を新しく作る仕組みのことです。
tail -f で監視してる途中で、このログローテーションが起きちゃうと、tail -f は名前が変わった古いファイル(messages.1)をずーっと追いかけ続けちゃって、新しくできたファイル(messages)に書き足されたログを検知できなくなっちゃうんです😥
一方、tail -F はファイル名で監視してるので、もし今見てるファイルがリネームされても、同じ名前の新しいファイルが作られたことを検知して、自動的にそっちの監視に切り替えてくれるんですよ!賢い!
✨結論✨
ログファイルの監視には、基本的に tail -F を使う方が安全で確実です!
(ただし、OSや tail のバージョンによっては -F が使えなかったり、-f が -F と同じ動作をするように改良されてたりする場合もありますよ。)
複数のファイルを同時に監視する
tail -f (または -F) は、複数のファイルをいっぺんに監視することも可能です。
システムログと認証ログを同時にリアルタイム監視
tail -f /var/log/messages /var/log/secure
こんな風に実行すると、どっちかのファイルに書き足しがあるたびに、ファイル名をヘッダ(==> /var/log/messages <== みたいな形式)で「こっちのファイルだよ!」って示しながら、書き足された内容を表示してくれます。便利ですよね!
tail と less の使い分け(実践編)
tail と less は、どっちも「linux ログ」を確認するための強力なツールですけど、その役割ははっきりと違います。
- less: 過去のログをさかのぼって「検索・調査」するためのコマンド。
- tail -f: 現在のログをリアルタイムで「監視・追跡」するためのコマンド。
この2つを、状況に合わせて使い分けることがすっごく重要なんです。
シナリオ1: 「昨日の夜中に起きたエラーの原因を探りたい」
この場合、必要なのは「過去の調査」ですよね。
less を使って該当のログファイル(例: /var/log/messages)を開いて、/(検索機能)を使ってエラーが起きた時間や、ERROR、Failed みたいなキーワードで検索するのが、一番効率的です!
シナリオ2: 「今、設定変更のテストをしている。正しく動作しているか確認したい」
この場合、必要なのは「現在の監視」です。
tail -f を使って関連するログファイル(例: /var/log/httpd/access_log)を監視状態にして、実際にテスト操作を行ってみて、思った通りのログが出力されるかを確認します。
組み合わせ技(パイプとgrep)
tail や less は、ほかのコマンドと組み合わせる(パイプ | で繋ぐ)ことで、さらにさらに強力なツールになっちゃいます!
1. grep で絞り込んでから less で見る
ログファイル全体は巨大だけど、「特定のエラーメッセージ(例: “Connection refused”)」だけを抜き出して、じーっくり見たい時ってありますよね。
grep "Connection refused" /var/log/messages | less
このコマンドは、まず grep が /var/log/messages の中から “Connection refused” っていう文字が含まれる行だけをぜんぶ抜き出して、その結果(抜き出された行だけ)を less に渡してくれます。
これのおかげで、ノイズ(関係ないログ)がなくなった状態で、less の検索機能やページ送り機能を使いながら調査できるんです!
2. tail の結果を grep で絞り込む
リアルタイム監視(tail -f)でも、特定のログだけを見たい時があります。
tail -f /var/log/secure | grep "Failed password"
こうすれば、/var/log/secure に書き足されるログのうち、”Failed password” っていう文字が含まれる行(つまり、ログイン失敗のログ)だけが、リアルタイムで表示されるようになります。これは便利!
3. tail で末尾N行を抽出し、less で見る
tail -f じゃなくて、単純に「最新のログ1000行だけを less でじっくり見たい」っていう場合もありますよね。
tail -n 1000 /var/log/messages | less
これは、less で開いてから G(末尾へ移動)を押すのとちょっと似てますけど、最初から対象を行末1000行に限定できるので、よりお手軽な場合がありますよ。
【現代の標準】journalctl でシステムログを集中管理 (systemd環境)
これまで紹介してきた tail や less は、/var/log の中にテキストファイルとして保存されたログ(昔ながらのSyslog)を扱うものでした。
でも、最近の主要なLinuxディストリビューション(CentOS 7以降とか, Ubuntu 15.04以降とか)の多くは、「systemd」っていうシステム管理デーモンを採用してるんです。
systemd は、ログ管理の仕組みとして「journald」っていうのを導入しました。
journald は、システムやアプリのログを、今までのテキストファイルじゃなくて、構造化された「バイナリ形式」で「ジャーナル」っていうたった一つのデータベース(通常は /run/log/journal/ とか /var/log/journal/)に、ぜーんぶまとめて管理するんです。
この journald が集めたログを、私たちが見たり、検索したり、監視したりするためのコマンドが「journalctl」なんです!
journalctl のメリット
- 一元管理:
/var/logの中に散らばってたログが、ぜんぶ一つのデータベースに集約されます。スッキリ! - 高速な検索: バイナリ形式でインデックス化されてるから、テキストログを
grepするより、すっごく高速に検索できるんです。 - 豊富なメタ情報: ログメッセージ本体だけじゃなくて、サービス名(ユニット名)とか、PID、UID、実行ファイルのパスみたいな詳しい「メタデータ」も一緒に記録されるので、もっと高度な絞り込みができちゃいます。
journalctl の基本的な使い方
今までのコマンドと比べる形で覚えると、分かりやすいですよ。
1. 全てのログを表示する(less /var/log/messages みたいな感じ)
journalctl
実行すると、古い順にすべてのログが less と同じ操作感(ページ送り、検索とか)で表示されます。(q で終了するのも同じ!)
2. リアルタイム監視(tail -f /var/log/messages みたいな感じ)
journalctl -f
tail -f と同じように、新しいログが書き足されるたびにリアルタイムで表示してくれます。
3. カーネルログを表示(dmesg みたいな感じ)
journalctl -k
または
journalctl --dmesg
journalctl の強力なフィルタリング機能
journalctl の本当のすごさは、この強力なフィルタリング機能にあるんです!
特定のサービス(ユニット)のログだけを表示
これが一番よく使う機能かもしれません!
例えば、Apache Webサーバー(httpd.service)のログだけを見たい時、今ままでは /var/log/httpd/error_log と access_log を別々に見る必要がありましたよね。
journalctl なら、以下のコマンド一発で、httpd に関連する全てのログ(標準出力、標準エラー出力もぜんぶ!)を、時系列でまとめて見ることができちゃうんです!
journalctl -u httpd.service
リアルタイムで監視する場合
journalctl -u httpd.service -f
時間で絞り込む
「昨日の15時から16時の間」とか「1時間前から今現在まで」みたいな指定もカンタンです。
1時間前から現在までのログ
journalctl --since "1 hour ago"
特定の日時以降
journalctl --since "2025-11-10 09:00:00"
特定の期間
journalctl --since "2025-11-09 15:00:00" --until "2025-11-09 16:00:00"
優先度(Priority)で絞り込む
エラーログだけ見たい!みたいに、ログの重要度で絞り込むこともできます。
エラー(error) レベル以上のログのみ表示
journalctl -p err
優先度は数字でも指定可能 (0:emerg, 1:alert, 2:crit, 3:err, 4:warning, 5:notice, 6:info, 7:debug)
journalctl -p 3
これらのフィルタは、ぜんぶ組み合わせて使うこともできますよ!
httpdサービスの、昨日以降のエラーログだけを表示
journalctl -u httpd.service --since "yesterday" -p err
systemd 環境では、/var/log/messages や secure への出力が止められて、journald にまとめられちゃってる場合もあります(設定によりますけど)。
まずは journalctl が使えるかを確認して、もし使える環境なら、積極的に journalctl を活用するのが、現代の標準的なログ確認方法になります!
Linuxの「操作ログ」と「ログイン履歴」を徹底追跡
システムのトラブルシューティングだけじゃなくて、セキュリティ監査の視点からも、「誰が」「いつ」「何をしたか」を追跡する「linux 操作ログ」や「linux ログイン履歴」の確認って、すっごく重要ですよね。
「誰が」「いつ」「どこから」ログインしたか? (last, lastb)
Linuxには、ユーザーがログインしたりログアウトしたりした履歴が、ちゃーんと自動的に記録されています。
この履歴は /var/log/wtmp(ログイン成功履歴)と /var/log/btmp(ログイン失敗履歴)っていうバイナリファイルに保存されてて、テキストエディタで直接見ることはできないんです。
これらの履歴は、専用のコマンドを使って確認するんですよ。
last コマンド:ログイン成功履歴
「linux ログイン履歴」を確認する、いちばん基本的なコマンドが last です。
last は /var/log/wtmp ファイルを読み込んで、過去のログイン・ログアウトの履歴を、新しい順に表示してくれます。
last
▼表示例:▼
taro pts/0 192.168.1.100 Mon Nov 10 10:30 still logged in jiro pts/1 10.0.0.5 Mon Nov 10 09:00 - 10:15 (01:15) taro tty1 Sun Nov 9 20:00 - crash (10:30) reboot system boot 5.15.0-generic Sun Nov 9 19:50 still running wtmp begins Sun Nov 2 05:00:00 2025
▼見方:▼
- 1列目: ユーザー名 (例:
taro) - 2列目: ログインした端末 (例:
pts/0はSSHみたいなリモート接続、tty1はコンソールからの直接ログイン) - 3列目: 接続元のIPアドレスまたはホスト名 (コンソールログインの場合は表示なし)
- 4列目以降: ログインした日時、およびログアウトした日時(または
still logged in(今もログイン中)、crash(システムクラッシュまで)、reboot(リブートまで))
この例から、「ユーザーtaroが 192.168.1.100 から 11/10 10:30 にSSHログインして、今もログイン中なんだなー」ってことや、「ユーザーjiroが 10.0.0.5 から 9:00 にログインして、10:15 にログアウト(1時間15分いたんだな)した」ことなんかが分かっちゃいます。
last コマンドは「linux ログアウト コマンド」そのものじゃないんですけど、ログアウトの履歴(=ログインセッションが終わったこと)を確認するのに使われるんですよ。
lastb コマンド:ログイン失敗履歴
last が成功した履歴だったのに対して、lastb は /var/log/btmp を読み込んで、ログインに「失敗」した履歴を表示します。(sudo が必要な場合がありますよ)
sudo lastb
▼表示例:▼
admin ssh:notty 123.45.67.89 Mon Nov 10 11:00 - 11:00 (00:00) root ssh:notty 123.45.67.89 Mon Nov 10 11:00 - 11:00 (00:00) root ssh:notty 123.45.67.89 Mon Nov 10 11:00 - 11:00 (00:00) btmp begins Mon Nov 10 00:00:00 2025
もし lastb を実行して、こんな風に身に覚えのないIPアドレス(例: 123.45.67.89)から、root や admin みたいなよくあるユーザー名で、すっごい量のログインが試みられていたら…。
それは、ブルートフォース攻撃を受けてる可能性がとっても高いっていうサインです!こわい!😥
「今、誰が」ログインしているか? (who, w)
last は「過去」の履歴でしたけど、「今、現在」誰がログインしているのかを確認するコマンドもあるんです。
who コマンド
今ログインしているユーザーの一覧を、シンプルに表示してくれます。
who
▼表示例:▼
taro pts/0 2025-11-10 10:30 (192.168.1.100)
w コマンド
who よりも、もっと詳しい情報を表示してくれます。
「linux ログインユーザ 確認」の決定版とも言えるコマンドですよ!
w
▼表示例:▼
11:15:00 up 1 day, 15:25, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT taro pts/0 192.168.1.100 10:30 5.00s 0.02s 0.01s w
w コマンドは、who の情報(ユーザー名、端末、接続元IP、ログイン時刻)に加えて、こんな情報も表示してくれます。
- システムの稼働時間(
up ...) - ロードアベレージ(システムの負荷状況)
- IDLE: アイドル時間(そのユーザーが最後に操作してから、どれくらい時間が経ったか)
- WHAT: そのユーザーが「今」実行しているコマンド
ユーザーが実行した「コマンド履歴」の確認方法 (history, auditd)
「ログイン履歴」は last で分かりましたよね。
じゃあ、「ログインしたユーザーが、具体的にどんなコマンドを実行したのか?」っていう、本当の「linux 操作ログ」はどこで確認できるんでしょうか。
これには、いくつかのレベルがあるんです。
レベル1: history コマンド(シェルの履歴)
各ユーザーが実行したコマンドは、そのユーザーの「シェル(Bashとか)」によって、ホームディレクトリの中にある履歴ファイル(ふつうは ~/.bash_history)に保存されていきます。
ユーザー自身が history コマンドを実行すると、自分が過去に実行したコマンドの履歴(履歴番号付き)を一覧表示できます。
history
▼表示例:▼
501 ls -l /var/log 502 less /var/log/messages 503 tail -f /var/log/secure 504 history
▼管理者による確認:▼
root ユーザーだったら、他のユーザーのホームディレクトリにある履歴ファイル(例: /home/taro/.bash_history)を直接見ることで、そのユーザーが(過去に)実行したコマンドを(ある程度)知ることができちゃいます。
▼history の限界:▼
history(.bash_history)は、すっごく便利なんですけど、操作ログとしては、こんな大きな限界があるんです…。
- 削除・改ざんがカンタン: ユーザー自身が
history -cで消したり、.bash_historyファイルを直接編集したり、削除したりできちゃいます。 - すぐに記録されない: ふつう、シェルが「終了」する(ログアウトする)タイミングで、初めてファイルに書き込まれます。(設定によりますけど)
- 全部のコマンドが記録されるわけじゃない: 特殊な実行方法や、別のシェルを使った場合は記録に残りません。
history は、あくまでユーザーが便利になるための機能であって、厳密な「操作ログ」や「監査証跡」としては、ちょっと不十分なんですね😔
レベル2: sudo のログ (auth.log / secure)
ユーザーが sudo を使って管理者権限(root権限)でコマンドを実行しようとした場合、その「実行しようとした」っていう事実は、history とは別に、システムの認証ログ(/var/log/secure または /var/log/auth.log)に記録されます。
▼ログの例(journalctl -f または tail -f /var/log/secure で監視):▼
ユーザー taro が sudo yum update を実行した場合:
Nov 10 11:30:00 hostname sudo[12345]: taro : TTY=pts/0 ; PWD=/home/taro ; USER=root ; COMMAND=/usr/bin/yum update
これは、「taro が、root として /usr/bin/yum update を実行した」っていう、すっごく重要な証拠になります!
もし、許可されてないユーザーが sudo を使おうとした場合(例:パスワードを間違えた、権限がないコマンドを実行しようとした)も、その失敗ログがちゃんと記録されますよ。
レベル3: 本格的な監査ログ auditd
history は改ざんできちゃうし、sudo ログは sudo を使ったものしか記録されません。
「誰が」「いつ」「どのファイルにアクセスして」「何をしたか」を、改ざんが難しい形で、システムコールレベルで記録する!
…それが、Linux監査システム「auditd」です。
auditd は、標準ではインストールされてなかったり、有効になってなかったりする場合もありますけど、厳密なセキュリティやコンプライアンスが求められる環境では、絶対に欠かせない仕組みなんです。
auditd を設定すると、例えば「/etc/passwd ファイルが誰かによって読み書きされたら、絶対にログに残す!」みたいなルールを決めることができます。
▼ルールの例(/etc/audit/rules.d/audit.rules):▼
/etc/passwd への書き込み(w)または属性変更(a)を監視
-w /etc/passwd -p wa -k passwd_changes
auditd が記録したログは /var/log/audit/audit.log に保存されて、ausearch コマンドや aureport コマンドを使って検索したり、集計したりします。
▼ログの検索例:▼
キー "passwd_changes" が設定されたログを検索
ausearch -k passwd_changes
auditd の設定と運用は、ちょっと専門的な知識が必要ですけど、「linux 操作ログ」を本気で追跡・監査したい!っていう場合の、最終的な答えになります。
(今回はピラー記事として、その存在と役割の紹介に留めておきますね!)
まとめ
「linux ログ」っていう、広くて深いテーマについて、基本的な知識から実践的なコマンド操作、さらにはセキュリティ監査の領域まで、ぜーんぶ網羅して解説してきました!
大事なポイントを、最後にもう一度おさらいしますね。
✅ ログの基本:
ログは /var/log に集まってて、トラブルシューティングとセキュリティ監査のために絶対に必要です!
✅ less コマンド:
巨大な「過去」のログを「調査」するための必須コマンド。/(検索)と q(終了)は絶対に覚えてくださいね!
✅ tail コマンド:
tail -f または tail -F で、現在のログをリアルタイムに「監視」します。
✅ journalctl:
systemd 環境では、こっちが現代の標準です!-u(サービス指定)や --since(時間指定)がすっごく強力!
✅ ログイン履歴:
last で成功履歴、lastb で失敗履歴(不正アクセス調査)を確認。「linux ログイン履歴」の基本です。
✅ 操作ログ:
history はお手軽な履歴、sudo のログは認証ログ(secureとか)に、厳密な監査には auditd が必要です。
Linuxサーバーを安定して運用管理するためには、これらのログ確認コマンドを使いこなして、システムからの「声」をちゃんと読み取ってあげることが、絶対に欠かせません。
最初は難しく感じるかもしれないですけど、日常的に tail -f でログを眺めたり、less でエラーを探したりする習慣をつけることで、確実にスキルアップにつながりますから!💪✨
この記事が、あなたのLinuxシステム管理の一助となれば、すっごく嬉しいです!🥰


コメント