Linuxのログイン履歴は、バイナリ形式のファイルに記録されているため、catやlessでは読めません。専用のlastコマンドを使う必要があります。
この記事では、lastコマンドでLinuxのログイン履歴を確認する方法を解説します。lastbによるログイン失敗履歴の確認、/var/log/wtmpファイルの仕組み、実務でのセキュリティ監査への活用まで、実行例付きでまとめます。
【この記事でわかること】
・last コマンドで /var/log/wtmp のログイン履歴を読める(バイナリなのでcatは不可)
・lastb コマンドで /var/log/btmp のログイン失敗履歴を確認できる
・-n オプションで表示件数、-F で完全な日時、-i でIPアドレスを確認できる
・不正アクセス調査では lastb と /var/log/secure の両方を確認するのが鉄則
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
ログイン履歴が保存されるファイルの仕組み
Linuxのログイン情報は複数のバイナリファイルに記録されています。| ファイル | 内容 | 確認コマンド |
|---|---|---|
| /var/log/wtmp | ログイン・ログアウト・リブートの履歴 | last |
| /var/log/btmp | ログイン失敗の履歴 | lastb |
| /var/run/utmp | 現在ログイン中のユーザー情報 | who / w |
| /var/log/lastlog | 各ユーザーの最終ログイン時刻 | lastlog |
catやlessでは文字化けした内容しか表示されません。必ず専用コマンドで読みましょう。lastコマンドの基本的な使い方
1. lastの基本構文とオプション
# 書式 last [オプション] [ユーザー名] [端末名] # 主なオプション # -n N 最新N件のみ表示(例: -n 20) # -F 日時を完全な形式で表示(年・秒まで表示) # -i ホスト名の代わりにIPアドレスで表示 # -d IPアドレスをホスト名に逆引きして表示 # -f FILE 読み込むwtmpファイルを指定(デフォルトは/var/log/wtmp) # -R ホスト名フィールドを非表示にする # -x シャットダウン・ランレベル変更も表示する
2. 全ユーザーのログイン履歴を確認する
[root@Tiger ~]# last pakira pts/0 192.168.0.162 Wed Oct 10 12:21 still logged in reboot system boot 2.6.32-279.el6.i Wed Oct 10 12:20 - 12:37 (00:17) root tty1 Fri Aug 24 13:45 - down (00:00) pakira ftpd1456 192.168.0.162 Fri Aug 24 13:43 - 13:44 (00:01) pakira ftpd1455 192.168.0.162 Fri Aug 24 13:43 - 13:44 (00:01) pakira ftpd1446 192.168.0.162 Fri Aug 24 13:42 - down (00:03) wtmp begins Wed Oct 10 12:20:41 2012
・1列目:ユーザー名(rebootはシステム再起動)
・2列目:端末名(pts/0=SSH、tty1=コンソール、ftpdXXX=FTP)
・3列目:接続元IPアドレスまたはホスト名
・4列目以降:ログイン日時・ログアウト日時・滞在時間
・「still logged in」は現在もセッションが続いていることを意味します
3. 特定ユーザーのログイン履歴を確認する
# 特定ユーザー(pakira)の履歴だけを表示します [root@Tiger ~]# last pakira pakira pts/0 192.168.0.162 Wed Oct 10 12:21 still logged in pakira ftpd1456 192.168.0.162 Fri Aug 24 13:43 - 13:44 (00:01) pakira ftpd1455 192.168.0.162 Fri Aug 24 13:43 - 13:44 (00:01) pakira ftpd1446 192.168.0.162 Fri Aug 24 13:42 - down (00:03) pakira pts/0 192.168.0.162 Fri Aug 24 13:20 - down (00:15) pakira pts/0 192.168.0.162 Fri Aug 24 12:35 - 13:03 (00:28)
4. 最新件数を指定して表示する
# 最新20件のみ表示します # last -n 20 # または省略形 # last -20 [root@server1 ~]# last -20 pakira pts/1 10.0.1.52 Tue Apr 7 09:15 still logged in root pts/0 10.0.1.10 Tue Apr 7 08:00 - 08:45 (00:45) pakira pts/0 10.0.1.52 Mon Apr 6 14:30 - 17:00 (02:30)
5. IPアドレスと完全な日時で表示する
不正アクセスの調査では、接続元IPアドレスと正確な日時の両方が重要です。# -F: 秒まで含む完全な日時、-i: IPアドレスで表示 [root@server1 ~]# last -Fi pakira pts/1 10.0.1.52 Tue Apr 7 09:15:32 2026 still logged in root pts/0 10.0.1.10 Tue Apr 7 08:00:11 2026 - Tue Apr 7 08:45:30 2026 (00:45) reboot system boot Mon Apr 6 23:30:01 2026 - Tue Apr 7 09:20:00 2026 (09:49)
6. リブート履歴を確認する
# rebootエントリだけを表示します [root@server1 ~]# last reboot reboot system boot 5.14.0-427.13.1. Mon Apr 6 23:30 still running reboot system boot 5.14.0-427.13.1. Sun Apr 5 02:15 - 23:30 (21:15) reboot system boot 5.14.0-427.13.1. Fri Apr 3 22:00 - 02:12 (04:12) wtmp begins Mon Mar 11 00:00:01 2026
lastbコマンドでログイン失敗履歴を確認する
lastbコマンドは、ログイン失敗(パスワード間違いや存在しないユーザーによるアクセス試行)の履歴を表示します。参照ファイルは /var/log/btmp です。
1. lastbの基本的な使い方
# ログイン失敗履歴を表示します(root権限が必要) [root@server1 ~]# lastb admin ssh:notty 103.92.32.11 Tue Apr 7 09:10:55 2026 - Tue Apr 7 09:10:55 2026 (00:00) root ssh:notty 103.92.32.11 Tue Apr 7 09:10:52 2026 - Tue Apr 7 09:10:52 2026 (00:00) test ssh:notty 185.234.218.45 Tue Apr 7 08:55:30 2026 - Tue Apr 7 08:55:30 2026 (00:00) ubuntu ssh:notty 185.234.218.45 Tue Apr 7 08:55:28 2026 - Tue Apr 7 08:55:28 2026 (00:00) btmp begins Sun Apr 6 00:00:01 2026
注意: lastbは/var/log/btmpが存在しない場合は「lastb: /var/log/btmp: No such file or directory」とエラーが出ます。btmpファイルがないサーバーでは失敗ログが記録されていない状態です。
2. lastbで接続元IPをカウントする
攻撃元IPを特定して対策を講じる場合に使います。# 接続元IPアドレスの試行回数を多い順に表示します [root@server1 ~]# lastb -i | awk '{print $3}' | sort | uniq -c | sort -rn | head -10 542 103.92.32.11 218 185.234.218.45 87 91.109.25.150 43 45.142.212.200
応用・セキュリティ監査での実務活用
1. 古いwtmpファイルを指定して確認する
wtmpファイルはローテーションされ、古いものは wtmp.1 や wtmp-20260101 などの名前で保存されます。# ローテーション済みのwtmpを確認します [root@server1 ~]# ls /var/log/wtmp* /var/log/wtmp /var/log/wtmp-20260401 # 古いwtmpファイルを -f で指定して確認します [root@server1 ~]# last -f /var/log/wtmp-20260401 | head -10
2. lastlogコマンドで最終ログイン時刻を確認する
各ユーザーの最終ログイン時刻一覧を確認するには lastlog コマンドを使います。# 全ユーザーの最終ログイン時刻を表示します [root@server1 ~]# lastlog Username Port From Latest root pts/0 10.0.1.10 Tue Apr 7 08:00:11 +0900 2026 bin **Never logged in** daemon **Never logged in** pakira pts/1 10.0.1.52 Tue Apr 7 09:15:32 +0900 2026 # 特定ユーザーだけ確認します [root@server1 ~]# lastlog -u pakira Username Port From Latest pakira pts/1 10.0.1.52 Tue Apr 7 09:15:32 +0900 2026
3. /var/log/secureと組み合わせた不正アクセス調査
実務での不正アクセス調査では、lastbだけでなく/var/log/secureも同時に確認します(RHEL系)。# SSHログイン失敗を /var/log/secure で確認します(RHEL系) [root@server1 ~]# grep "Failed password" /var/log/secure | tail -10 Apr 7 09:10:52 server1 sshd[12345]: Failed password for invalid user admin from 103.92.32.11 port 52341 ssh2 Apr 7 09:10:55 server1 sshd[12346]: Failed password for root from 103.92.32.11 port 52345 ssh2 # Ubuntu/Debian系は /var/log/auth.log を確認します $ grep "Failed password" /var/log/auth.log | tail -10 # 特定IPからの試行数をカウントします [root@server1 ~]# grep "Failed password" /var/log/secure | grep "103.92.32.11" | wc -l 542
トラブルシュート・よくあるエラー
「/var/log/wtmp: No such file or directory」が出た場合
wtmpファイルが存在しない、または消えてしまっています。# wtmpファイルが存在するか確認します $ ls -la /var/log/wtmp ls: cannot access '/var/log/wtmp': No such file or directory # 空のwtmpファイルを作成します(これ以降のログが記録されます) $ sudo touch /var/log/wtmp $ sudo chmod 664 /var/log/wtmp $ sudo chown root:utmp /var/log/wtmp
「lastb: /var/log/btmp: No such file or directory」が出た場合
# btmpファイルを作成します $ sudo touch /var/log/btmp $ sudo chmod 600 /var/log/btmp $ sudo chown root:utmp /var/log/btmp
lastの出力が多すぎて確認しにくい場合
# 件数を絞り込んで確認します $ last -n 50 # grepで特定の接続元IPを絞り込みます $ last -i | grep "10.0.1" # 特定の日時以降のログインを確認します(-t オプションはGNU拡張) $ last --since 2026-04-01 # less でページング表示します $ last | less
本記事のまとめ
Linuxのログイン履歴はバイナリファイルに記録されているため、専用コマンドで確認します。| やりたいこと | コマンド |
|---|---|
| ログイン履歴を確認する | last |
| 特定ユーザーの履歴を確認する | last ユーザー名 |
| 最新N件のみ表示する | last -n N |
| IPアドレスと完全な日時で表示する | last -Fi |
| リブート履歴を確認する | last reboot |
| ログイン失敗履歴を確認する | lastb |
| 各ユーザーの最終ログイン時刻を確認する | lastlog |
| 古いwtmpファイルを読む | last -f /var/log/wtmp-20260401 |
Linuxサーバーのセキュリティ管理を体系的に学びたい方へ
lastコマンドによるログイン履歴の確認は、サーバーセキュリティ管理の基本の一つです。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、「Linuxサーバー構築入門マニュアル(図解60P)」を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
Linuxサーバーのセキュリティ管理を体系的に学びたい方へ
lastコマンドによるログイン履歴の確認は、サーバーセキュリティ管理の基本の一つです。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
RHEL/CentOSでのログイン履歴確認の追加手順
RHEL/CentOS系(Red Hat Enterprise Linux系ディストリビューション)では、lastコマンドに加えてaulastコマンド(audit logベースのログイン履歴表示ツール)も活用してください。auditd(監査デーモン)が稼働している環境では、/var/log/audit/audit.logに認証イベントが詳細に記録されており、aulastで人間が読みやすい形式で確認できます。lastだけだとwtmpに記録されない一部のセッションが取りこぼされる場合があるので、両方を併用しましょう。
また、systemd-journaldが有効な環境ではjournalctlでsshdユニットのログを直接遡ることも有効です。次のコマンドで確認してください。
# auditログからログイン履歴を取得 aulast # sshd経由のログイン試行をjournaldから抽出 journalctl -u sshd --since "7 days ago" | grep -i "accepted\|failed"
RHEL8以降ではrsyslogよりjournaldが主役になっているため、/var/log/secureが空のケースもあります。その場合はjournalctlを優先して参照してください。
wtmp/btmp ローテーション後の過去履歴を遡る方法
lastコマンドは標準で/var/log/wtmp(ログイン成功記録)を読みますが、logrotateによって定期的にwtmp.1, wtmp.2.gzのようにローテーションされています。古い履歴を確認したい場合は、-fオプション(読み込むファイルを明示指定するオプション)でローテーション済みファイルを指定してください。gz圧縮されている場合は一時的に展開してから読み込みます。
失敗ログインを記録するbtmpも同様にローテーション対象なので、過去の不正アクセス痕跡を追う際は古いbtmpも忘れずに確認しましょう。
# 1世代前のwtmpを読み込む last -f /var/log/wtmp.1 # 圧縮済みwtmpを展開して参照 zcat /var/log/wtmp.2.gz > /tmp/wtmp.old last -f /tmp/wtmp.old # 過去の失敗ログインを遡る lastb -f /var/log/btmp.1
監査対応で数ヶ月前の履歴を求められた場合は、/etc/logrotate.conf のwtmp/btmpのrotate世数(保持世代数)を事前に長めに設定しておきましょう。デフォルトの1ヶ月では足りないケースが多いので、運用ポリシーに合わせて見直してください。
rootログインのみ抽出するワンライナー
セキュリティ点検で「rootアカウントで誰がいつログインしたか」を素早く把握したい場面は多いはずです。lastコマンドの第一引数にユーザー名を渡すことで該当ユーザーのみフィルタできるので、まずはこの基本形を使ってください。さらに踏み込んで、リモートIPごとの集計やpts(疑似端末)/tty(仮想端末)別の分類を行いたい場合はawkやsortと組み合わせます。
# rootのログイン履歴のみ抽出 last root # rootログインを接続元IPごとに集計 last root | awk '{print $3}' | sort | uniq -c | sort -rn # rootへのログイン失敗をまとめて確認 lastb root | head -20
不審なIPからのrootログインが見つかった場合は、/etc/ssh/sshd_configで PermitRootLogin no を設定し、rootへの直接ログインを禁止してください。代わりにsudo経由の運用に切り替えることで、誰がrootとして何を実行したかをauth.logやsudoログで追跡しやすくなります。日常運用ではcronなどで定期的に上記ワンライナーを回し、想定外のrootアクセスを早期検知する仕組みを整えておきましょう。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:dmesgコマンドでLinuxの起動時ログを確認する方法|grepで情報を絞り込む実例付き
- 前のページへ:ユーザーがログインに失敗した記録を確認する|lastb・faillogでブルートフォース痕跡を追う方法
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます