Linux日誌管理
Syslog是一種工業標準協議,可用於記錄裝置的日誌。這些日誌記錄了系統中發生的大大小小的事情。因此,它對於系統的安全性非常重要。它會將一些系統資訊記錄到登陸檔案中,常見的登陸檔案有以下幾種:
l /var/log/secure:記錄登陸系統訪問的資料檔案,例如pop3,ssh,telnet,ftp等。
l /var/log/wtmp:記錄登陸者的資訊資料,這是個data類型的檔案,需要使用last命令查看。
l /var/log/messages:這個檔案非常重要,只要是系統錯誤資訊都會記錄在這個檔案中。
l /var/log/boot.log:記錄開機或一些服務啟動時所顯示的啟動或關閉資訊。
l /var/log/maillog:記錄郵件訪問或往來的使用者記錄
l /var/log/cron:記錄crontab例行性服務的內容
l /var/log/httpd,/var/log/news,/var/log/mysqld.log,/var/log/samba,/var/log/procmail.log:分別是幾個網路服務的記錄檔案。
登陸檔案的記錄
在新版本的linux中,使用了rsyslog來取代原來的syslog。與rsyslog有關的兩個重要檔案為:/etc/init.d/rsyslog(守護進程)和/etc/rsyslog.conf(設定檔)
通過使用rsyslog.conf檔案,可以對產生的日誌的位置以及相關資訊進行靈活的配置。該設定檔格式如下:
服務名稱[.=!]資訊等級 資訊記錄的檔案名稱或裝置或主機
1)服務名稱
服務名稱表示什麼服務產生的資訊。
Kern : 核心
User : 使用者程式
Damon : 系統守護進程
Mail : 電子郵件系統
Auth : 與安全許可權相關的命令
Lpr : 印表機
News : 新聞群組資訊
Uucp : Uucp程式
Cron : 與例行性命令cron/at有關的資訊
Wtmp : 使用者每次登陸進入和推出的永久記錄
Authpriv : 授權資訊
2)串連符號[.=!]
(.):表示“比後面還要高的等級(含該等級)都記錄下來”。
(.=):表示所需要的等級就是等號後面的等級,其它的不要
(.!):表示不等於,即除了該等級之外的其它等級都需要記錄下來
3)資訊等級(從低到高)
None : 不記錄任何日誌資訊
Debug : 調試級資訊
Info : 一般性資訊
Notice : 出現不尋常的事情
Warning : 警告資訊
Err : 重大錯誤資訊
Crit : 臨界資訊
Alert : 緊急資訊
Emerg : 最高的緊急狀態。
4)資訊記錄的檔案名稱或裝置或主機
檔案的絕對路徑:通常是放在/var/log裡的檔案
印表機或其它:例如/dev/lp0印表機準備
使用者名稱稱:顯示給使用者
遠程主機:例如@192.168.1.100
(*) : 表示“當前線上的所有人”,類似wall命令的意義
例如:mail.info /var/log/maillog
表示要將mail服務相關的,等級大於等於info之上的資訊,都記錄到/var/log/maillog檔案中。
登陸檔案的輪換
登陸檔案在時間長了以後會變得過於龐大,這樣一方面佔用系統資源,另一方面也不利於我們查看。為瞭解決這個問題,linux中引入了登陸檔案的輪換機制:logrotate。注意,rsyslog是使用守護進程的方式來啟動,但是logrotate卻是在規定的時間到來之後才進行登陸檔案的替換,所以logrotate是掛在cron下面進行的。/etc/cron.daily/logrotate記錄了每天要進行的登陸檔案替換行為。
與logrotate有關的兩個檔案為:/etc/logrotate.conf(設定檔)h和logrotate.d(一個存放需要替換的服務的目錄)
Logrotate的主要功能是將舊的登陸檔案重新命名,然後重建立立一個新的空檔案來記錄。
例如:
messages.log是原來的登陸檔案,當達到替換條件時,系統會把它命名為messages.log.1,並建立一個新的messages.log空檔案,當再次達到替換條件時,系統會將messages.log.1重新命名為messages.log.2,messages.log重新命名為messages.log.1,同時再建立一個空的messages.log檔案,以此類推。
但是保留的登陸檔案有一個數量限制,如果超過了這個限制,多餘的檔案就會刪除。
/etc/logrotate.conf的格式如下:
其中weekly表示每周對登陸檔案進行一次替換,rotate 4表示保留4個登陸檔案,create表示是否建立新的登陸檔案來記錄,compress表示是否要壓縮輪替之後的登陸檔案,如果不需要壓縮,就是用uncompress,include /etc/logrotate.d表示把該目錄內的檔案都讀進來進行輪替工作。
注意:這幾個都是預設值,表示如果logrotate.d目錄下的檔案如果沒有設定自己的參數,就會以這幾個參數為準。
下面的/var/log/wtmp和/var/log/btmp這兩段的格式和/etc/logrotate.d目錄下的檔案格式是一致的,表示對這些登陸檔案進行替換的設定。
如/var/log/wtmp這個登陸檔案的設定是,每個月對其進行一次替換,將檔案的使用權限設定為644,擁有者為root,群組為utmp,且僅保留一個輪替備份。
為了防止認為修改這些登陸檔案(有些駭客為了銷毀證據,所以刪除或者認為修改這些登陸檔案),可以使用隱藏屬性+a,來使其只能增加,不能修改。但是這裡又會遇到一個問題,那就是如果設定了+a屬性,那麼當發生輪替時,登陸檔案是無法重新命名的。沒關係,還有別的方法。正確的logrotate的檔案寫法為:
l 將要處理的登陸檔案名稱寫在前面,可以使用空格符分隔多個登陸檔案。
l 用{}包括所有的設定
在設定中,可以在輪替前和輪替後執行一些特殊的指令,這個需要與sharedscripts和endscript來配合使用:
pretotate : 在啟動logrotate之前執行的指令
postrotate :做完logrotate只有啟動的指令。
為瞭解決上面提到的問題,我們可以這樣寫一個logrotate檔案,例如:
/var/log/admin.log{
monthly
size=10M #表示登陸檔案若大於10MB,則主動輪替,不需要考慮一個月期限
rotate 5
nocompress
sharedscripts
prerotate
/usr/bin/chattr –a /var/log/admin.log#在輪替前先取消隱藏屬性,使起可以修改
endscript
sharedscripts
postrotate
/usr/bin/killall –HUP rsyslogd
/usr/bin/chattr +a/var/log/admin.log#在輪替完成後重新加上+a隱藏屬性
endscript
}
注意:/etc/rsyslog.conf與/etc/logrotate.d/*檔案常常搭配使用,/etc/logrotate.d目錄中的檔案在/etc/rsyslog.conf中都有定義