運維日記017 -- RHEL6之系統日誌的管理

運維日記017 – RHEL6之系統日誌的管理

Linux下的日誌記錄了系統每天發生的各種各樣的事情,可以通過它來檢查錯誤發生的原因,或者受到攻擊時攻擊者留下的痕跡。日誌主要的功能有:審計和監測。RHEL6下的日誌文件存放在/var/log目錄下,下面舉幾個常見日誌的例子:

  • /var/log/dmesg
    核心啓動日誌。這個日誌文件記錄了內核啓動時候輸出的信息。

  • /var/log/messages
    系統報錯日誌。

  • /var/log/maillog
    郵件系統日誌。

  • /var/log/secure
    安全信息、認證登錄和與xinetd有關的日誌。

  • /var/log/cron
    計劃任務執行成功與否的日誌。

  • /var/log/wtmp
    記錄所有的登錄和登出。可以用last命令查看所有登錄過系統的用戶和IP。

  • /var/log/btmp
    記錄錯誤的登錄嘗試。可以用lastb命令查看。注意,這個文件如何突然快速增大,可能有人試圖暴力破解用戶密碼。

  • /var/log/lastlog
    記錄每個用戶的最後登錄信息。

動態跟蹤日誌文件:tailf命令

RHEL6下有一個tailf命令非常適合用於監控日誌文件的變化(follow the growth of a log file)。這條命令類似於tail -f,嚴格說來應該與`tail –follow=name`更相似些。與tail -f不同的是,如果文件不增長,它不會去訪問磁盤文件(It is similar to tail -f but does not access the file when it is not growing. This has the side effect of not updating the access time for the file, so a filesystem flush does not occur periodically when no log activity is happening.)。所以tailf特別適合那些便攜機上跟蹤日誌文件,因爲它能省電,因爲減少了磁盤訪問(tailf is extremely useful for monitoring log files on a laptop when logging is infrequent and the user desires that the hard disk spin down to conserve battery life.)。

下面舉一個tailf監控日誌的例子。

# tailf /var/log/secure
... ...
Oct 29 08:31:05 wjm sshd[1160]: Accepted password for wjm from 192.168.1.105 port 43841 ssh2
Oct 29 08:31:05 wjm sshd[1160]: pam_unix(sshd:session): session opened for user wjm by (uid=0)
... ...

這時,屏幕顯示的末尾就是系統輸出的最新的日誌信息。此時你可以通過ssh遠程登錄一下該主機,可以看到屏幕上又會輸出一條類似下面這樣的日誌信息:

Oct 29 08:31:05 wjm sshd[1160]: Accepted password for wjm from 192.168.1.105 port 43841 ssh2
Oct 29 08:31:05 wjm sshd[1160]: pam_unix(sshd:session): session opened for user wjm by (uid=0)

RHEL6下有一個logger命令,可以直接向系統日誌中寫入信息。例如:

# logger 'hello, this is a piece of faked log message.'

# tailf /var/log/messge
... ...
Oct 29 08:48:07 root root: hello, this is a piece of faked log message.

日誌的分類和分級

Linux下的日誌採用先分類,然後在每個類別下分級的管理模式。

主要的七種日誌分類:

名稱 含義
authpriv 安全認證相關
cron at和cron定時任務相關
deamon 定時任務相關
kern 內核產生
lpr 打印系統產生
mail 郵件系統產生
syslog 日誌服務本身

除上面列出的七類常見日誌以外,還有news(新聞系統相關)、uucp(unix to unix copy)等日誌類型(目前已經不太常用)。

另外,還有local0~lobal7這八個日誌類型,是系統保留的,可以供其他程序使用或者用戶自定義使用。

八種日誌級別(按照由低到高順序排列):

級別 含義
debug 排錯信息
info 正常信息
notice 稍微要注意的
warn 警告
err(error) 錯誤
crit(critical) 關鍵的錯誤
alert 警報警惕
emerg(emergence) 緊急突發事件

日誌的總管家:rsyslog

在RHEL6中日誌由系統服務rsyslog進行管理和控制。最小化安裝RHEL6後,rsyslog服務默認是開啓的。

# chkconfig --list | grep rsyslog
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off

