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