登錄相關的日志涉及到系統的安全,所以是系統管理中非常重要的一部分內容。本文試圖對登錄相關的日志做一個整理。
/var/log/auth.log
這是一個文本文件,記錄了所有和用戶認證相關的日志。無論是我們通過 ssh 登錄,還是通過 sudo 執行命令都會在 auth.log 中產生記錄。執行
$ ssh nick@myserver
上圖顯示日志記錄了通過秘鑰認證的方式登錄主機並退出的過程。
再執行下面的命令試試:
$ sudo vim /var/log/auth.log
日志同樣會詳細的記錄本次 sudo 操作的過程。從中我們可以看到是哪個用戶通過 sudo 執行了什么命令!
/var/run/utmp
這是一個二進制文件,所以不能直接通過文本編輯器查看其內容。
它記錄當前登錄的每個用戶的信息。因此這個文件會隨着用戶登錄和注銷系統而不斷變化,它只保留當時聯機的用戶記錄,不會為用戶保留永久的記錄。系統中需要查詢當前用戶狀態的程序,如 who、w、users 等就需要訪問這個文件。
/var/log/wtmp
這是一個二進制文件,所以不能直接通過文本編輯器查看其內容。
該日志文件永久記錄每個用戶登錄、注銷及系統的啟動、停機的事件。因此隨着系統正常運行時間的增加,該文件的大小也會越來越大,增加的速度取決於系統用戶登錄的次數。該日志文件可以用來查看用戶的登錄記錄,last 命令就通過訪問這個文件獲得這些信息。
/var/log/btmp
這是一個二進制文件,所以不能直接通過文本編輯器查看其內容。
這個文件記錄的是所有失敗的登錄嘗試,使用 last 命令及其 -f 選項可以查看這個文件的內容:
$ sudo last -f /var/log/btmp
/var/log/lastlog
這是一個二進制文件,所以不能直接通過文本編輯器查看其內容。
它會記錄系統中所有用戶最近一次登陸的信息。比如我們通過 ssh 登錄時提示的此用戶最后一次的登錄時間,就是從這個文件中取出的:
其實這個文件的主要使用者是 lastlog 命令。
特別是 /var/run/utmp、/var/log/wtmp 和 /var/log/lastlog 這三個文件,它們都是日志系統中的關鍵文件,並且具有如下的邏輯聯系:
當一個用戶登錄系統時,login 程序在 lastlog 文件中查看用戶的 UID。如果該用戶存在,就把該用戶上次登錄、注銷的時間以及從哪個主機登錄的信息寫到標准輸出中。然后 login 程序在 lastlog 中記錄新的登錄時間,並打開 utmp 文件添加用戶本次的登錄記錄。接下來,login 程序打開 wtmp 文件並添加用戶在 utmp 文件中的記錄。當用戶退出時會把更新的 utmp 文件中的記錄添加到 wtmp 文件中,並從 utmp 文件中刪除用戶的記錄。
我們可以看到除了 auth.log 文件,其它幾個文件都是二進制文件,因而不能使用 less 之類的命令直接查看。下面我們來介紹和登錄相關的一些命令,其實它們幾乎都是通過查詢這些日志文件來提供信息的。
lastlog 命令
lastlog 命令用來顯示系統中所有用戶最近一次登陸的信息:
圖中顯示的只是完整列表的一部分,**Never logged in** 表示該用戶從來沒有登陸過。如果要查看某個用戶的最后登陸信息,可使用 -u 選項:
其實 lastlog 命令就是從 /var/log/lastlog 文件中取出的內容。
last 命令
last 命令用來顯示用戶最近登錄的信息。執行 last 命令,它會讀取 /var/log/wtmp 文件的內容。並把該文件記錄的用戶登錄歷史全部顯示出來:
$ last
信息記錄了誰在什么時間從哪里登錄了服務器,登錄了多長時間。需要注意的是系統中的 wtmp 日志文件經常會被輪轉,所以有時你需要顯式的指定 last 命令從哪個文件中讀取信息:
$ last -f /var/log/wtmp.1
如果我們想快速知道系統最后一次的重啟時間,可以使用下面的命令:
$ last reboot
who 命令
who 命令通過查詢 /var/run/utmp 文件來顯式系統中當前登錄的每個用戶。默認的輸出包括用戶名、終端類型、登錄日期及遠程主機:
w 命令
如果能夠查詢到當前登錄系統的用戶都在干什么是不是一件令人很興奮的事情呢!使用 w 命令就可以做到:
$ w
我們可以看到用戶 nick 同時登錄了兩個終端,在其中一個終端中執行了 w 命令,而在另一個終端中正通過 vim 編輯 /etc/passwd 文件!
其實 w 命令是先通過查詢 utmp 文件獲得當前登錄的用戶,然后顯示每個用戶和它所運行的進程信息。
users 命令
users 命令用單獨的一行打印出當前登錄的用戶,每個顯示的用戶名對應一個登錄會話。如果一個用戶有不止一個登錄會話,那他的用戶名將顯示多次:
因為 nick 通過三個終端登錄了主機,所以在同一行中名字出現了三次。
總結
本文整理了 Ubuntu 系統中常見的一些與登錄相關的文件和命令。通過它們可以快速的查看當前用戶的登錄情況和所有用戶登錄登出的歷史記錄,並且可以查詢到用戶使用 root 權限執行的操作。這對我們維護系統的安全和用戶的管理都非常有幫助。