天天看點

Centos 使用者登入記錄與系統日志梳理

日志控制配置--日志簡介

日志對于安全來說,非常重要,他記錄了系統每天發生的各種各樣的事情,你可以通過他來檢查錯誤發生的原因,或者受到攻擊時攻擊者留下的痕迹。日志主要的功能有:審計和監測。他還可以實時的監測系統狀态,監測和追蹤侵入者等等。

在Linux系統中,有三個主要的日志子系統:

  • 連接配接時間日志--由多個程式執行,把紀錄寫入到/var/log/wtmp和/var/run/utmp,login等程式更新wtmp和utmp檔案,使系統管理者能夠跟蹤誰在何時登入到系統。
  • 程序統計--由系統核心執行。當一個程序終止時,為每個程序往程序統計檔案(pacct或acct)中寫一個紀錄。程序統計的目的是為系統中的基本服務提供指令使用統計。
  • 錯誤日志--由syslogd(8)執行。各種系統守護程序、使用者程式和核心通過syslog(3)向檔案/var/log/messages報告值得注意的事件。另外有許多UNIX程式建立日志。像HTTP和FTP這樣提供網絡服務的伺服器也保持詳細的日志。
  • utmp、wtmp和lastlog日志檔案是多數重用UNIX日志子系統的關鍵--保持使用者登入進入和退出的紀錄。有關目前登入使用者的資訊記錄在檔案utmp中;登入進入和退出紀錄在檔案wtmp中;最後一次登入檔案可以用lastlog指令察看。資料交換、關機和重起也記錄在wtmp檔案中。所有的紀錄都包含時間戳。這些檔案(lastlog通常不大)在具有大量使用者的系統中增長十分迅速。例如wtmp檔案可以無限增長,除非定期截取。許多系統以一天或者一周為機關把wtmp配置成循環使用。它通常由cron運作的腳本來修改。這些腳本重新命名并循環使用wtmp檔案。通常,wtmp在第一天結束後命名為wtmp.1;第二天後wtmp.1變為wtmp.2等等,直到wtmp. 7。
  • 每次有一個使用者登入時,login程式在檔案lastlog中察看使用者的UID。如果找到了,則把使用者上次登入、退出時間和主機名寫到标準輸出中,然後login程式在lastlog中紀錄新的登入時間。在新的lastlog紀錄寫入後,utmp檔案打開并插入使用者的utmp紀錄。該紀錄一直用到使用者登入退出時删除。utmp檔案被各種指令檔案使用,包括who、w、users和finger。
  • 下一步,login程式打開檔案wtmp附加使用者的utmp紀錄。當使用者登入退出時,具有更新時間戳的同一utmp紀錄附加到檔案中。wtmp檔案被程式last和ac使用。

具體指令

wtmp和utmp檔案都是二進制檔案,他們不能被諸如tail指令剪貼或合并(使用cat指令)。使用者需要使用who、w、users、last和ac來使用這兩個檔案包含的資訊。

who
  • who指令查詢utmp檔案并報告目前登入的每個使用者。Who的預設輸出包括使用者名、終端類型、登入日期及遠端主機。
  • 如果指明了wtmp檔案名,則who指令查詢所有以前的紀錄。指令who /var/log/wtmp将報告自從wtmp檔案建立或删改以來的每一次登入。
w
  • w指令查詢utmp檔案并顯示目前系統中每個使用者和它所運作的程序資訊。例如:w(回車)顯示:3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27
users
  • users用單獨的一行列印出目前登入的使用者,每個顯示的使用者名對應一個登入會話。如果一個使用者有不止一個登入會話,那他的使用者名将顯示相同的次數。例如:users(回車)顯示:chyang lewis lewis ylou ynguo ynguo
lastb
  • 列出登入系統失敗的使用者相關資訊。
文法:
lastb [-adRx][-f <記錄檔案>][-n <顯示列數>][帳号名稱...][終端機編号...]

補充說明:
單獨執行lastb指令,它會讀取位于/var/log目錄下,名稱為btmp的檔案,并把該檔案内容記錄的登入失敗的使用者名單,全部顯示出來。

參數:
-a  把從何處登入系統的主機名稱或IP位址顯示在最後一行。
-d  将IP位址轉換成主機名稱。
-f   <記錄檔案> 指定記錄檔案。
-n   <顯示列數>或-<顯示列數> 設定列出名單的顯示列數。
-R  不顯示登入系統的主機名稱或IP位址。
-x  顯示系統關機,重新開機,以及執行等級的改變等資訊。      
last
  • last指令往回搜尋wtmp來顯示自從檔案第一次建立以來登入過的使用者。例如: 功能說明:列出目前與過去登入系統的使用者相關資訊。