該服務的配置文件位於/etc/rsyslog.conf,下面對該配置文件進行簡單描述。

# vi /etc/rsyslog.conf
... ...
#### MODULES ####

$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
#$ModLoad immark  # provides --MARK-- message capability

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
... ...

這一節設置rsyslog服務加載的模塊。其中#號表示註釋。其中比較重要的是#$ModLoad imudp#$UDPServerRun 514兩行,取消掉該行註釋後,表示允許514端口接收使用UDP協議轉發過來的日誌。這樣可以把本主機配置爲集中式的日誌服務器,它接收並存儲其它主機的日誌,提高了整個系統的安全性。#$ModLoad imtcp#$InputTCPServerRun 514功能相同,只不過採用的是TCP協議。

... ...
#### RULES ####

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
... ...

這一節定義了不同類型和級別的日誌應存放在哪裏。例如,*.info;mail.none;authpriv.none;cron.none /var/log/messages表示除了mail日誌、authpriv日誌和cron日誌之外,其它的所有類型info級別及以上的日誌都存放在/var/log/messages下。下面簡要給出rsyslog.conf的日誌記錄規則:

  • . 代表該類型比後面還要高的等級(包括該等級)的日誌都要被記錄下來,其中.前面爲日誌類型,.後面爲日誌等級。例如:mail.info表示凡是mail類型的且等級大於或等於info級別的日誌都記錄下來。
  • .= 代表等於該等級的日誌都要被記錄下來。
  • .! 代表不等於該等級的日誌都要被記錄下來。
  • .none 該類型的日誌都不做記錄。
  • * 表示任意類型或者級別

而日誌記錄的位置有三種類型:

  • 本地日誌文件。通常就是/var/log目錄下。
  • 遠程日誌服務器。
  • 直接彈出在屏幕上。類似與wall命令。
mail.*                                                  -/var/log/maillog

rsyslog.conf配置文件中上面這行/var/log/maillog前面的-是什麼意思呢?

這裏的-代表每當有新日誌產生時,rsyslog會先寫入緩存,而不是立即更新日誌文件,只有當緩存寫滿時纔會批量更新日誌文件。這樣可以減少寫文件的次數。通常日誌信息較多而且不是特別重要時,可以採用這種策略。

實戰一:自定義sshd日誌類型及日誌文件

系統將sshd產生的日誌定義爲authpriv類型的,保存在/var/log/secure下。請自定義sshd的日誌類型爲local0,並保存在/var/log/sshdlog文件。

  • 修改sshd配置文件
# vi /etc/ssh/sshd_config

... ...
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#SyslogFacility AUTHPRIV
SyslogFacility local0
... ...
  • 重啓sshd服務
# service sshd restart
  • 修改rsyslog配置文件
# vi /etc/rsyslog.conf

... ...
local0.*                                                /var/log/sshd.log
... ...
  • 重啓rsyslog服務
# service sshd restart
  • 測試
# ssh [email protected]
# tailf /var/log/sshd.log

實戰二:配置一個簡單的遠程日誌服務器

1、啓動兩臺RHEL6虛擬機,其中一臺主機ip地址爲192.168.1.111,將其設置爲日誌服務器。另一臺ip地址192.168.1.112,設置爲客戶端用於測試日誌服務器是否正確配置。
2、配置日誌服務器主機的/etc/rsyslog.conf文件,並重啓rsyslog服務。

# vi /etc/rsyslog.conf
... ...
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
... ...

# service rsyslog restart

3、配置客戶端主機的/etc/rsyslog.conf文件,定義其日誌向日志服務器發送,然後重啓rsyslog服務。

# vi /etc/rsyslog.conf
... ...
#### RULES ####
... ...
*.info          @192.168.1.111
... ...

# service rsyslog restart

4、配置日誌服務器主機的防火牆,使其可以接收客戶端發來的日誌信息。簡單起見,這裏直接關閉了日誌服務器主機的防火牆。

# iptalbes -F

5、客戶端主機用logger命令產生一條日誌,用tailf觀察一下日誌服務器的日誌變化。

# tailf /var/log/messages

# logger "this message is from 192.168.1.112"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章