Linux 服務器被入侵了怎么辦?登錄歷史分析排查全攻略
了解Linux系統(tǒng)中的登錄歷史對于每一位系統(tǒng)管理員來說都是非常重要的。這不僅幫助我們確認用戶是否在預期的時間內成功登錄,還能讓我們注意到任何不尋常的行為,從而及時發(fā)現(xiàn)并解決可能存在的安全問題。
在這篇文章里,我們將一起探索如何有效地檢查和分析Linux系統(tǒng)的登錄歷史,希望能為您的日常管理工作提供一些有用的技巧和支持。
一、查看系統(tǒng)登錄歷史的工具
Linux系統(tǒng)提供了幾種命令和工具來查看登錄歷史。這些工具的使用可以幫助管理員快速識別是否存在不正常的登錄行為。
1. last 命令
last 命令用于顯示系統(tǒng)上所有用戶的登錄歷史,包括登錄時間、持續(xù)時間、IP 地址等信息。它讀取 /var/log/wtmp 文件,該文件存儲了系統(tǒng)的所有登錄和注銷事件。
使用方法:
last
該命令將列出系統(tǒng)所有的登錄記錄,按時間倒序排列。你會看到類似如下的信息:
root pts/1 112.97.47.32 Mon Aug 19 17:14 - 17:38 (00:23)
root pts/0 112.97.47.32 Mon Aug 19 16:23 - 17:38 (01:15)
2. lastb 命令
lastb 命令用于查看系統(tǒng)上的登錄失敗記錄。它讀取 /var/log/btmp 文件,該文件記錄了所有失敗的登錄嘗試。
使用方法:
lastb
這會顯示登錄失敗的嘗試記錄。通常,這些記錄會包含用戶名、IP地址、時間以及失敗的原因。如果有大量失敗的登錄嘗試,可能需要進一步調查,確保系統(tǒng)的安全。
dbuser ssh:notty 174.138.12.250 Fri Mar 14 11:59 - 11:59 (00:00)
dbs ssh:notty 174.138.12.250 Fri Mar 14 11:59 - 11:59 (00:00)
dbn ssh:notty 174.138.12.250 Fri Mar 14 11:59 - 11:59 (00:00)
3. who 命令
who 命令可以顯示當前系統(tǒng)登錄的所有用戶信息。它會列出每個用戶的用戶名、登錄時間、終端等信息。
使用方法:
who
輸出示例:
root pts/0 2025-03-24 09:57 (183.9.128.198)
root pts/1 2025-03-24 11:06 (183.9.128.198)
這顯示了當前已登錄的用戶。雖然 who 命令不顯示歷史記錄,但它非常適合實時監(jiān)控登錄的用戶。
4. w 命令
w 命令提供有關當前登錄用戶的詳細信息,包括他們當前正在做什么、登錄時間、登錄時長等。它比 who 提供了更多的實時信息。
使用方法:
w
輸出示例:
11:28:23 up 102 days, 14:43, 2 users, load average: 0.21, 0.13, 0.04
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 183.9.128.198 09:57 1:09m 0.02s 0.02s -bash
root pts/1 183.9.128.198 11:06 4.00s 0.02s 0.00s w
二、日志文件深度分析
1. 核心日志文件定位
- /var/log/auth.log (Debian/Ubuntu)
- /var/log/secure(RHEL/CentOS)
- /var/log/wtmp:成功登錄二進制日志(由last解析)
- /var/log/btmp:失敗登錄二進制日志(由lastb解析)
- /var/run/utmp:當前登錄記錄(由who解析)
2. 原始日志解析技巧
# 使用utmpdump解析二進制日志
utmpdump /var/log/wtmp | grep -v "LOGIN" # 排除系統(tǒng)啟動記錄
utmpdump /var/log/btmp | awk '/ssh/ {print $3}' | sort | uniq -c # 統(tǒng)計SSH暴力破解IP
# 文本日志過濾示例
grep "Failed password" /var/log/auth.log # SSH登錄失敗記錄
grep "Accepted password" /var/log/auth.log | awk '{print $11}' | sort | uniq # 成功登錄IP統(tǒng)計
3. 高級檢測與自動化
(1) 可疑登錄特征識別
# 檢測非常用IP登錄
last | awk '{print $3}' | grep -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort | uniq | diff - common_ips.txt
# 檢測非工作時間登錄(示例:22:00-06:00)
last | awk '$7 >= "22:00" || $7 < "06:00" {print}'
預存的合法IP文件common_ips.txt。
(2) 自動化監(jiān)控腳本
#!/bin/bash
# 實時監(jiān)控SSH登錄(成功/失敗)
tail -f /var/log/auth.log | awk '/sshd/{
if(/Accepted/){
print "\033[32m[SUCCESS] "$0"\033[0m"
} else if(/Failed/){
print "\033[31m[FAILURE] "$0"\033[0m"
}
}'
三、加強登錄安全的措施
除了定期查看登錄歷史外,管理員還應采取一些措施來提高系統(tǒng)的登錄安全性:
1. 配置失敗登錄鎖定
為了防止暴力破解攻擊,可以配置系統(tǒng)在多次登錄失敗后暫時鎖定賬戶。在 /etc/pam.d/common-auth 中,可以添加如下配置:
auth required pam_tally2.so onerr=fail deny=5 unlock_time=600
這將使得在連續(xù) 5 次失敗登錄后,賬戶會被鎖定 10 分鐘。
2. 使用SSH密鑰認證
對于遠程登錄,使用 SSH 密鑰認證比使用密碼更加安全。管理員可以禁用密碼登錄,只允許使用 SSH 密鑰來訪問系統(tǒng)。
# 修改SSH默認端口
Port 2222
# 禁用root登錄
PermitRootLogin no
# 強制密鑰認證
PasswordAuthentication no
3. 定期審計和更新密碼策略
強密碼和定期更新密碼是保證系統(tǒng)安全的基本措施。管理員可以使用 chage 命令強制用戶定期更改密碼,并設置密碼復雜度要求。
四、結語
檢測和分析 Linux 系統(tǒng)的登錄歷史是確保系統(tǒng)安全的基本步驟之一。通過使用 last、lastb、who 和 w 等命令,管理員可以輕松查看用戶的登錄記錄,并及時發(fā)現(xiàn)潛在的安全威脅。此外,結合一些安全措施,如多因素認證和 SSH 密鑰認證,可以進一步提高系統(tǒng)的安全性,減少未經(jīng)授權訪問的風險。