Syslog系统日志配置
Linux保存了系統(tǒng)中所發(fā)生事件的詳細(xì)記錄,這些記錄稱作日志文件或消息文件??梢圆殚喨罩疚募?lái)確定系統(tǒng)當(dāng)前狀態(tài),觀察入侵者蹤跡,尋找某特定程序(或事件)相關(guān)的數(shù)據(jù)。syslogd與klogd(監(jiān)控linux內(nèi)核提交的消息)守護(hù)進(jìn)程負(fù)責(zé)記錄,發(fā)送系統(tǒng)或工具產(chǎn)生的信息,二者的配置文件都是/etc/syslog.conf。當(dāng)系統(tǒng)內(nèi)核或工具產(chǎn)生信息時(shí),通過(guò)調(diào)用相關(guān)函數(shù)將信息發(fā)送到syslogd或klogd守護(hù)進(jìn)程。syslogd與klogd守護(hù)進(jìn)程會(huì)根據(jù)/etc/syslog.conf中的配置信息,對(duì)消息的去向作出處理。syslog協(xié)議的詳細(xì)描述在RFC3164中。
 ????logrotate工具用來(lái)定期重命名、壓縮、郵遞系統(tǒng)日志文件,它可以保證日志文件不會(huì)占用太大的磁盤空間。
 ????1、配置文件/etc/syslog.conf:?syslog.conf是syslogd進(jìn)程的配置文件,將在程序啟動(dòng)時(shí)讀取,默認(rèn)位置是/etc/syslog.conf。這個(gè)配置文件中的空白行和以"#"開頭的行將被忽略。"facility.level"部分也被稱為選擇符(seletor)。 seletor和action之間使用一個(gè)或多個(gè)空白分隔。它指定了一系列日志記錄規(guī)則。規(guī)則的格式如下:
 ????facility.level????action
 ????選擇符(seletor)由facility和level兩部分組成,之間用一個(gè)句點(diǎn)(.)連接。
 ????(1)facility:指定了產(chǎn)生日志的設(shè)備,可以是下面的關(guān)鍵字之一:
 關(guān)鍵字???????????????????值????????????解釋
 kern????????????????0??????????內(nèi)核信息,首先通過(guò)klogd傳遞
 user????????????????1??????????由用戶程序生成的信息
 mail????????????????2??????????與電子郵件有關(guān)的信息
 daemon??????????????3??????????與inetd守護(hù)進(jìn)程有關(guān)的信息
 auth????????????????4??????????由pam_pwdb報(bào)告的認(rèn)證活動(dòng)
 syslog??????????????5??????????由syslog生成的信息
 lpr?????????????????6??????????與打印服務(wù)有關(guān)的信息
 news????????????????7??????????來(lái)自新聞服務(wù)器的信息
 uucp????????????????8??????????由uucp生成的信息(uucp = unix to unix copy)
 cron????????????????9??????????與cron和at有關(guān)的信息
 authpriv????????????10?????????包括私有信息(如用戶名)在內(nèi)的認(rèn)證活動(dòng)
 ftp?????????????????11?????????與FTP有關(guān)的信息
 ????????????????????12-15??????系統(tǒng)保留
 local0 ~ local7?????16-23??????由自定義程序使用,例如使用local5做為ssh功能
 mark???????????????????????????syslog內(nèi)部功能,用于生成時(shí)間戳
 *??????????????????????????????通配符代表除了mark以外的所有功能
 ????在大多數(shù)情況下,任何程序都可以通過(guò)任何facility發(fā)送日志消息,但是一般都遵守約定俗成的規(guī)則。比如,只有內(nèi)核才能使用"kern"facility。注意syslog保留從“l(fā)ocal0”到“l(fā)ocal7”這幾個(gè)設(shè)備號(hào)來(lái)接受從遠(yuǎn)程服務(wù)器和網(wǎng)絡(luò)設(shè)備上發(fā)送過(guò)來(lái)的日志信息。路由器,交換機(jī),防火墻和負(fù)載均衡器都很容易給它們各自配置一個(gè)獨(dú)立的日志文件。
 ????(2)level:指定了消息的優(yōu)先級(jí),可以是下面的關(guān)鍵字之一(降序排列,嚴(yán)重性越來(lái)越低):
 關(guān)鍵字????????????????????值?????????解釋
 emerg????????????????0????????系統(tǒng)不可用
 alert????????????????1????????需要立即被修改的條件
 crit?????????????????2????????(臨界)阻止某些工具或子系統(tǒng)功能實(shí)現(xiàn)的錯(cuò)誤條件
 err??????????????????3????????阻止工具或某些子系統(tǒng)部分功能實(shí)現(xiàn)的錯(cuò)誤條件
 warning??????????????4????????預(yù)警信息
 notice???????????????5????????具有重要性的普通條件
 info?????????????????6????????提供信息的消息
 debug????????????????7????????不包含函數(shù)條件或問(wèn)題的其他信息
 none??????????????????????????(屏蔽所有來(lái)自指定設(shè)備的消息)沒有優(yōu)先級(jí),通常用于排錯(cuò)
 *?????????????????????????????除了none之外的所有級(jí)別
 ????facility部分可以是用逗號(hào)(,)分隔的多個(gè)設(shè)備,而多個(gè)seletor之間也可以通過(guò)分號(hào)(;)組合在一起。注意多個(gè)組合在一起的選擇符,后面的會(huì)覆蓋前面的,這樣就允許從模式中排除一些優(yōu)先級(jí)。默認(rèn)將對(duì)指定級(jí)別以及更嚴(yán)重級(jí)別的消息進(jìn)行操作,但是可以通過(guò)2個(gè)操作符進(jìn)行修改。等于操作符(=)表示僅對(duì)這個(gè)級(jí)別的消息進(jìn)行操作,不等操作符(!)表示忽略這個(gè)級(jí)別以及更嚴(yán)重級(jí)別的消息。這兩個(gè)操作符可以同時(shí)使用,不過(guò)"!"必須出現(xiàn)在"="的前面。
 ????(3)動(dòng)作action:動(dòng)作確定了syslogd與klogd守護(hù)進(jìn)程將日志消息發(fā)送到什么地方去。有以下幾種選擇:
 ????普通文件:使用文件的絕對(duì)路徑來(lái)指明日志文件所在的位置,例如:/var/log/cron。
 ????終端設(shè)備:終端可以是/dev/tty0~/dev/tty6,也可以為/dev/console。
 ????用戶列表:例如動(dòng)作為“root hackbutter”,將消息寫入到用戶root與hackbutter的計(jì)算機(jī)屏幕上。
 ????遠(yuǎn)程主機(jī):將信息發(fā)往網(wǎng)絡(luò)中的其他主機(jī)的syslogd守護(hù)進(jìn)程,格式為“@hostname”。
 ????(4)配置文件的語(yǔ)法說(shuō)明:
 ????*用作設(shè)備或優(yōu)先級(jí)時(shí),可以匹配所有的設(shè)備或優(yōu)先級(jí)。
 ????*用作動(dòng)作時(shí),將消息發(fā)送給所有的登錄用戶。
 ?????多個(gè)選擇器可在同一行中,并使用分號(hào)分隔開,且后面的會(huì)覆蓋前面的。如uucp,news.crit。
 ?????關(guān)鍵字none用作優(yōu)先級(jí)時(shí),會(huì)屏蔽所有來(lái)自指定設(shè)備的消息。
 ?????通過(guò)使用相同的選擇器和不同的動(dòng)作,同一消息可以記錄到多個(gè)位置。
 ????syslog.conf文件中后面的配置行不會(huì)覆蓋前面的配置行,每一行指定的動(dòng)作都獨(dú)立的運(yùn)作。
 ????(5)我的Ubuntu中默認(rèn)的/etc/syslog.conf內(nèi)容:
?
[python]?view plaincopy
????某些應(yīng)用軟件也會(huì)將自己的運(yùn)行狀況記錄到特定的日志文件上,它不受syslog.conf文件的控制。如文件/var/log/apache2/access.log,目錄/var/log/apache2, /var/log/cups, /var/log/gdm, /var/log/mysql,/var/log/samba等。
 ????修改完/etc/syslog.conf后,可用service syslog restart重啟syslog服務(wù),Debian/Ubuntu中則用sudo /etc/init.d/sysklogd restart。查看日志文件里最新的記錄可用tail -f /var/log/messages。
 ????2、將日志信息記錄到遠(yuǎn)程Linux服務(wù)器上:?將你的系統(tǒng)信息記錄到遠(yuǎn)程服務(wù)器上將是一個(gè)很好的安全措施。如果把公司所有的服務(wù)器的日志信息都記錄到一個(gè)集中的syslog服務(wù)器上,這將會(huì)方便你管理各個(gè)服務(wù)器中發(fā)生的相關(guān)事件。這也會(huì)使得掩蓋錯(cuò)誤和惡意攻擊變得更困難,因?yàn)閷?duì)各個(gè)日志文件的惡意刪除在日志服務(wù)器上不能同時(shí)發(fā)生,特別是當(dāng)你限制用戶訪問(wèn)日志服務(wù)器時(shí)。
 ????配置Syslog服務(wù)器:在默認(rèn)情況下,syslog并不會(huì)接受遠(yuǎn)程客戶端的信息,要激活它,RedHat/Fedora中需要修改/etc/sysconfig/syslog文件,在SYSLOGD_OPTIONS參數(shù)中增加-r選項(xiàng),以允許記錄遠(yuǎn)程機(jī)器的信息。Debian/Ubuntu中則是修改/etc/default/syslogd文件中的SYSLOGD參數(shù),也可直接編輯syslog啟動(dòng)腳本/etc/init.d/sysklogd,將SYSLOGD的參數(shù)定義為“-r”。修改完后要重啟syslog服務(wù)。
 ????配置客戶端:syslog服務(wù)器現(xiàn)在可以接受syslog信息了。你還要設(shè)置好遠(yuǎn)程linux客戶端以向服務(wù)器發(fā)送信息。假設(shè)客戶端主機(jī)名為smallfry,可通過(guò)編輯/etc/hosts文件來(lái)實(shí)現(xiàn)。
 ????(1)確定遠(yuǎn)程服務(wù)器的IP地址和有效的域名。
 ????(2)在客戶端班機(jī)的/etc/hosts文件中加入遠(yuǎn)程服務(wù)器的描述:IP地址 完整域名 服務(wù)器名 “別名”,例如192.168.1.100 bigboy.my-site.com bigboy loghost,這樣為服務(wù)器主機(jī)bigboy設(shè)置了一個(gè)別名loghost。
 ????(3)編輯客戶端的/etc/syslog.conf文件,使得syslog信息能發(fā)送到你新設(shè)置的日志服務(wù)器loghost上。
 *.debug @loghost
 *.debug /var/log/messages
 ????重啟syslog服務(wù),現(xiàn)在你的機(jī)器將會(huì)將所有“調(diào)試”級(jí)別及以上級(jí)別的信息同時(shí)發(fā)送到服務(wù)器bigboy和本地文件/var/log/messeges上。你可以做個(gè)簡(jiǎn)單測(cè)試看看syslog服務(wù)器是否在接受你的信息了。比如重啟一下lpd打印機(jī)守護(hù)進(jìn)程,看看能否在服務(wù)器上看到相關(guān)日志消息。
 ????3、配置文件/etc/logrotate.conf:?它是logrotate的一般性配置文件。你可以通過(guò)它設(shè)置哪個(gè)日志文件被循環(huán)重用以及多久重用一次??梢栽O(shè)定的循環(huán)參數(shù)有每周(weekly)或每天(daily)。rotate參數(shù)定義保留多少份日志文件備份,create參數(shù)指定在每輪循環(huán)后就新建空的日志文件。我的Ubuntu中默認(rèn)的/etc/logrotate.conf內(nèi)容為:
?
[python]?view plaincopy
????注意在Debian/Ubuntu系統(tǒng)中,/etc/cron.daily.sysklogd腳本將讀取/etc/syslog.conf文件,并根據(jù)它輪轉(zhuǎn)所有設(shè)定的日志文件。所以,對(duì)于一般的系統(tǒng)日志,你不必再在/etc/logrotate.d文件夾中重復(fù)設(shè)定了。因?yàn)樵?/etc/cron.daily文件夾中它沒24小時(shí)便運(yùn)行一次。在Fedora/Redhat系統(tǒng)中,這個(gè)腳本被/etc/cron.daily/logrotate取代,而且它不讀取syslog配置文件。所以,你必須在/etc/logrotate.d設(shè)置好。
 ????對(duì)logrotate的設(shè)置只有在你使用logrotate -f命令時(shí)才會(huì)生效。如果你想讓logrotate只讀取特定的配置文件而不是所有,把配置文件名作為logrotate的參數(shù)運(yùn)行即可,如logrotate -f /etc/logrotate.d/syslog。如果你的網(wǎng)頁(yè)訪問(wèn)量比較高,那么日志文件將變得異常大。你可以通過(guò)編輯logrotate.conf文件加入壓縮選項(xiàng)compress來(lái)實(shí)現(xiàn)對(duì)日志文件的壓縮。這些日志文件將用gzip來(lái)壓縮,所有的文件將會(huì)有一個(gè).gz的擴(kuò)展名。查看這些文件的內(nèi)容依然很容易,因?yàn)槟憧梢杂脄cat命令快速的將它們的內(nèi)容顯示在屏幕上。
 ????Syslog服務(wù)器的一個(gè)缺點(diǎn)是沒有把不良來(lái)源的消息過(guò)濾掉。因此,當(dāng)你的的服務(wù)器位于一個(gè)不安全的網(wǎng)絡(luò)時(shí),使用TCP wrappers軟件或防火墻來(lái)限制可以接受的消息來(lái)源是一個(gè)明智的舉措。這將有助于限制拒絕服務(wù)攻擊的成效,這種拒絕服務(wù)攻擊的目的是填塞你的服務(wù)器的硬盤或加重其他系統(tǒng)資源負(fù)擔(dān),它有可能最終導(dǎo)致服務(wù)器崩潰。?
 ????現(xiàn)在使用越來(lái)越廣泛的syslog-ng程序結(jié)合了logrotate和syslog的特性,它能給用戶提供更多的自定義功能,從功能上也更加豐富了。如果你想使用它,可到www.balabit.com上去下載安裝,其配置文件為/etc/syslog-ng/syslog-ng.conf。
總結(jié)
以上是生活随笔為你收集整理的Syslog系统日志配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: Nginx配置中的log_format用
- 下一篇: HttpDNS功能说明及实现
