Linux中國

使用 utmpdump 監控 CentOS 用戶登錄歷史

在CentOS系統上,用戶登錄歷史存儲在以下這些文件中:

  • /var/run/utmp(用於記錄當前打開的會話)被who和w工具用來記錄當前有誰登錄以及他們正在做什麼,而uptime用來記錄系統啟動時間。
  • /var/log/wtmp (用於存儲系統連接歷史記錄)被last工具用來記錄最後登錄的用戶的列表。
  • /var/log/btmp(記錄失敗的登錄嘗試)被lastb工具用來記錄最後失敗的登錄嘗試的列表。

在本文中,我將介紹如何使用utmpdump,這個小程序來自sysvinit-tools包,可以用於轉儲二進位日誌文件到文本格式的文件以便檢查。此工具默認在CentOS 6和7系列上可用。utmpdump收集到的信息比先前提到過的工具的輸出要更全面,這讓它成為一個勝任該工作的很不錯的工具。除此之外,utmpdump可以用於修改utmp或wtmp。如果你想要修復二進位日誌中的任何損壞條目,它會很有用(LCTT 譯註:我怎麼覺得這像是做壞事的前奏?)。

Utmpdump的使用及其輸出說明

正如我們之前提到的,這些日誌文件,與我們大多數人熟悉的其它日誌相比(如/var/log/messages,/var/log/cron,/var/log/maillog),是以二進位格式存儲的,因而我們不能使用像less或more這樣的文件命令來查看它們的內容。所以,utmpdump的出現拯救了世界。

為了要顯示/var/run/utmp的內容,請運行以下命令:

# utmpdump /var/run/utmp 

同樣要顯示/var/log/wtmp的內容:

# utmpdump /var/log/wtmp | tail -15

最後,對於/var/log/btmp:

# utmpdump /var/log/btmp 

正如你所能看到的,三種情況下的輸出結果是一樣的,除了utmp和btmp的記錄是按時間排序,而wtmp的順序是顛倒的這個原因外(LCTT 譯註:此處原文有誤,實際上都是按照時間順序排列的)。

每個日誌行格式化成了多列,說明如下。第一個欄位顯示了會話識別符,而第二個欄位則是PID。第三個欄位可以是以下值:--(表示運行等級改變或系統重啟),bw(啟動守候進程),數字(表示TTY編號),或者字元和數字(表示偽終端)。第四個欄位可以為空或用戶名、重啟或運行級別。第五個欄位是主TTY或PTY(偽終端),如果此信息可獲得的話。第六個欄位是遠程主機名(如果是本地登錄,該欄位為空,運行級別信息除外,它會返回內核版本)。第七個欄位是遠程系統的IP地址(如果是本地登錄,該欄位為0.0.0.0)。如果沒有提供DNS解析,第六和第七欄位會顯示相同的信息(遠程系統的IP地址)。最後一個(第八)欄位指明了該記錄創建的日期和時間。

Utmpdump使用樣例

下面提供了一些utmpdump的簡單使用情況。

1、 檢查8月18日到9月17日之間某個特定用戶(如gacanepa)的登錄次數。

# utmpdump /var/log/wtmp | grep gacanepa 

如果你需要回顧先前日期的登錄信息,你可以檢查/var/log下的wtmp-YYYYMMDD(或wtmp.[1...N])和btmp-YYYYMMDD(或btmp.[1...N])文件,這些是由logrotate生成的舊wtmp和btmp的歸檔文件。

2、 統計來自IP地址192.168.0.101的登錄次數。

# utmpdump /var/log/wtmp | grep 192.168.0.101 

3、 顯示失敗的登錄嘗試。

# utmpdump /var/log/btmp 

在/var/log/btmp輸出中,每個日誌行都與一個失敗的登錄嘗試相關(如使用不正確的密碼,或者一個不存在的用戶ID)。上面圖片中高亮部分顯示了使用不存在的用戶ID登錄,這警告你有人嘗試猜測常用帳號名來闖入系統。這在使用tty1的情況下是個極其嚴重的問題,因為這意味著某人對你機器上的終端具有訪問許可權(該檢查一下誰拿到了進入你數據中心的鑰匙了,也許吧?)

4、 顯示每個用戶會話的登入和登出信息

# utmpdump /var/log/wtmp 

在/var/logwtmp中,一次新的登錄事件的特徵是,第一個欄位為『7』,第三個欄位是一個終端編號(或偽終端id),第四個欄位為用戶名。相關的登出事件會在第一個欄位顯示『8』,第二個欄位顯示與登錄一樣的PID,而終端編號欄位空白。例如,仔細觀察上面圖片中PID 1463的行。

  • 在 [Fri Sep 19 11:57:40 2014 ART],TTY1上顯示登錄提示符。
  • 在 [Fri Sep 19 12:04:21 2014 ART],用戶 root 登入。
  • 在 [Fri Sep 19 12:07:24 2014 ART],用戶 root 登出。

旁註:第四個欄位的LOGIN意味著出現了一次登錄到第五欄位指定的終端的提示。

到目前為止,我介紹一些有點瑣碎的例子。你可以將utmpdump和其它一些文本處理工具,如awk、sed、grep或cut組合,來產生過濾和加強的輸出。

例如,你可以使用以下命令來列出某個特定用戶(如gacanepa)的所有登錄事件,並發送輸出結果到.csv文件,它可以用像LibreOffice Calc或Microsoft Excel之類的文字或工作簿應用程序打開查看。讓我們只顯示PID、用戶名、IP地址和時間戳:

 # utmpdump /var/log/wtmp | grep -E "[7].*gacanepa" | awk -v OFS="," 'BEGIN {FS="] "}; {print $2,$4,$7,$8}' | sed -e 's/[//g' -e 's/]//g' 

就像上面圖片中三個高亮區域描繪的那樣,過濾邏輯操作是由三個管道步驟組成的。第一步用於查找由用戶gacanepa觸發的登錄事件([7]);第二步和第三部用於選擇期望的欄位,移除utmpdump輸出的方括弧並設置輸出欄位分隔符為逗號。

當然,如果你想要在以後打開來看,你需要重定向上面的命令輸出到文件(添加「>[文件名].csv」到命令後面)。

在更為複雜的例子中,如果你想要知道在特定時間內哪些用戶(在/etc/passwd中列出)沒有登錄,你可以從/etc/passwd中提取用戶名,然後運行grep命令來獲取/var/log/wtmp輸出中對應用戶的列表。就像你看到的那樣,有著無限可能。

在進行總結之前,讓我們簡要地展示一下utmpdump的另外一種使用情況:修改utmp或wtmp。由於這些都是二進位日誌文件,你不能像編輯文件一樣來編輯它們。取而代之是,你可以將其內容輸出成為文本格式,並修改文本輸出內容,然後將修改後的內容導入回二進位日誌中。如下:

# utmpdump /var/log/utmp > tmp_output
<使用文本編輯器修改 tmp_output>
# utmpdump -r tmp_output > /var/log/utmp 

這在你想要移除或修復二進位日誌中的任何偽造條目時很有用。

下面小結一下,utmpdump從utmp、wtmp和btmp日誌文件或輪循的舊歸檔文件來讀取詳細的登錄事件,來補充如who,w,uptime,last,lastb之類的標準工具的不足,這也使得它成為一個很棒的工具。

你可以隨意添加評論以加強本帖的含金量。

via: http://xmodulo.com/2014/09/monitor-user-login-history-centos-utmpdump.html

作者:Gabriel Cánepa 譯者:GOLinux 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國