Linux基礎知識(三)
- 2019 年 10 月 6 日
- 筆記
今天我們來講一下linux中有關用戶登陸資訊的一些知識。
首先我們來了解一下,一般的用戶的登錄資訊所存放的位置。
一般來說,linux的用戶登錄資訊存放在以下三個文件中:
utmp 詳細路徑 :/var/run/utmp
記錄當前正在登錄系統的用戶資訊,默認由who和w記錄當前登錄用戶的資訊,uptime記錄系統啟動時間;

wtmp 詳細路徑:/var/log/wtmp
記錄當前正在登錄和歷史登錄系統的用戶資訊,默認由last命令查看;
使用last命令進行查看

btmp 詳細路徑:/var/log/btmp
記錄失敗的登錄嘗試資訊,默認由lastb命令查看。

使用lastb進行查看

這三個文件都是二進位文件,所以使用普通的cat命令是無法查看和瀏覽的,只能使用固定的命令。

這三個文件的文件結構是完全相同的,都是由/usr/include/bits/utmp.h文件定義了這三個文件的結構體。
默認情況下文件的日誌資訊會通過logrotate日誌管理工具定期清理。logrotate的配置文件是/etc/logrotate.conf,此處是logrotate的預設設置,通常不需要對它進行修改。日誌文件的輪循壓縮等設置存放在獨立的配置文件中,它(們)放在/etc/logrotate.d/目錄下,它會覆蓋預設設置。
介紹完文件我們現在來介紹剛剛所提及到的命令了。
這些命令是查看剛剛介紹的三個文件。
這些命令分別是:
lastlog、last、lastb、ac、who、w、users、utmpdump 。
1、lastlog
列出所有用戶最近登錄的資訊,或者指定用戶的最近登錄資訊。lastlog引用的是/var/log/lastlog文件中的資訊,包括login-name、port、last login time

2、last
剛剛查看wtmp文件用到的指令,
列出當前和曾經登入系統的用戶資訊,輸出的內容包括:用戶名、終端位置、登錄源資訊、開始時間、結束時間、持續時間。注意最後一行輸出的是wtmp文件起始記錄的時間。

3、lastb
剛剛查看btmp文件用到的指令,
列出失敗嘗試的登錄資訊,和last命令功能完全相同。

4、ac
輸出所有用戶總的連接時間,默認單位是小時。由於ac是基於wtmp統計的,所以修改或者刪除wtmp文件都會使ac的結果受影響。
默認系統是沒有該命令的,所以需要apt-get來安裝一下:
apt-get install acct


5、who
查看當前登入系統的用戶資訊。who命令比較強大,它既可以讀取utmp文件也可以讀取wtmp文件,默認沒有指定FILE參數時,who查詢的是utmp的內容。當然可以指定FILE參數,比如who -aH /var/log/wtmp,則此時查看的是wtmp文件。
我們通過who --help 來查看一下who的使用文檔:
root@iZ2ze459u86is1pi87eprdZ:/var/log# who --help
Usage: who [OPTION]... [ FILE | ARG1 ARG2 ]
Print information about users who are currently logged in.
-a, --all same as -b -d --login -p -r -t -T -u
-b, --boot time of last system boot
-d, --dead print dead processes
-H, --heading print line of column headings
--ips print ips instead of hostnames. with --lookup,
canonicalizes based on stored IP, if available,
rather than stored hostname
-l, --login print system login processes
--lookup attempt to canonicalize hostnames via DNS
-m only hostname and user associated with stdin
-p, --process print active processes spawned by init
-q, --count all login names and number of users logged on
-r, --runlevel print current runlevel
-s, --short print only name, line, and time (default)
-t, --time print last system clock change
-T, -w, --mesg add user's message status as +, - or ?
-u, --users list users logged in
--message same as -T
--writable same as -T
--help display this help and exit
--version output version information and exit



6、w
查看當前登入系統的用戶資訊及用戶當前的進程(而who命令只能看用戶不能看進程)。該命令能查看的資訊包括字系統當前時間,系統運行時間,登陸系統用戶總數及系統1、5、10分鐘內的平均負載資訊。後面的資訊是用戶,終端,登錄源,login time,idle time,JCPU,PCPU,當前執行的進程等。

w的資訊來自兩個文件:用戶登錄資訊來自/var/run/utmp,進程資訊來自/proc/.
7、users
顯示當前正在登入統的用戶名。語法是users [OPTION]... [FILE]。如果未指定FILE參數則默認讀取的是/var/run/utmp,當然也可以指定通用相關文件/var/log/wtmp,此時輸出的就不是當前用戶了。

8、utmpdump
utmpdump用於轉儲二進位日誌文件到文本格式的文件以便查看,同時也可以修改二進位文件!!包括/var/run/utmp、/var/log/wtmp、/var/log/btmp。
語法為:utmpdump [options] [filename]。修改文件實際就可以抹除系統記錄,所以一定要設置好許可權,防止非法入侵。
顯示/var/run/utmp的內容:
utmpdump /var/run/utmp

同樣要顯示/var/log/wtmp的內容:
utmpdump /var/log/wtmp | tail -15

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

我們還可以使用utmpdump來做一些其他的事情,比如:
檢查某個特定用戶(如root)的登錄次數。
utmpdump /var/log/wtmp | grep root

統計來自IP地址112.64.153.121的登錄次數
utmpdump /var/log/wtmp | grep 112.64.153.121

今天的分享就到這裡了,下期繼續吧!