last 讀取 /var/log/wtmp 顯示歷史登入記錄,lastb 讀取 /var/log/btmp 顯示失敗嘗試。兩者為二進制日誌,不可竄改,是安全審計、入侵偵測、合規報告的核心數據源。

$ last
user1 pts/0 192.168.1.100 Mon Jan 15 10:00 - 12:30 (02:30)
user2 tty1 - Mon Jan 15 09:00 still logged in
reboot system boot 5.15.0-105 Mon Jan 15 08:00 - 12:35 (04:35)
| 欄位 | 含義 |
|---|---|
| 用戶名 | 登入帳號,reboot 表示系統啟動 |
| 終端機 | pts/N=遠端 SSH/Telnet,ttyN=本地控制台 |
| 來源 IP/主機名 | 遠端連線來源,本地顯示 :0 或空 |
| 登入時間 | 開始時間 |
| 登出時間 | 結束時間,still logged in 表示在線,down 表示系統關機未正常登出 |
| 持續時間 | 括號內時長 |
| 參數 | 功能 | 範例 |
|---|---|---|
-n NUM | 顯示最近 N 行 | last -n 20 |
-R | 隱藏來源 IP/主機名 | last -R |
-a | 來源 IP 移至最後一欄 | last -a |
-F | 完整日期時間格式 | last -F |
-f FILE | 指定日誌檔(如輪轉後的 wtmp.1) | last -f /var/log/wtmp.1 |
-x | 顯示 runlevel 變更、shutdown 事件 | last -x |
USER | 過濾特定用戶 | last root |
TTY | 過濾特定終端 | last pts/0 |
# lastb
user3 ssh:notty 192.168.1.200 Mon Jan 15 22:10 - 22:10 (00:00)
user4 tty1 - Mon Jan 15 22:11 - 22:11 (00:00)
(00:00) 表示即時失敗(無會話建立)。/etc/logrotate.conf/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
minsize 1M
rotate 1
}
create MODE OWNER GROUP:輪轉後建立新檔權限。minsize:最小尺寸觸發輪轉,避免過小檔案頻繁輪轉。rotate 1:保留 1 個舊檔(wtmp.1、btmp.1)。missingok:btmp 不存在不報錯。last -F -a | awk '{print $1,$3,$5,$6,$7,$8,$9,$10}' | column -t。last -s -24h | grep -v "still logged in" | mail -s "Daily Login Report" admin@。last -x | jq -R 'split(" ")|{user:.[0],tty:.[1],from:.[2],login:.[3..5],logout:.[7..9],duration:.[11]}' 轉 JSON 送 Logstash/Fluentd。/var/log/wtmp、/var/log/btmp immutable 屬性(chattr +i)防刪除,輪轉時暫時移除。lastb 高頻 IP,更新防火牆/_fail2ban_ 規則。善用 last/lastb 掌握系統存取全貌,是 Linux 安全基線審計的必修課。