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