功能說明:列出目前與過去登入系統的使用者相關資訊。
文法:last [-adRx][-f <記錄檔案>][-n <顯示列數>][帳号名稱...][終端機編号...]
補充說明:單獨執行last指令,它會讀取位于/var/log目錄下,名稱為wtmp的檔案,并把該給檔案的内容記錄的登入系統的使用者名單全部顯示出來。

參數:
-a  把從何處登入系統的主機名稱或IP位址,顯示在最後一行。
-d  将IP位址轉換成主機名稱。
-f   <記錄檔案> 指定記錄檔案。
-n   <顯示列數>或-<顯示列數> 設定列出名單的顯示列數。
-R  不顯示登入系統的主機名稱或IP位址。
-x  顯示系統關機,重新開機,以及執行等級的改變等資訊。      
#last用了顯示使用者登入情況。
last root

#以下是直接顯示固定行數的記錄。
last -6

#預設是顯示wtmp的記錄,btmp能顯示的更詳細,可以顯示遠端登入,例如ssh登入。
last -n 15 -f /var/log/btmp

#顯示特定tty口的登入,1是tty1的登入情況,看的很清楚的。沒有登入成功,但是也有記錄。
last -n 15 -f /var/log/btmp 1

#顯示特定使用者的登入情況。
last -n 15 -f /var/log/btmp root

#顯示登入登出的記錄,-x。
last -n 15 -f /var/log/btmp root -x

#-i顯示特定ip登入的情況。跟蹤用。
last -n 15 -i 127.0.0.1 -f /var/log/btmp root
其他參數沒有特别說明,自行參考man。


#dump-utmp這個工具将原始的資料轉換為ASCII的資料
#dump-utmp /var/log/wtmp      
ac
  • ac指令根據目前的/var/log/wtmp檔案中的登入進入和退出來報告使用者連結的時間(小時),如果不使用标志,則報告總的時間。例如:ac(回車)顯示:total 5177.47
#ac -d 顯示每天的總的連結時間
Aug 12 total 261.87 
Aug 13 total 351.39
Aug 14 total 396.09 
Aug 15 total 462.63 
Aug 16 total 270.45 
Aug 17 total 104.29 
Today total 179.02 

#ac -p 顯示每個使用者的總的連接配接時間 
ynguo 193.23
yucao 3.35 
rong 133.40
hdai 10.52 
zjzhu 52.87 
zqzhou 13.14 
liangliu 24.34 
total 5178.24      
lastlog
  • lastlog檔案在每次有使用者登入時被查詢。可以使用lastlog指令來檢查某特定使用者上次登入的時間,并格式化輸出上次登入日志/var/log/lastlog的内容。它根據UID排序顯示登入名、端口号(tty)和上次登入時間。如果一個使用者從未登入過,lastlog顯示** Neverlogged **。注意需要以root運作該指令,例如:
rong 5 202.38.64.187 Fri Aug 18 15:57:01 +0800 2000 
dbb  **Never logged in** 
sinchen  **Never logged in** 
pb9511  **Never logged in** 
xchen 0 202.38.64.190 Sun Aug 13 10:01:22 +0800 2000

另外,可一加一些參數,例如,last -u
102将報告UID為102的使用者;last -t
7表示限制上一周的報告。      

程序統計

  • UNIX可以跟蹤每個使用者運作的每條指令,如果想知道昨晚弄亂了哪些重要的檔案,程序統計子系統可以告訴你。它對還跟蹤一個侵入者有幫助。與連接配接時間日志不同,程序統計子系統預設不激活,它必須啟動。在Linux系統中啟動程序統計使用accton指令,必須用root身份來運作。
  • accton指令的形式accton file,file必須先存在。先使用touch指令來建立pacct檔案:touch /var/log/pacct,然後運作accton: accton /var/log/pacct。一旦accton被激活,就可以使用lastcomm指令監測系統中任何時候執行的指令。若要關閉統計,可以使用不帶任何參數的accton指令。
  • lastcomm指令報告以前執行的檔案。不帶參數時,lastcomm指令顯示目前統計檔案生命周期内紀錄的所有指令的有關資訊。包括指令名、使用者、tty、指令花費的CPU時間和一個時間戳。如果系統有許多使用者,輸入則可能很長。下面的例子:
