# 1 utmp、wtmp、btmp文件
Linux用戶登錄信息放在三個文件中:
1 /var/run/utmp:記錄當前正在登錄系統的用戶信息,默認由who和w記錄當前登錄用戶的信息,uptime記錄系統啟動時間;
2 /var/log/wtmp:記錄當前正在登錄和歷史登錄系統的用戶信息,默認由last命令查看;
3 /var/log/btmp:記錄失敗的登錄嘗試信息,默認由lastb命令查看。
這三個文件都是二進制數據文件,並且三個文件結構完全相同,是由/usr/include/bits/utmp.h文件定義了這三個文件的結構體。
默認情況下文件的日志信息會通過logrotate日志管理工具定期清理。logrotate的配置文件是/etc/logrotate.conf,此處是logrotate的缺省設置,通常不需要對它進行修改。日志文件的輪循壓縮等設置存放在獨立的配置文件中,它(們)放在/etc/logrotate.d/目錄下,它會覆蓋缺省設置。
如果不想記錄相關信息,則可以直接將相關文件刪除即可。如果系統不存在該文件,則需要在此路徑touch一個文件就可以繼續記錄相關信息了。
此外:
如果想禁用who命令,則只需要將utmp的可讀權限去掉就行,這樣非root用戶就不能用此命令了;如果是btmp文件,手工創建的話注意權限必須為600,否則不能正確寫入信息。
# 2 相關命令介紹
好了,下面開始介紹查看這三個日志文件的命令了。分別是lastlog、last、lastb、ac、who、w、users、utmpdump。
其中last、lastb、who、utmpdump可以通過指定參數而查看三個中的任意一個文件。
## 2.1 lastlog:
列出所有用戶最近登錄的信息,或者指定用戶的最近登錄信息。lastlog引用的是/var/log/lastlog文件中的信息,包括login-name、port、last login time
lzx-clone1:/var/log # lastlog Username Port Latest root pts/1 Wed Oct 19 14:37:46 +0800 2016 bin **Never logged in** daemon **Never logged in** gdm **Never logged in** admin **Never logged in** lzx pts/3 Wed Oct 19 15:15:24 +0800 2016
## 2.2 last
列出當前和曾經登入系統的用戶信息,它默認讀取的是/var/log/wtmp文件的信息。輸出的內容包括:用戶名、終端位置、登錄源信息、開始時間、結束時間、持續時間。注意最后一行輸出的是wtmp文件起始記錄的時間。當然也可以通過last -f參數指定讀取文件,可以是/var/log/btmp、/var/run/utmp
[root@CLMUGR-APP-D-01 log]# last root pts/0 10.200.108.92 Tue Oct 18 15:04 still logged in root pts/1 10.200.108.92 Wed Oct 12 17:02 still logged in root pts/0 10.200.108.92 Wed Oct 12 09:20 - 16:58 (07:38) root pts/0 10.200.108.92 Sat Oct 8 10:40 - 14:45 (04:05) root pts/0 10.200.108.92 Wed Aug 31 10:52 - 08:44 (21:52) root pts/0 10.200.108.92 Fri Jul 8 13:08 - 09:41 (25+20:32) reboot system boot 2.6.32-431.el6.x Tue Jan 13 19:40 - 19:44 (00:04) wtmp begins Tue Jan 13 19:40:22 2015
## 2.3 lastb
列出失敗嘗試的登錄信息,和last命令功能完全相同,只不過它默認讀取的是/var/log/btmp文件的信息。當然也可以通過last -f參數指定讀取文件,可以是/var/log/btmp、/var/run/utmp
[root@CLMUGR-APP-D-01 log]# lastb root ssh:notty 10.200.108.92 Wed Oct 19 17:11 - 17:11 (00:00) root ssh:notty 10.200.108.92 Wed Oct 19 17:11 - 17:11 (00:00) root ssh:notty 10.200.108.92 Wed Oct 19 17:10 - 17:10 (00:00) root ssh:notty 10.200.108.92 Wed Oct 19 17:10 - 17:10 (00:00) btmp begins Wed Oct 19 17:10:12 2016
lzx-clone1:/var/log # lastb -F -f /var/log/wtmp root pts/0 10.200.108.92 Tue Mar 8 11:04:36 2016 - Tue Mar 8 11:04:36 2016 (00:00) wtmp begins Tue Mar 8 11:04:36 2016
## 2.4 ac
輸出所有用戶總的連接時間,默認單位是小時。由於ac是基於wtmp統計的,所以修改或者刪除wtmp文件都會使ac的結果受影響。(Suse默認沒有該命令)
[root@cloudexpress ~]# ac
total 7404.62
## 2.5 who
查看當前登入系統的用戶信息。其中who -m等效於who am i。
語法who [OPTION]... [ FILE | ARG1 ARG2 ]。
who命令強大的一點是,它既可以讀取utmp文件也可以讀取wtmp文件,默認沒有指定FILE參數時,who查詢的是utmp的內容。當然可以指定FILE參數,比如who -aH /var/log/wtmp,則此時查看的是wtmp文件。
查看當前運行級別
[root@CLMUGR-APP-D-01 log]# who -rH
名稱 線路 時間 空閑 進程號 備注
運行級別 5 2016-07-08 13:01
查看登錄用戶和用戶數≈users
lzx-clone1:/var/run # who -q
root root root root
# users=4
## 2.6 w
查看當前登入系統的用戶信息及用戶當前的進程(而who命令只能看用戶不能看進程)。該命令能查看的信息包括字系統當前時間,系統運行時間,登陸系統用戶總數及系統1、5、10分鍾內的平均負載信息。后面的信息是用戶,終端,登錄源,login time,idle time,JCPU,PCPU,當前執行的進程等。
w的信息來自兩個文件:用戶登錄信息來自/var/run/utmp,進程信息來自/proc/.
lzx-clone1:/var/log # w 15:26:40 up 12 days, 56 min, 4 users, load average: 0.14, 0.16, 0.20 USER TTY LOGIN@ IDLE JCPU PCPU WHAT root :0 10Oct16 ?xdm? 43:33 0.69s /usr/bin/gnome-session root pts/0 Wed14 40.00s 0.19s 0.00s w root pts/1 Wed14 23:01m 0.06s 0.06s -bash root pts/2 10Oct16 9days 0.01s 0.01s /bin/bash -l
## 2.7 users
顯示當前正在登入統的用戶名。語法是users [OPTION]... [FILE]。如果未指定FILE參數則默認讀取的是/var/run/utmp,當然也可以指定通用相關文件/var/log/wtmp,此時輸出的就不是當前用戶了。
[root@CLMUGR-APP-D-01 log]# users
root root
## 2.8 utmpdump
utmpdump用於轉儲二進制日志文件到文本格式的文件以便查看,同時也可以修改二進制文件!!包括/var/run/utmp、/var/log/wtmp、/var/log/btmp。語法為:utmpdump [options] [filename]。修改文件實際就可以抹除系統記錄,所以一定要設置好權限,防止非法入侵。
例子:修改utmp或wtmp。由於這些都是二進制日志文件,你不能像編輯文件一樣來編輯它們。取而代之是,你可以將其內容輸出成為文本格式,並修改文本輸出內容,然后將修改后的內容導入回二進制日志中。如下:
utmpdump /var/log/utmp > tmp_output.txt #導出文件信息 #<使用文本編輯器修改 tmp_output.txt> utmpdump -r tmp_output.txt > /var/log/utmp #導入到源文件中
參考:
http://www.cnblogs.com/lizhaoxian/p/5981029.html
https://blog.csdn.net/jsd2honey/article/details/78404337