Linux 系統(tǒng)日志—Secure,Btmp,Wtmp文件詳解
1、介紹
Linux系統(tǒng)提供了全方位的日志記錄。我們登錄Linux系統(tǒng)之后做的事情Linux都有相應的日志記錄。整個日志系統(tǒng)比較多。這里只介紹和登錄比較密切相關的三個日志。
secure,btmp和wtmp這三個日志文件。
2、wtmp日志
首先,介紹wtmp日志文件,該文件記錄了所有的登錄過系統(tǒng)的用戶信息。(PS:只記錄了正確登錄的用戶。密碼錯誤等在btmp文件和secure文件中)
該文件的地址路徑為:var/log/wtmp 。wtmp文件是一個二進制文件,無法通過cat或者vim 進行閱讀。需要通過命令last進行閱讀。
示例如下:
last 命名會默認從wtmp文件中讀取數(shù)據(jù)。所以我們可以不用添加wtmp文件路徑,但是如果使用 last -f 就需要我們主動添加wtmp路徑了。
上面的數(shù)據(jù)分別是:
- 登錄名:root。
- 打開的終端:pts/0
- 訪問者IP:我的ip地址(PS:實際ip 是顯示 111,111,111,111格式的)
- 登錄時間:Tue Nov 15 11:17:40 2022
- 退出時間:Tue Nov 15 13:14:02 2022
- 耗時:(01:56) 如果顯示still logged in。表示當前仍然屬于登錄狀態(tài)。
如果我們覺得日期顯示閱讀不直觀,可以通過命令last --time-format 進行日期格式化。示例如下:
時間將會變成我們能夠直接閱讀的格式。(PS:+08:00 只是說明當前日期進行了時區(qū)添加,并不代表我們還需要在顯示的時間中添加8小時哦)
--time-format 后面的可選參數(shù)為:
- notime: 不顯示時間。示例:(13:34)。只顯示登錄時長。不顯示時間段
- short:短時間顯示。示例:Fri Nov 4 17:53 - 18:03 (00:09)
- full:按照默認格式顯示全部時間。示例:Tue Nov 22 13:48:22 2022 - Tue Nov 22 17:23:19 2022 (03:34)
- iso:按照iso時間格式顯示全部時間。示例:2020-08-07T17:05:19+08:00 - 2020-08-07T17:06:39+08:00 (00:01)
這個文件將會記錄全部的登錄記錄。如果中間出現(xiàn)了不屬于我們熟悉的ip登錄。那么說明賬戶密碼有泄漏?;蛘咂渌欠ǖ卿洰a(chǎn)生。
PS:-F 命令不能和--time-format 一起使用,因為它們兩者都對輸出的時間格式有影響。
3、btmp 日志
如果說wtmp是記錄登錄成功的日志。那么btmp就是記錄所有嘗試登錄,但是登錄失敗的日志。它存儲的路徑和wtmp文件在同一目錄下:/var/log/btmp
同樣btmp也是屬于二進制文件。無法通過cat或者vim 進行閱讀。需要通過命令lastb進行閱讀。
last: 閱讀的wtmp文件
lastb:閱讀的btmp文件
這兩個指令是有一個字母的區(qū)別。千萬不要弄混了
這兩個命令的 參數(shù)可以說是完全一樣??梢杂糜趌ast的也可以用于lastb。
lastb的命令參數(shù)如下:
- -<number> :要顯示多少行
- -a, --hostlast :在最后一列中顯示主機名
- -d, --dns :將IP地址轉(zhuǎn)換回主機名
- -f <file> :使用特定文件而不是/var/log/btmp
- -F, --fulltimes :打印完整的登錄和注銷時間和日期
- -i, --ip :以數(shù)字和點表示法顯示IP號碼
- -n, --limit <number> :要顯示多少行
- -R, --nohostname :不顯示主機名字段
- -s, --since <time> :顯示指定時間之后的行 (查詢指定時間之后的記錄)
- -t, --until <time> :顯示指定時間之前的行 (查詢指定時間之前的記錄)
- -p, --present <time> :顯示在指定時間內(nèi)在場的賬戶
- -w, --fullnames :顯示完整的用戶名和域名
- -x, --system :顯示系統(tǒng)關閉條目和運行級別更改
- --time-format <format> :顯示指定格式的時間戳 <format>: notime|short|full|iso
PS:-F 命令不能和--time-format 一起使用,因為它們兩者都對輸出的時間格式有影響。
具體使用示例:(PS:由于內(nèi)容比較多,就先顯示10條記錄了)
格式表現(xiàn)為:
第一列顯示登錄名,第二列顯示登錄ssh方式很明顯 ssh:notty是在使用暴力破解ssh密碼。(這也是為什么Linux建議一段時間內(nèi)跟換密碼的原因,當然使用秘鑰的安全性要比密碼高不少。),第三列顯示的就是訪問者IP地址了。 之后的就是時間和耗費時長了。
示例,將時間戳進行序列化后顯示如下:
(1)日志時長
btmp日志由于內(nèi)容過多。它會按30天進行備份一次數(shù)據(jù)。只會備份一個月的數(shù)據(jù)。
備份文件和btmp文件存儲在同一目錄下,只是命名后面追加上備份創(chuàng)建日期而已。示例:
小技巧:在Linux系統(tǒng)中填寫路徑時按Tab將會補全,如果無法補全說明有多個候選項,我們雙擊Tab將會列出全部候選項。
例如上面的結(jié)果,我們?nèi)绻碽tmp-20221101 里面的數(shù)據(jù),就需要使用:lastb -f /var/log/btmp-20221101
示例如下,查詢上個月的非法登錄的前10條記錄:
如果非法登錄的數(shù)據(jù)文件比較大,我們怎么進行查詢呢?Linux可以針對數(shù)據(jù)進行篩選
(2)統(tǒng)計ip登錄次數(shù)
惡意訪問數(shù)據(jù)過多的時候,我們通過lastb直接閱讀比較困難因為數(shù)據(jù)較大。這個時候我們就可以通過對查詢結(jié)果進行篩選。
例如:
上述顯示結(jié)果,第一列ip地址的登錄次數(shù),第二列為ip地址。我們可以對登錄過大的ip進行封禁操作。
下面進行命令拆分介紹。在Linux中通過|符號對命令進行拆分。
上述的命令其實就是:
- lastb : 通過lastb命令會拉取全部的非法登錄日志。
- awk '{print $3}' :截取lastb輸出的數(shù)據(jù)中的第三列也就是ip地址。
- sort :將ip地址進行分類。
- uniq -c :將分類好的ip數(shù)據(jù)進行去重并計數(shù)。
- sort -n : 將分類去重并計數(shù)的數(shù)據(jù),進行分類并且按照數(shù)值進行從小到大排序。
例如我們?nèi)绻樯弦粋€月的非法登錄次數(shù)統(tǒng)計:
PS: 如果想高效控制和防范,那么使用防火墻可以說是最佳選擇了??梢允褂冒⒗镌铺峁┑脑品阑饓ΓńY(jié)合情報的實時入侵防護、全流量可視化分析、智能化訪問控制、日志溯源分析等能力。
https://www.aliyun.com/product/cfw?source=5176.11533457&userCode=w5jkvc5z?。
4、secure 日志
相較于wtmp文件和btmp文件,secure日志就是一個文本??梢酝ㄟ^vim或者cat閱讀。也可以導出到windows環(huán)境下使用VSCode或者文本文檔等閱讀。
secure日志和wtmp和btmp文件一樣,存儲在var/log目錄下。示例如下:
secure文件是按照每7天備份一次的頻率,進行備份的。文檔打開后的內(nèi)容如下所示:
相較于wtmp和btmp一個記錄成功的,一個記錄失敗的。secure日志記錄整個登錄過程的所有數(shù)據(jù),不管成功還是失敗都會進行記錄。
PS:由于secure日志屬于文檔類型的,那么登錄成功后的非法登錄它是可以比較方便的對secure文件進行篡改的。
下面簡單列一些出現(xiàn)的各種錯誤和成功日志:
- 訪問成功后的日志:Accepted password for root from 我的真實IP port 端口號 ssh2
- 指令與端口不匹配: 修改了默認的SSH端口(22) 改為其他端口了。攻擊者訪問該端口時,命令和端口服務不匹配就會出現(xiàn)下面的錯誤日志記錄。
- error: kex_exchange_identification: banner line contains invalid characters。
- ip地址為170.64.132.120 的主機嘗試破解sshd登錄:它使用了新的賬戶和密碼進行驗證。
- pam_unix(sshd:auth): check pass; user unknown
pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=170.64.132.120。 - 提示來自于170.64.132.120 主機的端口 47146的請求,用戶名無效。不允許操作:Invalid user amax from 170.64.132.120 port 47146。
- 為正確用戶開啟root會話,也就是遠程登錄的命令輸入界面:pam_unix(sshd:session): session opened for user root by (uid=0)。
- 為用戶關閉root會話 也就是命令行輸入界面:pam_unix(sshd:session): session closed for user root。
- 來自用戶名jason的登錄,密碼和用戶驗證失敗:Failed password for invalid user jason from 170.64.132.128 port 59676 ssh2。
等等還有很多的命令日志。
只要我們的服務器開啟了SSH,那么這種攻擊就會再所難免。我們需要
- 修改默認的ssh的端口22改為其他的端口,可以提高安全性。
- root密碼設置比較復雜的密碼,并且保持更新。
- 使用秘鑰驗證比密碼驗證安全性更高。
- 使用防火墻屏蔽大量訪問的ip。
- 使用腳本,對攻擊訪問進行自動拉黑添加到屏蔽訪問的文件中。
5、總結(jié)
只要將我們的服務器在公網(wǎng)環(huán)境公開,提供服務。就避免不了來自全球互聯(lián)網(wǎng)上的各種攻擊。大部分的攻擊都是一些泛攻擊,利用程序自動掃描并發(fā)起攻擊而已。
更多的針對的都是一些弱密碼例如123456,admin等的自動攻擊腳本。
我們只需要給自己的服務器創(chuàng)建復雜程度高的密碼,并保持一段時間的密碼跟換。同時如果必須使用SSH登錄就將默認端口22更換為其他端口。????
然后一段時間后,針對大量重復的ip地址進行封禁就可以了。