ping S root ?? 0.00 secs Sun Aug 20 00:15 
ping6.pl F root ?? 0.01 secs
Sun Aug 20 00:15 
sh root ?? 0.01 secs Sun Aug 20 00:15 
ping S root ??
0.01 secs Sun Aug 20 00:15 
sh root ?? 0.02 secs Sun Aug 20 00:15 
ping S
root ?? 1.34 secs Sun Aug 20 00:15 
locate root ttyp0 1.34 secs Sun Aug 20
00:15 
accton S root ttyp0 0.00 secs Sun Aug 20
00:15      
  • 程序統計的一個問題是pacct檔案可能增長的十分迅速。這時需要互動式的或經過cron機制運作sa指令來保持日志資料在系統控制内。sa指令報告、清理并維護程序統計檔案。它能把/var/log/pacct中的資訊壓縮到摘要檔案/var/log/savacct和/var/log/usracct中。這些摘要包含按指令名和使用者名分類的系統統計資料。sa預設情況下先讀它們,然後讀pacct檔案,使報告能包含所有的可用資訊。
sa的輸出有下面一些标記項:
avio--每次執行的平均I/O操作次數
cp--使用者和系統時間總和,以分鐘計 
cpu--和cp一樣 
k--核心使用的平均CPU時間,以1k為機關
k*sec--CPU存儲完整性,以1k-core秒 re--實時時間,以分鐘計 
s--系統時間,以分鐘計 
tio--I/O操作的總數
u--使用者時間,以分鐘計
使用者還可以根據使用者而不是指令來提供一個摘要報告。例如sa -m      

Linux日志檔案utmp、wtmp、lastlog、messages

1. who指令:有關目前登入使用者的資訊記錄在檔案utmp中
2. w指令:登入進入和退出紀錄在檔案wtmp中
3. lastlog指令:使用者最後一次登入時間
4. messages:從syslog中記錄資訊      
注意:
  • wtmp和utmp檔案都是二進制檔案,他們不能被諸如tail指令剪貼或合并(使用cat指令)。使用者需要使用who、w、users、last和ac來使用這兩個檔案包含的資訊。
例子:
  • last指令往回搜尋wtmp來顯示自從檔案第一次建立以來登入過的使用者
  • users用單獨的一行列印出目前登入的使用者,每個顯示的使用者名對應一個登入會話
  • w指令查詢utmp檔案并顯示目前系統中每個使用者和它所運作的程序資訊
  • who指令查詢utmp檔案并報告目前登入的每個使用者
  • ac指令根據目前的/var/log/wtmp檔案中的登入進入和退出來報告使用者連結的時間(小時)
utmp檔案,它記錄目前登入進系統的各個使用者;包含下列結構的一個二進制記錄寫入這兩個檔案中:
struct utmp { 
char ut_line[8]; /* tty
line: "ttyh0", "ttyd0", "ttyp0", ... */ 
char ut_name[8]; /* login name */
long ut_time; /* seconds since Epoch */ 
};      
  • 登入時,login程式填寫這樣一個結構,然後将其寫入到utmp檔案中,同時也将其添寫到wtmp檔案中。登出時,init程序将utmp檔案中相應的記錄擦除(每個位元組都填以0),并将一個新記錄添寫到wtmp檔案中。讀wtmp檔案中的該登出記錄,其ut_name字段清除為0。在系統再啟動時,以及更改系統時間和日期的前後,都在wtmp檔案中添寫特殊的記錄項。
  • who程式讀utmp檔案,并以可讀格式列印其内容。後來的UNIX版本提供last指令,它讀wtmp檔案并列印所選擇的記錄。wtmp檔案,它跟蹤各個登入和登出事件。

日志的編輯和清理

wted
  • wtmp/utmp日志編輯程式。你可以使用這個工具編輯所有wtmp或者utmp類型的檔案。
z2
  • utmp/wtmp/lastlog日志清理工具。可以删除utmp/wtmp/lastlog日志檔案中有關某個使用者名的所有條目。不過,如果用于Linux系統需要手工修改其源代碼,設定日志檔案的位置。

檢視當機和開機記錄

grep halt messages
grep reboot messages
grep shutdown messages
last
last | grep
reboot
last | grep shutdown
vim /etc/logrotate.conf