參考文獻:http://www.ibm.com/developerworks/cn/linux/theme/security/
系統日志(本文參考了ibm網站的linux安全第二卷)
在 Linux 下使用各種日志檔案,有些用于某些特殊用途,例如:/var/log/xferlog 用于記錄檔案傳輸協定 FTP 的資訊。其他日志檔案,例如 /var/log/messages 檔案通常包含許多系統和核心工具的輸入項。這些日志檔案為系統的安全狀态提供了資訊。
我們主要講解兩個日志守護程式---syslog和klogd------并且簡要叙述了由Linux作業系統生成的其他其他日志檔案。目的是提供基本的配置情況。
syslog 系統日志工具
大部分的 Linux 系統中都要使用 syslog 工具,它是相當靈活的,能使系統根據不同的日志輸入項采取不同的活動。下面将詳細讨論syslog 的工作機制以及在配置檔案 /etc/syslog.conf 中的配置,還将論述利用 syslog 靈活性和功能性進行工作的各種方法。
1) 概述
非常簡單,syslog 工具由一個守護程式組成。它能接受通路系統的日志資訊并且根據 /etc/syslog.conf 配置檔案中的指令處理這些資訊。程式,守護程序和核心提供了通路系統的日志資訊。是以,任何希望生成日志資訊的程式都可以向 syslog 接口呼叫生成該資訊。
通常,syslog 接受來自系統的各種功能的資訊,每個資訊都包括重要級。/etc/syslog.conf 檔案通知 syslogd 如何根據裝置和資訊重要級别來報告資訊。
2) etc/syslog.conf
/etc/syslog.conf 檔案使用下面的形式
facility.level action
空白行和以#開頭的行可以忽略。Facility.level 字段也被稱做 seletor。應該使用一次或多次 tab 鍵分隔 facility 和 action。大部分 Linux 使用這些空格為分隔符。現在分析一下 /etc/syslog.conf 中的三個要素。
facility 指定 syslog 功能,主要包括以下這些:
auth 由 pam_pwdb 報告的認證活動。
authpriv 包括特權資訊如使用者名在内的認證活動
cron 與 cron 和 at 有關的資訊。
daemon 與 inetd 守護程序有關的資訊。
kern 核心資訊,首先通過 klogd 傳遞。
lpr 與列印服務有關的資訊。
mail 與電子郵件有關的資訊
mark syslog 内部功能用于生成時間戳
news 來自新聞伺服器的資訊
syslog 由 syslog 生成的資訊
user 由使用者程式生成的資訊
uucp 由 uucp 生成的資訊
local0----local7 與自定義程式使用,例如使用 local5 做為 ssh 功能
* 通配符代表除了 mark 以外的所有功能
與每個功能對應的優先級是按一定順序排列的,emerg 是最進階,其次是 alert,依次類推。預設時,在 /etc/syslog.conf 記錄中指定的級别為該級别和更進階别。如果希望使用确定的級别可以使用兩個運算符号!(不等)和=。
user.=info
表示告知 syslog 接受所有在 info 級别上的 user 功能資訊。
syslog 級别如下:
emerg 或 panic 該系統不可用
alert 需要立即被修改的條件
crit 阻止某些工具或子系統功能實作的錯誤條件
err 阻止工具或某些子系統部分功能實作的錯誤條件
warning 預警資訊
notice 具有重要性的普通條件
info 提供資訊的消息
debug 不包含函數條件或問題的其他資訊
none 沒有重要級,通常用于排錯
* 所有級别,除了none
action字段所表示的活動具有許多靈活性,特别是,可以使用名稱管道的作用是可以使 syslogd 生成後處理資訊。
syslog 主要支援以下活動
file 指定檔案的絕對路徑
terminal 或 print 完全的串行或并行裝置标志符
@host 遠端的日志伺服器
username 發送資訊到使用 write 的指定使用者中
named pipe 指定使用 mkfifo 指令來建立的 FIFO 檔案的絕對路徑。
3) 調用 syslogd 守護程式
syslog 守護程式是由 /etc/rc.d/init.d/syslog 腳本在運作級2下被調用的,預設不使用選項。但有兩個選項 -r 和 -h 很有用。
如果将要使用一個日志伺服器,必須調用 syslogd -r。預設情況下 syslog 不接受來自遠端系統的資訊。當指定 -r 選項,syslogd 将會監聽從 514 端口上進來的 UDP 包。
如果還希望日志伺服器能傳送日志資訊,可以使用 -h 标志。預設時,syslogd 将忽略使其從一個遠端系統傳送日志資訊到另一個系統的/etc/syslog.conf 輸入項。
上面所述即将/etc/sysconfig/syslog中将Syslogd_Options中加入-r –h參數。
4) klogd 守護程序
klogd 守護程序獲得并記錄 Linux 核心資訊。通常,syslogd 會記錄 klogd 傳來的所有資訊,然而,如果調用帶有 -f filename 變量的 klogd 時,klogd 就在 filename 中記錄所有資訊,而不是傳給 syslogd。當指定另外一個檔案進行日志記錄時,klogd 就向該檔案中寫入所有級别或優先權。Klogd 中沒有和 /etc/syslog.conf 類似的配置檔案。使用 klogd 而避免使用 syslogd 的好處在于可以查找大量錯誤。如果有人入侵了核心,使用 klogd 可以修改錯誤。
5) 其他日志
在 /var/log 和不同版本的系統中以及自己配置的應用程式中都可以找到其他日志檔案。當然,/etc/syslog.conf 列出了由 syslogd 管理的所有日志檔案名和位置。其他日志由其他應用程式管理。apache server 生成 /var/log/htmlaccess.log 檔案記錄客戶通路,生成 /var/log/httpd/error.log 檔案在 syslog 以外查找錯誤。
cron 工具維護的資訊日志檔案 /var/log/cron。當 Linuxconf 工具記錄系統重新配置資訊時,将生成日志檔案如 /var/log/nerconf.log。samba 在 /var/log/samba 中維護其日志資訊。
/var/run/utmp記錄所有目前登入到系統的使用者,使用w或who指令來檢視。
/var/log/wtmp記錄所有使用者的登陸和登出,使用last指令來檢視。
/var/log/lastlog中記錄所有使用者最後一次的登陸時間,使用lastlog指令來檢視。
6) 手工記錄檔
可以使用logger指令來手工操作記錄,
logger xxx >> /var/log/messages
7) 使用logrotate對日志檔案轉儲(本文轉載)
對于Linux 的系統安全來說,日志檔案是極其重要的工具。系統管理者可以使用logrotate 程式用來管理系統中的最新的事件。
對于Linux 的系統安全來說,日志檔案是極其重要的工具。
系統管理者可以使用logrotate 程式用來管理系統中的最新的事件。logrotate 還可以用來備份日志檔案,本篇将通過以下幾部分來介紹
日志檔案的管理:
1、logrotate 配置
2、預設配置 logrotate
3、使用include 選項讀取其他配置檔案
4、使用include 選項覆寫預設配置
5、為指定的檔案配置轉儲參數
一、logrotate 配置
logrotate 程式是一個日志檔案管理工具。用來把舊的日志檔案删除,并建立新的日志檔案,我們把它叫做“轉儲”。我們可以根據日志檔案的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程式來執行。
logrotate 程式還可以用于壓縮日志檔案,以及發送日志到指定的E-mail 。
logrotate 的配置檔案是 /etc/logrotate.conf。主要參數如下表:
參數 功能
compress 通過gzip 壓縮轉儲以後的日志
nocompress 不需要壓縮時,用這個參數
copytruncate 用于還在打開中的日志檔案,把目前日志備份并截斷
nocopytruncate 備份日志檔案但是不截斷
create mode owner group 轉儲檔案,使用指定的檔案模式建立新的日志檔案
nocreate 不建立新的日志檔案
delaycompress 和 compress 一起使用時,轉儲的日志檔案到下一次轉儲時才壓縮
nodelaycompress 覆寫 delaycompress 選項,轉儲同時壓縮。
errors address 專儲時的錯誤資訊發送到指定的Email 位址
ifempty 即使是空檔案也轉儲,這個是 logrotate 的預設選項。
notifempty 如果是空檔案的話,不轉儲
mail address 把轉儲的日志檔案發送到指定的E-mail 位址
nomail 轉儲時不發送日志檔案
olddir directory 轉儲後的日志檔案放入指定的目錄,必須和目前日志檔案在同一個檔案系統
noolddir 轉儲後的日志檔案和目前日志檔案放在同一個目錄下
prerotate/endscript 在轉儲以前需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行
postrotate/endscript 在轉儲以後需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行
daily 指定轉儲周期為每天
weekly 指定轉儲周期為每周
monthly 指定轉儲周期為每月
rotate count 指定日志檔案删除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份
tabootext [+] list 讓logrotate 不轉儲指定擴充名的檔案,預設的擴充名是:.rpm-orig, .rpmsave, v, 和 ~
size size 當日志檔案到達指定的大小時才轉儲,Size 可以指定 bytes (預設)以及KB (sizek)或者MB (sizem).
二、預設配置 logrotate
logrotate 預設的配置募?/etc/logrotate.conf。
Red Hat Linux 預設安裝的檔案内容是:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# send errors to root
errors root
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
1
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own lastlog or wtmp --we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
/var/log/lastlog {
monthly
rotate 1
}
# system-specific logs may be configured here
預設的配置一般放在logrotate.conf 檔案的最開始處,影響整個系統。在本例中就是前面12行。
第三行weekly 指定所有的日志檔案每周轉儲一次。
第五行 rotate 4 指定轉儲檔案的保留 4份。
第七行 errors root 指定錯誤資訊發送給root。
第九行create 指定 logrotate 自動建立新的日志檔案,新的日志檔案具有和
原來的檔案一樣的權限。
第11行 #compress 指定不壓縮轉儲檔案,如果需要壓縮,去掉注釋就可以了。
三、使用include 選項讀取其他配置檔案
include 選項允許系統管理者把分散到幾個檔案的轉儲資訊,集中到一個
主要的配置檔案。當 logrotate 從logrotate.conf 讀到include 選項時,會從指定檔案讀入配置資訊,就好像他們已經在/etc/logrotate.conf 中一樣。
第13行 include /etc/logrotate.d 告訴 logrotate 讀入存放在/etc/logrotate.d 目錄中的日志轉儲參數,當系統中安裝了RPM 軟體包時,使用include 選項十分有用。RPM 軟體包的日志轉儲參數一般存放在/etc/logrotate.d 目錄。
include 選項十分重要,一些應用把日志轉儲參數存放在 /etc/logrotate.d 。
典型的應用有:apache, linuxconf, samba, cron 以及syslog。
這樣,系統管理者隻要管理一個 /etc/logrotate.conf 檔案就可以了。
四、使用include 選項覆寫預設配置
當 /etc/logrotate.conf 讀入檔案時,include 指定的檔案中的轉儲參數将覆寫預設的參數,如下例:
# linuxconf 的參數
/var/log/htmlaccess.log
{ errors jim
notifempty
nocompress
weekly
prerotate
/usr/bin/chattr -a /var/log/htmlaccess.log
endscript
postrotate
/usr/bin/chattr +a /var/log/htmlaccess.log
endscript
}
/var/log/netconf.log
{ nocompress
monthly
}
在這個例子中,當 /etc/logrotate.d/linuxconf 檔案被讀入時,下面的參數将覆寫/etc/logrotate.conf中預設的參數。
Notifempty
errors jim
五、為指定的檔案配置轉儲參數
經常需要為指定檔案配置參數,一個常見的例子就是每月轉儲/var/log/wtmp。為特定檔案而使用的參數格式是:
# 注釋
/full/path/to/file
{
option(s)
}
下面的例子就是每月轉儲 /var/log/wtmp 一次:
#Use logrotate to rotate wtmp
/var/log/wtmp
{
monthly
rotate 1
}
六、其他需要注意的問題
1、盡管花括号的開頭可以和其他文本放在同一行上,但是結尾的花括号必須單獨成行。
2、使用 prerotate 和 postrotate 選項
下面的例子是典型的腳本 /etc/logrotate.d/syslog,這個腳本隻是對
/var/log/messages 有效。
/var/log/messages
{
prerotate
/usr/bin/chattr -a /var/log/messages
endscript
postrotate
/usr/bin/kill -HUP syslogd
/usr/bin/chattr +a /var/log/messages
endscript
}
第一行指定腳本對 /var/log messages 有效
花ê哦閱诓康慕瘧駒誦杏? /var/log/messages
prerotate 指令指定轉儲以前的動作/usr/bin/chattr -a 去掉/var/log/messages檔案的“隻追加”屬性 endscript 結束 prerotate 部分的腳本postrotate 指定轉儲後的動作
/usr/bin/killall -HUP syslogd
用來重新初始化系統日志守護程式 syslogd
/usr/bin/chattr +a /var/log/messages
重新為 /var/log/messages 檔案指定“隻追加”屬性,這樣防治程式員或使用者覆寫此檔案。
最後的 endscript 用于結束 postrotate 部分的腳本
3、logrotate 的運作分為三步:
判斷系統的日志檔案,建立轉儲計劃以及參數,通過cron daemon 運作下面的代碼是 Red Hat Linux 預設的crontab 來每天運作logrotate。
#/etc/cron.daily/logrotate
#! /bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
4、/var/log/messages 不能産生的原因:
這種情況很少見,但是如果你把/etc/services 中的 514/UDP 端口關掉的話,這個檔案就不能産生了。