Linux之系統日誌原理淺析

Linux系統擁有很是靈活和強大的日誌功能,能夠保存幾乎全部的操做記錄,並能夠從中檢索出咱們須要的信息。數據庫


大部分Linux發行版默認的日誌守護進程爲 syslog,位於 /etc/syslog 或 /etc/syslogd 或/etc/rsyslog.d,默認配置文件爲 /etc/syslog.conf 或 rsyslog.conf,任何但願生成日誌的程序均可以向 syslog 發送信息。安全

 

Linux系統內核和許多程序會產生各類錯誤信息、警告信息和其餘的提示信息,這些信息對管理員瞭解系統的運行狀態是很是有用的,因此應該把它們寫到日誌文件中去。網絡

完成這個過程的程序就是syslog。syslog能夠根據日誌的類別和優先級將日誌保存到不一樣的文件中。數據結構

例如,爲了方便查閱,能夠把內核信息與其餘信息分開,單獨保存到一個獨立的日誌文件中。默認配置下,日誌文件一般都保存在「/var/log」目錄下。less

日誌類型

下面是常見的日誌類型,但並非全部的Linux發行版都包含這些類型:ssh

 

類型 說明
auth 用戶認證時產生的日誌,如login命令、su命令。
authpriv 與 auth 相似,可是隻能被特定用戶查看。
console 針對系統控制檯的消息。
cron 系統按期執行計劃任務時產生的日誌。
daemon 某些守護進程產生的日誌。
ftp FTP服務。
kern 系統內核消息。
local0.local7 由自定義程序使用。
lpr 與打印機活動有關。
mail 郵件日誌。
mark 產生時間戳。系統每隔一段時間向日志文件中輸出當前時間,每行的格式相似於 May 26 11:17:09 rs2 -- MARK --,能夠由此推斷系統發生故障的大概時間。
news 網絡新聞傳輸協議(nntp)產生的消息。
ntp 網絡時間協議(ntp)產生的消息。
user 用戶進程。
uucp UUCP子系統。

 

日誌優先級

常見的日誌優先級請見下標:post

 

優先級 說明
emerg 緊急狀況,系統不可用(例如系統崩潰),通常會通知全部用戶。
alert 須要當即修復,例如系統數據庫損壞。
crit 危險狀況,例如硬盤錯誤,可能會阻礙程序的部分功能。
err 通常錯誤消息。
warning 警告。
notice 不是錯誤,可是可能須要處理。
info 通用性消息,通常用來提供有用信息。
debug 調試程序產生的信息。
none 沒有優先級,不記錄任何日誌消息。

經常使用日誌文件

系統日誌是由一個名爲syslog的服務管理的,如如下日誌文件都是由syslog日誌服務驅動的:spa

/var/log/boot.log:錄了系統在引導過程當中發生的事件,就是Linux系統開機自檢過程顯示的信息操作系統

/var/log/lastlog :記錄最後一次用戶成功登錄的時間、登錄IP等信息debug

/var/log/messages :記錄Linux操做系統常見的系統和服務錯誤信息

/var/log/secure :Linux系統安全日誌,記錄用戶和工做組變壞狀況、用戶登錄認證狀況

/var/log/btmp :記錄Linux登錄失敗的用戶、時間以及遠程IP地址

/var/log/syslog:只記錄警告信息,經常是系統出問題的信息,使用lastlog查看

/var/log/wtmp:該日誌文件永久記錄每一個用戶登陸、註銷及系統的啓動、停機的事件,使用last命令查看

/var/run/utmp:該日誌文件記錄有關當前登陸的每一個用戶的信息。如 who、w、users、finger等就須要訪問這個文件

 

/var/log/syslog 或 /var/log/messages 存儲全部的全局系統活動數據,包括開機信息。基於 Debian 的系統如 Ubuntu 在 /var/log/syslog 中存儲它們,而基於 RedHat 的系統如 RHEL 或 CentOS 則在 /var/log/messages 中存儲它們。
/var/log/auth.log 或 /var/log/secure 存儲來自可插拔認證模塊(PAM)的日誌,包括成功的登陸,失敗的登陸嘗試和認證方式。Ubuntu 和 Debian 在 /var/log/auth.log 中存儲認證信息,而 RedHat 和 CentOS 則在 /var/log/secure 中存儲該信息。

