Linuxc - syslog使用方法小結

syslog使用方法小結

Syslog已被許多日誌函數採納,它用在許多保護措施中——任何程序均可以經過syslog 紀錄事件。Syslog能夠紀錄系統事件,能夠寫到一個文件或設備中,或給用戶發送一個信息。它能紀錄本地事件或經過網絡紀錄另外一個主機上的事件。linux

Syslog設備依據兩個重要的文件:/etc/syslogd(守護進程)和/etc/syslog.conf配置文件,習慣上,多數syslog信息被寫到/var/adm或/var/log目錄下的信息文件中(messages.*)。一個典型的syslog紀錄包括生成程序的名字和一個文本信息。它還包括一個設備和一個優先級範圍(但不在日之中出現)。
每一個syslog消息被賦予下面的主要設備之一: shell

LOG_AUTH——認證系統:login、su、getty等
LOG_AUTHPRIV——同LOG_AUTH,但只登陸到所選擇的單個用戶可讀的文件中
LOG_CRON——cron守護進程
LOG_DAEMON——其餘系統守護進程,如routed
LOG_FTP——文件傳輸協議:ftpd、tftpd
LOG_KERN——內核產生的消息
LOG_LPR——系統打印機緩衝池:lpr、lpd
LOG_MAIL——電子郵件系統
LOG_NEWS——網絡新聞系統
LOG_SYSLOG——由syslogd(8)產生的內部消息
LOG_USER——隨機用戶進程產生的消息
LOG_UUCP——UUCP子系統
LOG_LOCAL0~LOG_LOCAL7——爲本地使用保留
Syslog爲每一個事件賦予幾個不一樣的優先級:
LOG_EMERG——緊急狀況 
LOG_ALERT——應該被當即改正的問題,如系統數據庫破壞
LOG_CRIT——重要狀況,如硬盤錯誤
LOG_ERR——錯誤
LOG_WARNING——警告信息
LOG_NOTICE——不是錯誤狀況,可是可能須要處理
LOG_INFO——情報信息
LOG_DEBUG——包含情報的信息,一般旨在調試一個程序時使用

確認系統內有syslog服務

在命令行中輸入syslogd help查看是否能夠執行,若是沒有,就不可用。數據庫

在最新的ubuntu和centos等系統中,以及用別的log服務替代了syslog,可是在嵌入式系統中,syslog使用較爲普遍。嵌入式系統中busybox自帶有syslog服務。編程

配置syslogd

輸入syslogd help後,會提示默認的配置文件。咱們要查看此文件是否存在,若是不存在咱們須要建立一個配置文件如:touch /etc/syslog.conf,同時使用syslogd -f /etc/syslog.conf來進行綁定。ubuntu

syslog.conf的格式

syslog.conf文件指明syslogd程序紀錄日誌的行爲,該程序在啓動時查詢配置文件。centos

若是沒有改配置文件的話,默認的會寫到 /var/log/messages 中。 安全

該文件由不一樣程序或消息分類的單個條目組成,每一個佔一行。對每類消息提供一個選擇域和一個動做域。這些域由tab隔開:選擇域指明消息的類型和優先級;動做域指明syslogd接收到一個與選擇標準相匹配的消息時所執行的動做。bash

每一個選項是由設備和優先級組成。當指明一個優先級時,syslogd將紀錄一個擁有相同或更高優先級的消息。因此若是指明"crit",那全部標爲crit、alert和emerg的消息將被紀錄。每行的行動域指明當選擇域選擇了一個給定消息後應該把他發送到哪兒。服務器

以下所示:網絡

​ 類型.級別;類型.級別 [TAB] 動做

類型facility:

保留字段中的「類型」表明信息產生的源頭,能夠是:

auth    認證系統,即詢問用戶名和口令
    cron    系統定時系統執行定時任務時發出的信息
    daemon  某些系統的守護程序的syslog,如由in.ftpd產生的log
    kern    內核的syslog信息
    lpr     打印機的syslog信息
    mail    郵件系統的syslog信息
    mark    定時發送消息的時標程序
    news    新聞系統的syslog信息
    user    本地用戶應用程序的syslog信息
    uucp    uucp子系統的syslog信息
    local0..7 種本地類型的syslog信息,這些信息能夠又用戶來定義
    \*       表明以上各類設備

級別priority:

保留字段中的「級別」表明信息的重要性,能夠是:

emerg   緊急,處於Panic狀態。一般應廣播到全部用戶; 
    alert   告警,當前狀態必須當即進行糾正。例如,系統數據庫崩潰; 
    crit    關鍵狀態的警告。例如,硬件故障; 
    err     其它錯誤; 
    warning 警告; 
    notice  注意;非錯誤狀態的報告,但應特別處理; 
    info    通報信息; 
    debug   調試程序時的信息; 
    none    一般調試程序時用,指示帶有none級別的類型產生的信息無需送出。如*.debug;mail.none表示調試時除郵件信息外其它信息都送出。

動做action:

「動做」域指示信息發送的目的地。能夠是:

/filename   日誌文件。由絕對路徑指出的文件名,此文件必須事先創建; 
    @host       遠程主機; @符號後面能夠是ip,也能夠是域名,默認在/etc/hosts文件下loghost這個別名已經指定給了本機。
    user1,user2 指定用戶。若是指定用戶已登陸,那麼他們將收到信息; 
    *           全部用戶。全部已登陸的用戶都將收到信息。

具體實例:

咱們來看看/etc/syslog.conf文件中的實例:

…… 
*.err;kern.debug;daemon.notice;mail.crit    [TAB]   /var/adm/messages 
……

這行中的「action」就是咱們常關心的那個/var/adm/messages文件,輸出到它的信息源頭「selector」是:

  • *.err - 全部的通常錯誤信息;
  • kern.debug - 核心產生的調試信息;
  • daemon.notice - 守護進程的注意信息;
  • mail.crit - 郵件系統的關鍵警告信息

例如,若是想把全部郵件消息紀錄到一個文件中,以下:

#Log all the mail messages in one place
mail.* /var/log/maillog

其餘設備也有本身的日誌。UUCP和news設備能產生許多外部消息。它把這些消息存到本身的日誌(/var/log/spooler)中並把級別限爲"err"或更高。例如:

# Save mail and news errors of level err and higher in aspecial file. 
uucp,news.crit /var/log/spooler

當一個緊急消息到來時,可能想讓全部的用戶都獲得。也可能想讓本身的日誌接收並保存。

#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn 

alert消息應該寫到root和tiger的我的帳號中:

#Root and Tiger get alert and higher messages
*.alert root,tiger

有時syslogd將產生大量的消息。例如內核("kern"設備)可能很冗長。用戶可能想把內核消息紀錄到/dev/console中。下面的例子代表內核日誌紀錄被註釋掉了:

#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console

用戶能夠在一行中指明全部的設備。下面的例子把info或更高級別的消息送到/var/log/messages,除了mail之外。級別"none"禁止一個設備: 

#Log anything(except mail)of level info or higher
#Don't log private authentication messages!
*.info:mail.none;authpriv.none /var/log/messages

在有些狀況下,能夠把日誌送到打印機,這樣網絡入侵者怎麼修改日誌都沒有用了。一般要普遍紀錄日誌。Syslog設備是一個攻擊者的顯著目標。一個爲其餘主機維護日誌的系統對於防範服務器攻擊特別脆弱,所以要特別注意。
有個小命令logger爲syslog(3)系統日誌文件提供一個shell命令接口,使用戶能建立日誌文件中的條目。

用法:logger

例如:logger This is a test!

它將產生一個以下的syslog紀錄:Aug 19 22:22:34 tiger: This is a test! 

注意不要徹底相信日誌,由於攻擊者很容易修改它的。 

syslog編程

三個函數的原型和說明:  

void   openlog(   char   *ident,   int   option,   int     facility);      
void   syslog(   int   priority,   char   *format,   ...);      
void   closelog(   void   );  

 priority是facility及level的組合,其後參數的用法相似printf。

option:用於openlog()的option參數能夠是如下幾個的組合:

  • LOG_CONS : 若是送到system logger時發生問題,直接寫入系統console。
  • LOG_NDELAY : 當即開啓鏈接(一般,鏈接是在第一次寫入訊息時纔打開的)。
  • LOG_PERROR : 將訊息也同時送到stderr
  • LOG_PID : 將PID含入全部訊息中

facility:該參數用來指定何種程式在記錄訊息,這可以讓設定檔來設定何種訊息如何處理。

  • LOG_AUTH : 安全/受權訊息(別用這個,請改用LOG_AUTHPRIV)
  • LOG_AUTHPRIV : 安全/受權訊息
  • LOG_CRON : 時間守護神專用(cron及at)
  • LOG_DAEMON : 其它系統守護神
  • LOG_KERN : 核心訊息
  • LOG_LOCAL0到LOG_LOCAL7 : 保留
  • LOG_LPR : line printer次系統
  • LOG_MAIL : mail次系統
  • LOG_NEWS : USENET news次系統
  • LOG_SYSLOG : syslogd內部所產生的訊息
  • LOG_USER(default) : 通常使用者等級訊息
  • LOG_UUCP : UUCP次系統

level:決定訊息的重要性. 如下的等級重要性逐次遞減:

  • LOG_EMERG : 系統沒法使用
  • LOG_ALERT : 必需要當即採起反應行動
  • LOG_CRIT : 重要情況發生
  • LOG_ERR : 錯誤情況發生
  • LOG_WARNING : 警告情況發生
  • LOG_NOTICE : 通常情況,但也是重要情況
  • LOG_INFO : 資訊訊息
  • LOG_DEBUG : 除錯訊息

syslog的使用實例:

  1. 在/etc/syslog.conf下加入一行localN.* pathname
    例 local5.* /root/Desktop/test.log
  2. 從新啓動syslog /etc/init.d/syslog restart
  3. 使用syslog
#include<stdio.h>
#include<stdlib.h>
#include <syslog.h>
#define SYSNAME "wohawoha"
void Info(void)
{
 openlog("info",LOG_PID,LOG_LOCAL5);/*注意這裏的數字5與第一條裏面提到的local5.*裏的5必須相同,而且這個數字的範圍爲0--7*/
 syslog(LOG_INFO, "hello %s","woring");
}

void Woring(void)
{
 openlog("woring",LOG_PID,LOG_LOCAL5);
 syslog(LOG_WARNING, "hello %s","test");
}

int main()
{
 Info();
 Woring();
 closelog();
 return 0;
}
  1. 進入目錄查看內容
    例如:進入/root/Desktop/test.log這個文件查看裏面的內容
Dec 13 12:31:21 localhost info[11750]: hello woring
Dec 13 12:31:21 localhost woring[11750]: hello test
相關文章
相關標籤/搜索