【目標(biāo)】
作為系統(tǒng)管理員,我們會遇到一些奇怪的問題,如網(wǎng)絡(luò)無法連通、PPP不能用了、XWindow無法啟動等。這時候通常需要到日志文件中去尋找一些蛛絲馬跡來幫助我們解決問題。為了保證系統(tǒng)正常運行,處理每一天可能遇到的各種問題,認(rèn)真地讀取和分析日志文件是系統(tǒng)管理員的一項非常重要的任務(wù)。通過對本章的學(xué)習(xí),我們應(yīng)該掌握Linux日志系統(tǒng)運行的原理、熟悉常見日志的格式,能夠借助日志對各種情況進(jìn)行處理。
【重點內(nèi)容】
日志子系統(tǒng)類別
重要的日志文件
日志文件的后臺進(jìn)程
logrotate
日志文件的分析工具
15.1 Linux日志概述
系統(tǒng)日志是對特定事件的記錄。一個系統(tǒng)日志中所記錄的事件的類型是由特定的日志的性質(zhì)以及控制這些被記錄事件的任何配置決定的。一般情況下,系統(tǒng)日志是用戶可以直接閱讀的文本文件,其中包含了一個時間戳和這個消息或者子系統(tǒng)所特有的其他信息。
日志對于系統(tǒng)安全來說尤其重要,由于日志記錄了系統(tǒng)每天發(fā)生的各種各樣的事情,你可以通過他來檢查錯誤發(fā)生的原因,或者受到攻擊時攻擊者留下的痕跡。日志可以幫助我們審計和監(jiān)測,還可以實時地監(jiān)測系統(tǒng)狀態(tài),監(jiān)測和追蹤侵入者等。
15.2 日志子系統(tǒng)類別
在Linux系統(tǒng)中,有三個主要的日志子系統(tǒng):
連接時間日志子系統(tǒng)
進(jìn)程統(tǒng)計日志子系統(tǒng)
錯誤日志子系統(tǒng)
15.2.1 連接時間日志
15.2.1.1 運行原理與相關(guān)文件
utmp、wtmp和lastlog日志文件是Linux日志系統(tǒng)的關(guān)鍵,它保存用戶登錄進(jìn)入和退出的紀(jì)錄。連接時間日志——由多個程序執(zhí)行,把紀(jì)錄寫入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系統(tǒng)管理員能夠跟蹤誰在何時登錄到系統(tǒng)。
有關(guān)當(dāng)前登錄用戶的信息記錄在文件utmp中;登錄進(jìn)入和退出紀(jì)錄在文件wtmp中;最后一次登錄文件可以用lastlog命令察看。數(shù)據(jù)交換、關(guān)機和重起也記錄在wtmp文件中。所有的紀(jì)錄都包含時間戳。這些文件(lastlog通常不大)在具有大量用戶的系統(tǒng)中增長十分迅速。例如wtmp文件可以無限增長,除非定期截取。許多系統(tǒng)以一天或者一周為單位把wtmp配置成循環(huán)使用。它通常由cron運行的腳本來修改。這些腳本重新命名并循環(huán)使用wtmp文件。通常,wtmp在第一天結(jié)束后命名為wtmp.1;第二天后wtmp.1變?yōu)閣tmp.2等等,直到wtmp.7。
每次有一個用戶登錄時,login程序在文件lastlog中察看用戶的UID。如果找到了,則把用戶上次登錄、退出時間和主機名寫到標(biāo)準(zhǔn)輸出中,然后login程序在lastlog中紀(jì)錄新的登錄時間。在新的lastlog紀(jì)錄寫入后,utmp文件打開并插入用戶的utmp紀(jì)錄。該紀(jì)錄一直用到用戶登錄退出時刪除。utmp文件被各種命令文件使用,包括who、w、users和finger。
下一步,login程序打開文件wtmp附加用戶的utmp紀(jì)錄。當(dāng)用戶登錄退出時,具有更新時間戳的同一utmp紀(jì)錄附加到文件中。wtmp文件被程序last和ac使用。
15.2.1.2 查看方式
wtmp和utmp文件都是二進(jìn)制文件,他們不能被諸如tail命令剪貼或合并(使用cat命令)。用戶需要使用who、w、users、last和ac來使用這兩個文件包含的信息。
who:who命令查詢utmp文件并報告當(dāng)前登錄的每個用戶。Who的缺省輸出包括用戶名、終端類型、登錄日期及遠(yuǎn)程主機。例如:who命令的顯示結(jié)果:
chyang pts/0 Aug 18 15:06
ynguo pts/2 Aug 18 15:32
ynguo pts/3 Aug 18 13:55
lewis pts/4 Aug 18 13:35
ynguo pts/7 Aug 18 14:12
ylou pts/8 Aug 18 14:15
如果指明了wtmp文件名,則who命令查詢所有以前的紀(jì)錄。命令who /var/log/wtmp將報告自從wtmp文件創(chuàng)建或刪改以來的每一次登錄。
w:w命令查詢utmp文件并顯示當(dāng)前系統(tǒng)中每個用戶和它所運行的進(jìn)程信息。例如:w可以顯示
3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
chyang pts/0 202.38.68.242 3:06pm 2:04 0.08s 0.04s -bash
ynguo pts/2 202.38.79.47 3:32pm 0.00s 0.14s 0.05 w
lewis pts/3 202.38.64.233 1:55pm 30:39 0.27s 0.22s -bash
lewis pts/4 202.38.64.233 1:35pm 6.00s 4.03s 0.01s sh /home/users/
ynguo pts/7 simba.nic.ustc.e 2:12pm 0.00s 0.47s 0.24s telnet mail
ylou pts/8 202.38.64.235 2:15pm 1:09m 0.10s 0.04s -bash
users:users用單獨的一行打印出當(dāng)前登錄的用戶,每個顯示的用戶名對應(yīng)一個登錄會話。如果一個用戶有不止一個登錄會話,那他的用戶名將顯示相同的次數(shù)。例如:users(回車)顯示:chyang lewis lewis ylou ynguo ynguo
last:last命令往回搜索wtmp來顯示自從文件第一次創(chuàng)建以來登錄過的用戶。例如:
chyang pts/9 202.38.68.242 Tue Aug 1 08:34 - 11:23 (02:49)
cfan pts/6 202.38.64.224 Tue Aug 1 08:33 - 08:48 (00:14)
chyang pts/4 202.38.68.242 Tue Aug 1 08:32 - 12:13 (03:40)
lewis pts/3 202.38.64.233 Tue Aug 1 08:06 - 11:09 (03:03)
lewis pts/2 202.38.64.233 Tue Aug 1 07:56 - 11:09 (03:12)
如果指明了用戶,那么last只報告該用戶的近期活動,例如:last ynguo(回車)顯示:
ynguo pts/4 simba.nic.ustc.e Fri Aug 4 16:50 - 08:20 (15:30)
ynguo pts/4 simba.nic.ustc.e Thu Aug 3 23:55 - 04:40 (04:44)
ynguo pts/11 simba.nic.ustc.e Thu Aug 3 20:45 - 22:02 (01:16)
ynguo pts/0 simba.nic.ustc.e Thu Aug 3 03:17 - 05:42 (02:25)
ynguo pts/0 simba.nic.ustc.e Wed Aug 2 01:04 - 03:16 1+02:12)
ynguo pts/0 simba.nic.ustc.e Wed Aug 2 00:43 - 00:54 (00:11)
ynguo pts/9 simba.nic.ustc.e Thu Aug 1 20:30 - 21:26 (00:55)
ac:ac命令根據(jù)當(dāng)前的/var/log/wtmp文件中的登錄進(jìn)入和退出來報告用戶連結(jié)的時間(小時),如果不使用標(biāo)志,則報告總的時間。例如:ac(回車)顯示:total 5177.47
ac -d(回車)顯示每天的總的連結(jié)時間
Aug 12 total 261.87
Aug 13 total 351.39
Aug 14 total 396.09
Aug 15 total 462.63
Aug 16 total 270.45
Aug 17 total 104.29
Today total 179.02
ac -p (回車)顯示每個用戶的總的連接時間
ynguo 193.23
yucao 3.35
rong 133.40
hdai 10.52
zjzhu 52.87
zqzhou 13.14
liangliu 24.34
total 5178.24
lastlog:lastlog文件在每次有用戶登錄時被查詢??梢允褂胠astlog命令來檢查某特定用戶上次登錄的時間,并格式化輸出上次登錄日志/var/log/lastlog的內(nèi)容。它根據(jù)UID排序顯示登錄名、端口號(tty)和上次登錄時間。如果一個用戶從未登錄過,lastlog顯示"**Never logged**。注意需要以root運行該命令,例如:
rong 5 202.38.64.187 Fri Aug 18 15:57:01 +0800 2000
dbb **Never logged in**
xinchen **Never logged in**
pb9511 **Never logged in**
xchen 0 202.38.64.190 Sun Aug 13 10:01:22 +0800 2000
另外,可以加一些參數(shù),例如,last -u 102將報告UID為102的用戶;last -t 7表示限制上一周的報告。
15.2.2 進(jìn)程統(tǒng)計日志
由系統(tǒng)內(nèi)核執(zhí)行。當(dāng)一個進(jìn)程終止時,為每個進(jìn)程往進(jìn)程統(tǒng)計文件(pacct或acct)中寫一個紀(jì)錄。進(jìn)程統(tǒng)計的目的是為系統(tǒng)中的基本服務(wù)提供命令使用統(tǒng)計。
Linux可以跟蹤每個用戶運行的每條命令,如果想知道昨晚弄亂了哪些重要的文件,進(jìn)程統(tǒng)計子系統(tǒng)可以告訴你。它對還跟蹤一個侵入者有幫助。與連接時間日志不同,進(jìn)程統(tǒng)計子系統(tǒng)缺省不激活,它必須啟動。在Linux系統(tǒng)中啟動進(jìn)程統(tǒng)計使用accton命令,必須用root身份來運行。Accton命令的形式accton file,file必須先存在。先使用touch命令來創(chuàng)建pacct文件:touch /var/log/pacct,然后運行accton: accton /var/log/pacct。一旦accton被激活,就可以使用lastcomm命令監(jiān)測系統(tǒng)中任何時候執(zhí)行的命令。若要關(guān)閉統(tǒng)計,可以使用不帶任何參數(shù)的accton命令。
lastcomm命令報告以前執(zhí)行的文件。不帶參數(shù)時,lastcomm命令顯示當(dāng)前統(tǒng)計文件生命周期內(nèi)紀(jì)錄的所有命令的有關(guān)信息。包括命令名、用戶、tty、命令花費的CPU時間和一個時間戳。如果系統(tǒng)有許多用戶,輸入則可能很長。下面的例子:
crond F root ?? 0.00 secs Sun Aug 20 00:16
promisc_check root ?? 0.01 secs Sun Aug 20 00:16
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.02 secs Sun Aug 20 00:15
ping6.pl F root ?? 0.02 secs Sun Aug 20 00:15
sh root 0.02 secs Sun Aug 20 00:15
ping S root 1.34 secs Sun Aug 20 00:15
locate root ttyp0 1.34 secs Sun Aug 20 00:15
accton S root ttyp0 0.00 secs Sun Aug 20 00:15
進(jìn)程統(tǒng)計的一個問題是pacct文件可能增長的十分迅速。這時需要交互式的或經(jīng)過cron機制運行sa命令來保持日志數(shù)據(jù)在系統(tǒng)控制內(nèi)。sa命令報告、清理并維護(hù)進(jìn)程統(tǒng)計文件。它能把/var/log/pacct中的信息壓縮到摘要文件/var/log/savacct和/var/log/usracct中。這些摘要包含按命令名和用戶名分類的系統(tǒng)統(tǒng)計數(shù)據(jù)。sa缺省情況下先讀它們,然后讀pacct文件,使報告能包含所有的可用信息。sa的輸出有下面一些標(biāo)記項:
avio——每次執(zhí)行的平均I/O操作次數(shù)
cp——用戶和系統(tǒng)時間總和,以分鐘計
cpu——和cp一樣
k——內(nèi)核使用的平均CPU時間,以1k為單位
k*sec——CPU存儲完整性,以1k-core秒
re——實時時間,以分鐘計
s——系統(tǒng)時間,以分鐘計
tio——I/O操作的總數(shù)
u——用戶時間,以分鐘計
例如:
842 173.26re 4.30cp 0avio 358k
2 10.98re 4.06cp 0avio 299k find
9 24.80re 0.05cp 0avio 291k ***other
105 30.44re 0.03cp 0avio 302k ping
104 30.55re 0.03cp 0avio 394k sh
162 0.11re 0.03cp 0avio 413k security.sh*
154 0.03re 0.02cp 0avio 273k ls
56 31.61re 0.02cp 0avio 823k ping6.pl*
2 3.23re 0.02cp 0avio 822k ping6.pl
35 0.02re 0.01cp 0avio 257k md5sum
97 0.02re 0.01cp 0avio 263k initlog
12 0.19re 0.01cp 0avio 399k promisc_check.s
15 0.09re 0.00cp 0avio 288k grep
11 0.08re 0.00cp 0avio 332k awk
用戶還可以根據(jù)用戶而不是命令來提供一個摘要報告。例如sa -m顯示如下:
885 173.28re 4.31cp 0avk
root 879 173.23re 4.31cp 0avk
alias 3 0.05re 0.00cp 0avk
qmailp 3 0.01re 0.00cp 0avk
15.2.3 錯誤日志
由syslogd(8)執(zhí)行。各種系統(tǒng)守護(hù)進(jìn)程、用戶程序和內(nèi)核通過syslog(3)向文件/var/log/messages報告值得注意的事件。另外有許多Linux程序也會創(chuàng)建日志,如HTTP和FTP這樣提供網(wǎng)絡(luò)服務(wù)的服務(wù)器也保持詳細(xì)的日志。
syslog已被許多日志函數(shù)采納,它用在許多保護(hù)措施中——任何程序都可以通過syslog 紀(jì)錄事件。syslog可以紀(jì)錄系統(tǒng)事件,可以寫到一個文件或設(shè)備中,或給用戶發(fā)送一個信息。它能紀(jì)錄本地事件或通過網(wǎng)絡(luò)紀(jì)錄另一個主機上的事件。
syslog設(shè)備依據(jù)兩個重要的文件:/etc/syslogd(守護(hù)進(jìn)程)和/etc/syslog.conf配置文件,習(xí)慣上,多數(shù)syslog信息被寫到/var/adm或/var/log目錄下的信息文件中(messages.*)。一個典型的syslog紀(jì)錄包括生成程序的名字和一個文本信息。它還包括一個設(shè)備和一個優(yōu)先級范圍(但不在日志中出現(xiàn))。
每個syslog消息被賦予下面的主要設(shè)備之一:
LOG_AUTH——認(rèn)證系統(tǒng):login、su、getty等
LOG_AUTHPRIV——同LOG_AUTH,但只登錄到所選擇的單個用戶可讀的文件中
LOG_CRON——cron守護(hù)進(jìn)程
LOG_DAEMON——其他系統(tǒng)守護(hù)進(jìn)程,如routed
LOG_FTP——文件傳輸協(xié)議:ftpd、tftpd
LOG_KERN——內(nèi)核產(chǎn)生的消息
LOG_LPR——系統(tǒng)打印機緩沖池:lpr、lpd
LOG_MAIL——電子郵件系統(tǒng)
LOG_NEWS——網(wǎng)絡(luò)新聞系統(tǒng)
LOG_SYSLOG——由syslogd(8)產(chǎn)生的內(nèi)部消息
LOG_USER——隨機用戶進(jìn)程產(chǎn)生的消息
LOG_UUCP——UUCP子系統(tǒng)
LOG_LOCAL0~LOG_LOCAL7——為本地使用保留
syslog為每個事件賦予幾個不同的優(yōu)先級:
LOG_EMERG——緊急情況
LOG_ALERT——應(yīng)該被立即改正的問題,如系統(tǒng)數(shù)據(jù)庫破壞
LOG_CRIT——重要情況,如硬盤錯誤
LOG_ERR——錯誤
LOG_WARNING——警告信息
LOG_NOTICE——不是錯誤情況,但是可能需要處理
LOG_INFO——情報信息
LOG_DEBUG——包含情報的信息,通常旨在調(diào)試一個程序時使用
syslog.conf文件指明syslogd程序紀(jì)錄日志的行為,該程序在啟動時查詢配置文件。該文件由不同程序或消息分類的單個條目組成,每個占一行。對每類消息提供一個選擇域和一個動作域。這些域由tab隔開:選擇域指明消息的類型和優(yōu)先級;動作域指明syslogd接收到一個與選擇標(biāo)準(zhǔn)相匹配的消息時所執(zhí)行的動作。每個選項是由設(shè)備和優(yōu)先級組成。當(dāng)指明一個優(yōu)先級時,syslogd將紀(jì)錄一個擁有相同或更高優(yōu)先級的消息。所以如果指明"crit",那所有標(biāo)為crit、alert和emerg的消息將被紀(jì)錄。每行的行動域指明當(dāng)選擇域選擇了一個給定消息后應(yīng)該把他發(fā)送到哪兒。例如,如果想把所有郵件消息紀(jì)錄到一個文件中,如下:
#Log all the mail messages in one place
mail.* /var/log/maillog
其他設(shè)備也有自己的日志。UUCP和news設(shè)備能產(chǎn)生許多外部消息。它把這些消息存到自己的日志(/var/log/spooler)中并把級別限為"err"或更高。例如:
# Save mail and news errors of level err and higher in aspecial file.
uucp,news.crit /var/log/spooler
當(dāng)一個緊急消息到來時,可能想讓所有的用戶都得到。也可能想讓自己的日志接收并保存。
#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn
alert消息應(yīng)該寫到root和tiger的個人賬號中:
#Root and Tiger get alert and higher messages
*.alert root,tiger
有時syslogd將產(chǎn)生大量的消息。例如內(nèi)核(“kern”設(shè)備)可能很冗長。用戶可能想把內(nèi)核消息紀(jì)錄到/dev/console中。下面的例子表明內(nèi)核日志紀(jì)錄被注釋掉了:
#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console
用戶可以在一行中指明所有的設(shè)備。下面的例子把info或更高級別的消息送到/var/log/messages,除了mail以外。級別“none”禁止一個設(shè)備:
#Log anything(except mail)of level info or higher
#Don't log private authentication messages!
*.info:mail.none;authpriv.none /var/log/messages
在有些情況下,可以把日志送到打印機,這樣網(wǎng)絡(luò)入侵者怎么修改日志都沒有用了。通常要廣泛紀(jì)錄日志。syslog設(shè)備是一個攻擊者的顯著目標(biāo)。一個為其他主機維護(hù)日志的系統(tǒng)對于防范服務(wù)器攻擊特別脆弱,因此要特別注意。
15.3 常用日志文件介紹
以上提到的三個日志子系統(tǒng)是Linux日志系統(tǒng)的基礎(chǔ),利用這些日志的常用方式就是查看閱讀日志文件。日志文件一般者是純文本的文件,每一行就是一個消息。只要是在Linux下能夠處理純文本的工具都能用來查看日志文件。如簡單地用cat命名就能把“/var/log/messages”文件中的消息顯示到屏幕上,但是如果這個文件不只一頁,那么就會因為顯示滾動得太快看不清文件的內(nèi)容。
日志文件總是很大的,因為從你第一次啟動Linux開始,消息都累積在日志文件中。請注意最好不要用cat顯示日志文件的內(nèi)容,最好也不要用文本編輯器打開日志文件,這是因為一方面很耗費內(nèi)存,另一方面不允許隨意改動日志文件??慈罩疚募囊粋€比較好的方法是用象more或less那樣的分頁顯示程序,或者用grep查找特定的消息。我們先用less顯示“/var/log/messages”。在圖表二可以看到從日志文件中取出來的一些消息。每一行表示一個消息,而且都由四個域的固定格式組成:
時間標(biāo)簽(timestamp),表示消息發(fā)出的日期和時間
主機名(hostname)(在我們的例子中主機名為rd002),表示生成消息的計算機的名字。如果只有一臺計算機,主機名就可能沒有必要了。但是,如果在網(wǎng)絡(luò)環(huán)境中使用syslog,那么就可能要把不同主機的消息發(fā)送到一臺服務(wù)器上集中處理。
生成消息的子系統(tǒng)的名字。可以是“kernel”,表示消息來自內(nèi)核,或者是進(jìn)程的名字,表示發(fā)出消息的程序的名字。在方括號里的是進(jìn)程的PID。
消息(message),剩下的部分就是消息的內(nèi)容了。
Sep 12 10:23:44 rd002 sendmail[85]: starting daemon (8.9.3): SMTP+queueing@00:15:00 ...
Sep 12 11:06:11 rd002 passwd[337]: password for `progs' changed by `root' ...
Sep 12 11:08:30 rd002 kernel: Disc change detected. ...
Sep 12 16:06:01 rd002 login[101]: ROOT LOGIN on `tty2' ...
Sep 18 10:53:26 rd002 identd[251]: Connection from betelgeuse.branzo.it
Sep 18 10:53:26 rd002 identd[251]: from: 192.168.9.4 ( betelgeuse.branzo.it ) for: 1024, 21 ...
Sep 18 10:54:26 rd002 su[262]: + ttyp0 branzo-progs ...
Sep 18 11:17:12 rd002 -- MARK --
Sep 18 11:37:12 rd002 -- MARK --
Figure 2: Some logs extracted from /var/log/messages
上面的例子中,第一行是sendmail發(fā)出的消息,sendmail守護(hù)進(jìn)程(daemon)負(fù)責(zé)管理收到和發(fā)出的消息。這一行是守護(hù)進(jìn)程正常啟動的消息。第二行是來自passwd的消息,提醒我們用戶“progs”的口令被“root”改變過。以后其它的消息,報告我們系統(tǒng)的運行情況。實際上在“/var/log/message”文件中的消息都不是特別重要或緊急的。有一個特殊的消息是“MARK”消息,在默認(rèn)情況下每隔20分鐘就會生成一次表示系統(tǒng)還在正常運行?!癕ARK”消息很象“心跳信號”(heartbeat),例如:“心跳信號”經(jīng)常用來確認(rèn)遠(yuǎn)程主機是否還在運行?!癕ARK”消息另外的一個用處是用作事后分析,能夠幫助系統(tǒng)管理員確定系統(tǒng)死機發(fā)生的時間。
access-log 紀(jì)錄HTTP/web的傳輸
acct/pacct 紀(jì)錄用戶命令
aculog 紀(jì)錄MODEM的活動
btmp 紀(jì)錄失敗的紀(jì)錄
dmesg
lastlog 紀(jì)錄最近幾次成功登錄的事件和最后一次不成功的登錄
messages 從syslog中記錄信息(有的鏈接到syslog文件)
sudolog 紀(jì)錄使用sudo發(fā)出的命令
sulog 紀(jì)錄使用su命令的使用
syslog 從syslog中記錄信息(通常鏈接到messages文件)
utmp 紀(jì)錄當(dāng)前登錄的每個用戶
wtmp 一個用戶每次登錄進(jìn)入和退出時間的永久紀(jì)錄
xferlog 紀(jì)錄FTP會話
我們在本節(jié)向大家介紹一下Linux中兩個重要的和功能全面的日志文件/var/log/dmesg和/var/log/messages。
15.3.1 /var/log/dmesg
/var/log/dmesg文件保存內(nèi)核啟動的信息,在這個文件里,用戶可以看到內(nèi)核和各種驅(qū)動程序的加載,加載硬件驅(qū)動時系統(tǒng)也會顯示出相應(yīng)的信息。我們一般可以通過/var/log/dmesg查看某個硬件設(shè)備是否已經(jīng)被系統(tǒng)識別,或是看它是否正常運行。如果某個驅(qū)動由于配置錯誤或硬件本身有問題時,用戶就可以使用/var/log/dmesg文件來找原因。這個文件可以用文本編輯器來查看,也可以通過dmesg命令顯示出來。
下面我們列出一個dmesg文件的例子:
1 Linux version 2.4.18-5.0 (root@porky.devel.redhat.com) (gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #1 Tue Mar 7 20:53:41 EST 2000
2 Detected 300683434 Hz processor.
3 Console: colour VGA+ 80x25
4 Calibrating delay loop... 599.65 BogoMIPS
5 Memory: 63008k/65536k available (1084k kernel code, 412k reserved, 968k data, 64k init, 0k bigmem)
6 Dentry hash table entries: 262144 (order 9, 2048k)
7 Buffer cache hash table entries: 65536 (order 6, 256k)
8 Page cache hash table entries: 16384 (order 4, 64k)
9 VFS: Diskquotas version dquot_6.4.0 initialized
10 CPU: AMD AMD-K6(tm) 3D processor stepping 00
11 Checking 386/387 coupling... OK, FPU using exception 16 error reporting.
12 Checking 'hlt' instruction... OK.
13 POSIX conformance testing by UNIFIX
14 PCI: PCI BIOS revision 2.10 entry at 0xfb490
15 PCI: Using configuration type 1
16 PCI: Probing PCI hardware
17 PCI: 00:38 [1106/0586]: Work around ISA DMA hangs (00)
18 Activating ISA DMA hang workarounds.
19 Linux NET4.0 for Linux 2.2
20 Based upon Swansea University Computer Society NET3.039
21 NET4: Unix domain sockets 1.0 for Linux NET4.0.
22 NET4: Linux TCP/IP 1.0 for NET4.0
23 IP Protocols: ICMP, UDP, TCP, IGMP
24 TCP: Hash tables configured (ehash 65536 bhash 65536)
25 Initializing RT netlink socket
26 Starting kswapd v 1.5
27 Detected PS/2 Mouse Port.
28 Serial driver version 4.27 with MANY_PORTS MULTIPORT SHARE_IRQ enabled
29 ttyS00 at 0x03f8 (irq = 4) is a 16550A
30 ttyS01 at 0x02f8 (irq = 3) is a 16550A
31 pty: 256 Unix98 ptys configured
32 apm: BIOS version 1.2 Flags 0x07 (Driver version 1.9)
33 Real Time Clock Driver v1.09
34 RAM disk driver initialized: 16 RAM disks of 4096K size
35 VP_IDE: IDE controller on PCI bus 00 dev 39
36 VP_IDE: not 100% native mode: will probe irqs later
37 ide0: BM-DMA at 0xe000-0xe007, BIOS settings: hda:DMA, hdb:DMA
38 ide1: BM-DMA at 0xe008-0xe00f, BIOS settings: hdc:DMA, hdd:DMA
39 hda: Maxtor 51369U3, ATA DISK drive
40 hdb: IDE/ATAPI CD-ROM 32X, ATAPI CDROM drive
41 ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
42 hda: Maxtor 51369U3, 12949MB w/2048kB Cache, CHS=6577/64/63
43 hdb: ATAPI 16X CD-ROM drive, 128kB Cache
44 Uniform CDROM driver Revision: 2.56
45 Floppy drive(s): fd0 is 1.44M
46 FDC 0 is a post-1991 82077
47 md driver 0.90.0 MAX_MD_DEVS=256, MAX_REAL=12
48 raid5: measuring checksumming speed
49 raid5: MMX detected, trying high-speed MMX checksum routines
50 pII_mmx : 761.238 MB/sec
51 p5_mmx : 726.567 MB/sec
52 8regs : 447.675 MB/sec
53 32regs : 308.610 MB/sec
54 using fastest function: pII_mmx (761.238 MB/sec)
55 scsi : 0 hosts.
56 scsi : detected total.
57 md.c: sizeof(mdp_super_t) = 4096
58 Partition check:
59 hda: hda1 hda2 < hda5 hda6 >
60 autodetecting RAID arrays
61 autorun ...
62 ... autorun DONE.
63 VFS: Mounted root (ext2 filesystem) readonly.
64 Freeing unused kernel memory: 64k freed
65 Adding Swap: 66488k swap-space (priority -1)
66 ne2k-pci.c:vpre-1.00e 5/27/99 D. Becker/P. Gortmaker http://cesdis.gsfc.nasa.gov/linux/drivers/ne2k-pci.html
67 ne2k-pci.c: PCI NE2000 clone 'RealTek RTL-8029' at I/O 0xe800, IRQ 11.
68 eth0: RealTek RTL-8029 found at 0xe800, IRQ 11, 00:80:AD:41:22:10.
69 VFS: Disk change detected on device fd(2,0)
下面我們對一些重要的信息進(jìn)行解釋:
Linux version 2.4.18-5.0 (root@porky.devel.redhat.com) (gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #1 Tue Mar 7 20:53:41 EST 2000
首先顯示的是內(nèi)核的版本,2.4.18-build(5),然后是誰建立和編譯和這個內(nèi)核版本的,所用的編譯器是什么,這里是gcc。這些信息有時候很重要,因為有的內(nèi)核版本和gcc版本不完完全匹配。
Detected 1700.327 MHz processor
CPU是P4 1.7G的。
Console: colour VGA+ 80x25
監(jiān)視器是標(biāo)準(zhǔn)的PC監(jiān)視器。
Calibrating delay loop... 3374.09 BogoMIPS
BogoMIPS的benchmark數(shù)值。也是衡量CPU性能的一個參數(shù)。
Memory: 503332k/516032k available (1326k kernel code, 10140k reserved, 999k data, 212k init, 0k highmem)
物理內(nèi)存的大小,這里的內(nèi)存是512MB。
Buffer cache hash table entries: 65536 (order 6, 256k)
緩沖區(qū)表的數(shù)目。緩沖區(qū)的作用是在把數(shù)據(jù)寫入塊設(shè)備之前進(jìn)行緩存,后來又用來對文件系統(tǒng)的元數(shù)據(jù)進(jìn)行緩存,如inode的信息。
VFS: Diskquotas version dquot_6.4.0 initialized
內(nèi)核支持磁盤限額。
CPU: Intel(R) Celeron(R) CPU 1.70GHz stepping 03
CPU的信息,這是Intel賽揚1.7G的CPU。
PCI: PCI BIOS revision 2.10 entry at 0xfb490
PCI: Using configuration type 1
PCI: Probing PCI hardware
PCI: 00:38 [1106/0586]: Work around ISA DMA hangs (00)
這個信息顯示系統(tǒng)正在進(jìn)行PCI并行設(shè)備的探測。
Linux NET4.0 for Linux 2.2
Based upon Swansea University Computer Society NET3.039
NET4: Unix domain sockets 1.0 for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
當(dāng)前的內(nèi)核支持net4網(wǎng)絡(luò)編碼庫。
IP Protocols: ICMP, UDP, TCP, IGMP
支持的IP協(xié)議有ICMP,UDP, TCP, IGMP。
Detected PS/2 Mouse Port.
找到了PS/2鼠標(biāo)口一個。
Serial driver version 4.27 with MANY_PORTS MULTIPORT SHARE_IRQ enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A
這里顯示了串口的信息。
pty: 256 Unix98 ptys configured
apm: BIOS version 1.2 Flags 0x07 (Driver version 1.9)
計算機主板支持APM標(biāo)準(zhǔn)模式的休眠。
Real Time Clock Driver v1.09
時鐘的驅(qū)動程序版本。
RAM disk driver initialized: 16 RAM disks of 4096K size
內(nèi)核支持帶RAM緩存的硬盤。
VP_IDE: IDE controller on PCI bus 00 dev 39
VP_IDE: not 100% native mode: will probe irqs later
ide0: BM-DMA at 0xe000-0xe007, BIOS settings: hda:DMA, hdb:DMA
ide1: BM-DMA at 0xe008-0xe00f, BIOS settings: hdc:DMA, hdd:DMA
顯示計算機IDE硬盤控制器的情況。
hda: Maxtor 51369U3, ATA DISK drive
第一塊物理硬盤的情況,是邁拓的牌子。
hdb: IDE/ATAPI CD-ROM 32X, ATAPI CDROM drive
光驅(qū)的情況,這是一個32倍速的光驅(qū)。
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
hda: Maxtor 51369U3, 12949MB w/2048kB Cache, CHS=6577/64/63
hdb: ATAPI 16X CD-ROM drive, 128kB Cache
硬盤和光驅(qū)的信息。
Uniform CDROM driver Revision: 2.56
Floppy drive(s): fd0 is 1.44M
FDC 0 is a post-1991 82077
軟盤控制器的信息。
md driver 0.90.0 MAX_MD_DEVS=256, MAX_REAL=12
raid5: measuring checksumming speed
raid5: MMX detected, trying high-speed MMX checksum routines
pII_mmx : 761.238 MB/sec
p5_mmx : 726.567 MB/sec
8regs : 447.675 MB/sec
32regs : 308.610 MB/sec
using fastest function: pII_mmx (761.238 MB/sec)
有關(guān)RAID和MD(多設(shè)備)的信息,在本機沒有采用。
scsi : 0 hosts.
scsi : detected total
內(nèi)核支持SCSI設(shè)備。在本機沒有采用。
md.c: sizeof(mdp_super_t) = 4096
Partition check:
hda: hda1 hda2 < hda5 hda6 >
硬盤分區(qū)的情況,可以看出第一個分區(qū)hda2是擴展分區(qū),其中的空間又分給了2個邏輯分區(qū)hda5和hda6。
autodetecting RAID arrays
autorun ...
... autorun DONE.
正在自動檢測RAID磁盤陣列,本機沒有采用。
VFS: Mounted root (ext2 filesystem) readonly.
虛擬文件系統(tǒng)已經(jīng)把根分區(qū)掛接好。在這個時候內(nèi)核已經(jīng)基本上準(zhǔn)備好來啟動系統(tǒng)了。
Freeing unused kernel memory: 125k freed
釋放掉沒有用的內(nèi)存,有125K。
Adding Swap: 1020116k swap-space (priority -1)
加載swap分區(qū)。
ne2k-pci.c:vpre-1.00e 5/27/99 D. Becker/P. Gortmaker http://cesdis.gsfc.nasa.gov/linux/drivers/ne2k-pci.html
ne2k-pci.c: PCI NE2000 clone 'RealTek RTL-8029' at I/O 0xe800, IRQ 11.
eth0: RealTek RTL-8029 found at 0xe800, IRQ 11, 00:80:AD:41:22:10.
網(wǎng)卡是PCINE2000系列芯片的網(wǎng)卡,很多計算機都使用這種網(wǎng)卡。
到這一步,內(nèi)核已經(jīng)完成啟動,/sbin/init馬上會運行。系統(tǒng)會啟動rc.sysinit命令,進(jìn)行通常的啟動。
15.3.2 /var/log/messages
/var/log/messages文件是Linux系統(tǒng)中最全面的log文件,它記錄了內(nèi)核和應(yīng)用程序發(fā)生錯誤時的信息和系統(tǒng)運行的一般信息。如果用戶在/var/log/messages里面沒有找到想要的信息,或者需要某些程序更為詳細(xì)的信息,用戶可以到/var/log目錄下查找看是否有以此程序命名的文件。
下面是一個/var/log/messages文件的例子:
Sep 12 10:23:44 rd002 sendmail[85]: starting daemon (8.9.3): SMTP+queueing@00:15:00 ...
Sep 12 11:06:11 rd002 passwd[337]: password for `progs' changed by `root' ...
Sep 12 11:08:30 rd002 kernel: Disc change detected. ...
Sep 12 16:06:01 rd002 login[101]: ROOT LOGIN on `tty2' ...
Sep 18 10:53:26 rd002 identd[251]: Connection from betelgeuse.branzo.it
Sep 18 10:53:26 rd002 identd[251]: from: 192.168.9.4 ( betelgeuse.branzo.it ) for: 1024, 21 ...
Sep 18 10:54:26 rd002 su[262]: + ttyp0 branzo-progs ... Sep 18 11:17:12 rd002 -- MARK –
Sep 18 11:37:12 rd002 -- MARK –
可以看到從/var/log/messages文件中取出來的一些消息。每一行表示一個消息,而且都由四個域的固定格式組成:
時間戳(timestamp),表示消息發(fā)出的日期和時間
主機名(hostname)(在我們的例子中主機名為rd002),表示生成消息的計算機的名字。如果只有一臺計算機,主機名就可能沒有必要了。但是,如果在網(wǎng)絡(luò)環(huán)境中使用syslog,那么就可能把不同主機的消息發(fā)送到一臺服務(wù)器上集中處理。
生成消息的子系統(tǒng)的名字??梢允恰発ernel”,表示消息來自內(nèi)核,或者是進(jìn)程的名字,表示發(fā)出消息的程序的名字。在方括號里的是進(jìn)程的PID。
消息(message),剩下的部分就是消息的內(nèi)容了,說明了。
在我們的例子中,
第一行是sendmail發(fā)出的消息,sendmail守護(hù)進(jìn)程負(fù)責(zé)管理收到和發(fā)出的消息。這一行是守護(hù)進(jìn)程正常啟動的消息。
第二行是來自passwd的消息,提醒我們用戶“progs”的口令被“root”改變過。
第四行是說明root用戶在終端tty2上面登錄上來了。
以后其它的消息,報告我們系統(tǒng)的運行情況,如連接的情況。實際上在messages文件中的消息都不是特別重要或緊急的。有一個特殊的消息是“MARK”消息,在默認(rèn)情況下每隔20分鐘就會生成一次表示系統(tǒng)還在正常運行?!癕ARK”消息很象“心跳信號”(heartbeat),例如:“心跳信號”經(jīng)常用來確認(rèn)遠(yuǎn)程主機是否還在運行?!癕ARK”消息另外的一個用處是用作事后分析,能夠幫助系統(tǒng)管理員確定系統(tǒng)死機發(fā)生的時間。
我們在使用/var/log/messages文件的時候,注意該文件是不斷變大的,而且在繁忙的系統(tǒng)中更是以非常快的速度增大。這為查看帶來很多不便,我們在這里給出一些查看大日志文件的技巧。新的消息是加在日志文件的末尾的,因此最新的消息總是在文件的末尾出現(xiàn)。顯示一個長文件末尾幾行的一個方便的方法是使用帶“-n”參數(shù)的tail命令。例如,為了顯示messages日志文件的最后25行,可以用
# tail –n 25 /var/log/messages
或者
# tail –25 /var/log/messages
還有一個比較方便的方法是使用less,用“G”命令可以到達(dá)文件的末尾
# less /var/log/messages
在退出程序之前按下“G”。用less最大的好處就是可以很方便地上下滾動文件和查找特定的字符串。
為了等待某個程序的某個特定的消息,可能要不斷地查看日志文件。如果用不斷地敲tail命令的方法直到消息出現(xiàn)為止,豈不是太麻煩了。在Linux系統(tǒng)中有一個很方便的方法,就是使用“tail –f /var/log/messages”命令。
# tail –f /var/log/messages
這個“tail”命令會顯示日志文件的最后幾行,但是不會馬上退出。它會一直等到其它程序在指定的日志文件中加入消息行,并且馬上就會把這些消息顯示出來?!發(fā)ess”命令一個可以用一個參數(shù)實現(xiàn)類似的功能,運行
# less +F /var/log/messages
這樣就可以讓less象“tail –f”那樣運行。而且,less更容易交互使用,因為你可以在任何時候按“CTRL-C”退出等待消息并回到less的正常模式,然后滾動文件,查找字符串。
15.3.3 日志文件格式的處理
在保存日志文件的時候,我們同樣會遇到Linux文件格式與Windows不兼容的問題,已經(jīng)在第四章《Linux編輯器》中說明。日志文件的處理同樣可以采用unix2dos命令轉(zhuǎn)換,生成Windows平臺可以閱讀的格式。
例如:
# cp /var/log/dmesg /root/log/dmesg/dmesg.040322
# unix2dos /root/log/dmesg/dmesg.040322
# unix2dos -n /var/log/messages /root/log/messages/messages.040322
或者保存到文件。以上的命令都可以編制成腳本,利用crond定期執(zhí)行,如每天運行一次,將最新的日志保存以Windows格式保存起來。
15.4 日志的用戶行為審計
在任何一臺服務(wù)器中,通常都會有多個用戶帳戶的存在。每個用戶在系統(tǒng)中的行為就記錄在這些帳戶在系統(tǒng)中的日志中,在處理問題的時候(如www服務(wù)異常,smtp進(jìn)程停止響應(yīng))對用戶的行為進(jìn)行分析是有效的方法之一。日志對用戶行為的審計可以分為連接記錄和進(jìn)程記錄兩類。
15.4.1 連接記錄
連接記錄是跟蹤當(dāng)前用戶當(dāng)前對話、用戶登錄和退出的活動。我們可以使用前面提到的utmp和 wtmp工具來完成這一記錄過程。Wtmp 工具同時維護(hù)重新引導(dǎo)和系統(tǒng)狀態(tài)變化信息。各種程序?qū)@些工具進(jìn)行刷新和維護(hù),因此無須進(jìn)行特殊的后臺進(jìn)程或程序。然而,utmp 和 wtmp 輸出結(jié)果文件必須存在,如果這些文件不存在會關(guān)閉連接記錄。與 utmp 和 wtmp 有關(guān)的所有數(shù)據(jù)將分別保存在 /var/run/utmp 和 /var/log/wtmp 中。這些文件歸root用戶所有。dump-utmp 可以轉(zhuǎn)換連接記錄數(shù)據(jù)為可讀的 ASCII 格式數(shù)據(jù)。
ac命令提供了有關(guān)用戶連接的大概統(tǒng)計,我們可以使用帶有標(biāo)志 d 和 p 的ac 命令。標(biāo)志 d 顯示了一天的總連接統(tǒng)計,標(biāo)志 p 顯示了每一個用戶的連接時間。這種統(tǒng)計信息的方式對了解與探測入侵有關(guān)的用戶情況及其他活動很有幫助。Last 和 who 是出于安全角度定期使用的最常用命令。
last命令提供每一個用戶的登錄時間,退出登錄時間,登錄位置,重新引導(dǎo)系統(tǒng)及運行級別變化的信息。last -10 表示 last 的最多輸出結(jié)果為最近的 10 條信息。缺省時 last 將列出在 /var/log/wtmp 中記錄的每一連接和運行級別的變化。從安全角度考慮,last 命令提供了迅速查看特定系統(tǒng)連接活動的一種方式。觀察每天的輸出結(jié)果是個好習(xí)慣,從中可以捕獲異常輸入項。Last 命令的 -x 選項可以通知系統(tǒng)運行級別的變化。
who命令主要作用是報告目前正在登錄的用戶、登錄設(shè)備、遠(yuǎn)程登錄主機名或使用的 Xwindows 的 X 顯示值、會話閑置時間以及會話是否接受 write 或 talk 信息。
例如: who -iwH 的輸出結(jié)果:
USER MESG LINE LOGIN-TIME IDLE FROM
Sam - tty1 Feb 18 08:42 old
這就表示用戶 Sam 不能接受 write 或 talk 信息,2月18日8:42從 tty1 登錄。該命令的安全值提供了用戶連接的大致情況,這也為監(jiān)視可疑活動提供了條件。 其他的有關(guān)命令有 lastlog 命令,該命令報告了有關(guān)/var/log/lastlog 中記錄的最后一次登錄的數(shù)據(jù)信息。
15.4.2 進(jìn)程記錄
進(jìn)程記錄是對進(jìn)程活動的記錄。原數(shù)據(jù)保存在 /var/log/pacct 文件中,其許可權(quán)限為 600。該文件的存在是進(jìn)程記錄有效的保障。與連接記錄不同,進(jìn)程記錄必須處于打開狀態(tài),使用下面的命令設(shè)置打開狀態(tài).
# accton /var/log/pacct
可以使用自選文件代替 /var/log/pacct,但必須記住這一文件并且設(shè)置適當(dāng)?shù)脑S可權(quán)限。必須在每次引導(dǎo)的時候執(zhí)行該命令,可以在 /etc/rc.d/rc.local 中輸入以下腳本:
# initiate process account
if [ -x /sbin/accton ]
then
/sbin/accton /var/log/pacct
echo "process accounting initiated"
fi
一旦在系統(tǒng)中配置進(jìn)程記錄后,將使用 3 個命令解釋在 /var/log/pacct 中的非用戶可讀的原數(shù)據(jù)。這些命令分別為 dump-acct,該命令與 dump-utmp 完全相似,sa 命令用于統(tǒng)計系統(tǒng)進(jìn)程記錄的大致情況,最后一個是 lastcomm 命令列出了系統(tǒng)執(zhí)行的命令。
15.4 日志文件的后臺進(jìn)程
Linux有多種方法把日志信息寫到log文件中,有些程序只是簡單地把信息寫到對應(yīng)的log文件,而大多數(shù)程序是使用內(nèi)核提供的標(biāo)準(zhǔn)API接口程序syslog寫的。syslogd后臺進(jìn)程從內(nèi)核收取信息并處理信息。內(nèi)核本身也有日志,后臺進(jìn)程klogd從內(nèi)核中得到日志后,再傳送給syslogd進(jìn)程。logger命令能調(diào)用這種API發(fā)送信息。
15.4.1 syslogd
syslogd是Linux的標(biāo)準(zhǔn)調(diào)用,用來管理應(yīng)用程序向系統(tǒng)發(fā)送信息,應(yīng)用程序使用的系統(tǒng)庫已經(jīng)加入了syslog功能,這樣程序在運行時就會受系統(tǒng)的管理。syslogd后臺進(jìn)程監(jiān)聽這類信息,處理后放在/etc/syslog.conf文件所指定的目錄或文件中。syslogd可以在很多Linux版本中自動啟動、運行,缺省情況下就能使用,但是用戶也能對它做一些改動。
syslogd從系統(tǒng)中獲取新的消息,并把消息發(fā)送到合適的地方。每一個子系統(tǒng)發(fā)出日志消息的時候都會給消息指定一個類型,一個消息可以分成兩個部分:“設(shè)備”和“優(yōu)先級”?!霸O(shè)備”標(biāo)識發(fā)出消息的子系統(tǒng),“優(yōu)先級”表示消息的重要性,其范圍從7(最不重要)到0(最重要)。
15.4.2 klogd
klogd 守護(hù)進(jìn)程獲得并記錄 Linux 內(nèi)核產(chǎn)生的各種信息。通常,syslogd 會記錄 klogd 傳來的所有信息,然而,如果調(diào)用帶有 -f filename 變量的 klogd 時,klogd 就在 filename 中記錄所有信息,而不是傳給 syslogd。當(dāng)指定另外一個文件進(jìn)行日志記錄時,klogd 就向該文件中寫入所有級別或優(yōu)先權(quán)。Klogd 中沒有和 /etc/syslog.conf 類似的配置文件。使用 klogd 而避免使用 syslogd 的好處在于可以查找大量錯誤。如果有人入侵了內(nèi)核,使用 klogd 可以修改錯誤。
內(nèi)核信息生成順序如下:
1. 內(nèi)核的某些模塊產(chǎn)生一個系統(tǒng)調(diào)用,來創(chuàng)建一個log記錄
2. klogd守護(hù)進(jìn)程從/proc/kmsg中取得該調(diào)用信息。/proc/kmsg文件可以從外部程序中獲取信息。
3. 信息的優(yōu)先級域做一次格式轉(zhuǎn)換(內(nèi)核中定義的是0-7數(shù)字),以便于syslogd進(jìn)行下一步的處理。
4. 信息送給ssyslogd,經(jīng)過組織、處理后就形成了系統(tǒng)的log。
15.4.3 logger
logger命令可以為syslog(3)系統(tǒng)日志文件提供一個shell命令接口,使用戶能創(chuàng)建日志文件中的條目。用法:logger 例如:logger This is a test!
它將產(chǎn)生一個如下的syslog紀(jì)錄:Aug 19 22:22:34 tiger: This is a test!
logger程序把帶有時間的信息寫入/var/log/messages文件。
15.5 logrotate
系統(tǒng)管理員可以使用logrotate 程序用來管理系統(tǒng)中的最新的事件。logrotate 還可以用來備份日志文件。它把舊的日志文件刪除,并創(chuàng)建新的日志文件,我們把這種操作叫做“轉(zhuǎn)儲”。我們可以根據(jù)日志文件的大小和天數(shù)來轉(zhuǎn)儲,這個過程一般通過 crond程序來執(zhí)行。logrotate 程序還可以用于壓縮日志文件,以及發(fā)送日志到指定的E-mail。
15.5.1 logrotate的配置
15.5.1.1 logrotate 的配置文件
logrotate的配置文件是/etc/logrotate.conf。主要參數(shù)如下表:
參數(shù) 功能
compress 通過gzip 壓縮轉(zhuǎn)儲以后的日志
nocompress 不需要壓縮時,用這個參數(shù)
copytruncate 用于還在打開中的日志文件,把當(dāng)前日志備份并截斷
nocopytruncate 備份日志文件但是不截斷
create mode owner group 轉(zhuǎn)儲文件,使用指定的文件模式創(chuàng)建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用時,轉(zhuǎn)儲的日志文件到下一次轉(zhuǎn)
儲時才壓縮
nodelaycompress 覆蓋 delaycompress 選項,轉(zhuǎn)儲同時壓縮。
errors address 轉(zhuǎn)儲時的錯誤信息發(fā)送到指定的Email 地址
ifempty 即使是空文件也轉(zhuǎn)儲,這個是 logrotate 的缺省選項。
notifempty 如果是空文件的話,不轉(zhuǎn)儲
mail address 把轉(zhuǎn)儲的日志文件發(fā)送到指定的E-mail 地址
nomail 轉(zhuǎn)儲時不發(fā)送日志文件
olddir directory 轉(zhuǎn)儲后的日志文件放入指定的目錄,必須和當(dāng)前日志文
件在同一個文件系統(tǒng)
noolddir 轉(zhuǎn)儲后的日志文件和當(dāng)前日志文件放在同一個目錄下
prerotate/endscript 在轉(zhuǎn)儲以前需要執(zhí)行的命令可以放入這個對,這兩個關(guān)
鍵字必須單獨成行
postrotate/endscript 在轉(zhuǎn)儲以后需要執(zhí)行的命令可以放入這個對,這兩個關(guān)鍵字
必須單獨成行
daily 指定轉(zhuǎn)儲周期為每天
weekly 指定轉(zhuǎn)儲周期為每周
monthly 指定轉(zhuǎn)儲周期為每月
rotate count 指定日志文件刪除之前轉(zhuǎn)儲的次數(shù),0 指沒有備份,5 指保 留5 個備份
tabootext [+] list 讓logrotate 不轉(zhuǎn)儲指定擴展名的文件,缺省的擴展名
是:.rpm-orig, .rpmsave, v, 和 ~
size SIZE 當(dāng)日志文件到達(dá)指定的大小時才轉(zhuǎn)儲,Size 可以指定bytes (缺省)以及KB (sizek)或者M(jìn)B (sizem).
二、缺省配置
我們以一個logrotate 缺省的配置文件來舉例說明/etc/logrotate.conf。
# 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 文件的最開始處,影響整個系統(tǒng)。在本例中就是前面12行。
第3行weekly 指定所有的日志文件每周轉(zhuǎn)儲一次。
第5行 rotate 4 指定轉(zhuǎn)儲文件的保留 4份。
第7行 errors root 指定錯誤信息發(fā)送給root。
第9行create 指定logrotate 自動建立新的日志文件,新的日志文件具有和原來的文件一樣的權(quán)限。
第11行 #compress 指定不壓縮轉(zhuǎn)儲文件,如果需要壓縮,去掉注釋就可以了。
三、使用include 選項讀取其他配置文件
include選項允許系統(tǒng)管理員把分散到幾個文件的轉(zhuǎn)儲信息,集中到一個主要的配置文件。當(dāng) logrotate 從logrotate.conf 讀到include選項時,會從指定文件讀入配置信息,就好像他們已經(jīng)在/etc/logrotate.conf 中一樣。
include選項十分重要,一些應(yīng)用把日志轉(zhuǎn)儲參數(shù)存放在 /etc/logrotate.d 。
典型的應(yīng)用有:apache, linuxconf, samba, cron 以及syslog。
這樣,系統(tǒng)管理員只要管理一個 /etc/logrotate.conf 文件就可以了。
四、使用include 選項覆蓋缺省配置
當(dāng) /etc/logrotate.conf 讀入文件時,include 指定的文件中的轉(zhuǎn)儲參數(shù)將覆蓋缺省的參數(shù),如下例:
# linuxconf 的參數(shù)
/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
}
在這個例子中,當(dāng) /etc/logrotate.d/linuxconf 文件被讀入時,下面的參數(shù)將覆蓋/etc/logrotate.conf中缺省的參數(shù)。
Notifempty
errorsjim
五、為指定的文件配置轉(zhuǎn)儲參數(shù)
經(jīng)常需要為指定文件配置參數(shù),一個常見的例子就是每月轉(zhuǎn)儲/var/log/wtmp。為特定文件而使用的參數(shù)格式是:
# 注釋
/full/path/to/file
{
option(s)
}
下面的例子就是每月轉(zhuǎn)儲 /var/log/wtmp 一次:
#Use logrotate to rotate wtmp
/var/log/wtmp
{
monthly
rotate 1
}
15.6 log文件的分析工具
用肉眼去一行一行地讀系統(tǒng)日志文件是一件枯燥而且容易出錯的事情,看累了之后,很可能忽略一些重要的信息。管理員需要一個好的工具來篩選出重要的系統(tǒng)日志信息。下面列舉了一些日志管理工具,大家可以根據(jù)自己的需要來選用。
15.6.1 swatch
swatch是在實踐中產(chǎn)生的,對計算機管理非常有用。它能瀏覽log文件,對找到的關(guān)鍵信息進(jìn)行處理。
swatch使用perl在log文件中尋找某種表達(dá)式,它有三個組成部分:一個控制程序,一個啟動的庫文件和一個配置文件。配置文件由以下的數(shù)據(jù)格式組成:
匹配模式
處理方式
時間間隔
時間戳域
時間間隔用于指明信息的出現(xiàn)頻度,如果磁盤受到物理性的損壞,每隔數(shù)秒顯示出一條壞扇區(qū)的記錄,這些內(nèi)容一樣的記錄用戶不用詳細(xì)地逐條來看,swatch會忽略這種內(nèi)容相同的記錄,直到時間到期為止。時間戳域與時間間隔一起使用,在存儲log信息時去除其時間標(biāo)記。
swatch有7種預(yù)定義的處理方式:
echo 把信息顯示在控制臺
bell 向控制臺發(fā)送control+g
ignore 不做任何處理
write 給用戶發(fā)送信息
mail 給用戶發(fā)送電子郵件
pipe 給某些命令傳送數(shù)據(jù)
exec 提供參數(shù)運行某個命令
配置文件寫好之后,swatch就根據(jù)它來創(chuàng)建一個perl腳本,啟動一個守護(hù)進(jìn)程,持續(xù)地監(jiān)控log。swatch能對標(biāo)準(zhǔn)信號作出反應(yīng),一個SIGHUP信號可以終止已啟動的守護(hù)進(jìn)程,并從配置文件重新產(chǎn)生一個進(jìn)程。這樣在修改配置文件的時候,仍能持續(xù)地監(jiān)控系統(tǒng)。swatch能根據(jù)不同的配置文件為任何指定的用戶啟動很多個守護(hù)進(jìn)程,每個用戶在其根目錄下都有一個.swatch文件,可以用swatch來得到一些系統(tǒng)事件,例如,某個文件被拷貝到某個目錄下了。
15.6.2 其他工具
15.6.2.1 colorlogs
這個軟件增加了ANSI escape字符,可以把log信息變成彩色的,便于查看。
15.6.2.2 pppsum
pppsum可以分析pppdlog,輸出使用時間、接收和發(fā)送的字節(jié)數(shù)。
15.6.2.3 slogs
slogs可以從一個腳本文件中記錄下suid、連接、su、httpd和系統(tǒng)日志。
15.6.2.4 space watcher
spacewatcher可以自動監(jiān)控磁盤空間的使用情況,一旦發(fā)現(xiàn)情況立即發(fā)出警告。
15.6.2.5 weblog
weblog是一個基于python的分析工具,分析web server和防火墻記錄。