日誌文件詳細介紹:

/var/log/boot.log

該文件記錄了系統在引導過程當中發生的事件,就是Linux系統開機自檢過程顯示的信息,如圖1所示:

 

 

/var/log/syslog

默認Centos,Fedora不生成該日誌文件,但能夠配置/etc/syslog.conf讓系統生成該日誌文件。

它和/etc/log/messages日誌文件不一樣,它只記錄警告信息,經常是系統出問題的信息,因此更應該關注該文件。

要讓系統生成該日誌文件,在/etc/syslog.conf文件中加上:*.warning /var/log/syslog 該日誌文件能記錄當用戶登陸時login記錄下的錯誤口令、Sendmail的問題、su命令執行失敗等信息。

該日誌文件記錄最近成功登陸的事件和最後一次不成功的登陸事件,由login生成。在每次用戶登陸時被查詢,該文件是二進制文件,須要使用lastlog命令查看,根據UID排序顯示登陸名、端口號和上次登陸時間。若是某用戶歷來沒有登陸過,就顯示爲"**Never logged in**"。該命令只能以root權限執行。簡單地輸入lastlog命令後就會看到相似圖4的信息:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@TestStation etc]# lastlog
Username         Port     From             Latest
root             pts/0    110.87.109.232   Wed Nov  2 10:34:20 +0800 2016
bin                                        **Never logged in **
daemon                                     **Never logged in **
adm                                        **Never logged in **
lp                                         **Never logged in **
sync                                       **Never logged in **
shutdown                                   **Never logged in **
halt                                       **Never logged in **
mail                                       **Never logged in **
uucp                                       **Never logged in **
operator                                   **Never logged in **
games                                      **Never logged in **
gopher                                     **Never logged in **
ftp                                        **Never logged in **
nobody                                     **Never logged in **
vcsa                                       **Never logged in **
saslauth                                   **Never logged in **
postfix                                    **Never logged in **
sshd                                       **Never logged in **
ntp                                        **Never logged in **
suda             pts/2    222.79.79.120    Tue Oct 25 16:00:01 +0800 2016

 

/var/log/wtmp

該日誌文件永久記錄每一個用戶登陸、註銷及系統的啓動、停機的事件。所以隨着系統正常運行時間的增長,該文件的大小也會愈來愈大,增長的速度取決於系統用戶登陸的次數。該日誌文件能夠用來查看用戶的登陸記錄,last命令就經過訪問這個文件得到這些信息,並以反序從後向前顯示用戶的登陸記錄,last也能根據用戶、終端tty或時間顯示相應的記錄。

/var/run/utmp

該日誌文件記錄有關當前登陸的每一個用戶的信息。所以這個文件會隨着用戶登陸和註銷系統而不斷變化,它只保留當時聯機的用戶記錄,不會爲用戶保留永久的記錄。系統中須要查詢當前用戶狀態的程序,如 who、w、users、finger等就須要訪問這個文件。該日誌文件並不能包括全部精確的信息,由於某些突發錯誤會終止用戶登陸會話,而系統沒有及時更新 utmp記錄,所以該日誌文件的記錄不是百分之百值得信賴的。

以上說起的3個文件(/var/log/wtmp、/var/run/utmp、/var/log/lastlog)是日誌子系統的關鍵文件,都記錄了用戶登陸的狀況。這些文件的全部記錄都包含了時間戳。這些文件是按二進制保存的,故不能用less、cat之類的命令直接查看這些文件,而是須要使用相關命令經過這些文件而查看。其中,utmp和wtmp文件的數據結構是同樣的,而lastlog文件則使用另外的數據結構,關於它們的具體的數據結構可使用man命令查詢。

每次有一個用戶登陸時,login程序在文件lastlog中查看用戶的UID。若是存在,則把用戶上次登陸、註銷時間和主機名寫到標準輸出中,而後login程序在lastlog中記錄新的登陸時間,打開utmp文件並插入用戶的utmp記錄。該記錄一直用到用戶登陸退出時刪除。utmp文件被各類命令使用,包括who、w、users和finger。

下一步,login程序打開文件wtmp附加用戶的utmp記錄。當用戶登陸退出時,具備更新時間戳的同一utmp記錄附加到文件中。wtmp文件被程序last使用。

相關文章
相關標籤/搜索