IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁(yè)操作系統(tǒng)LINUX → Sysklogd 系統(tǒng)日志記錄器

Sysklogd 系統(tǒng)日志記錄器

時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

  概述

  日志對(duì)于系統(tǒng)的重要性不言而喻,比如對(duì)于故障診斷和入侵檢測(cè),沒(méi)有日志幾乎寸步難行。Linux系統(tǒng)當(dāng)中最流行的日志記錄器是 Sysklogd ,當(dāng)前最新版本是 1.5 。

  Sysklogd 日志記錄器由兩個(gè)守護(hù)進(jìn)程(klogd syslogd)和一個(gè)配置文件(syslog.conf)組成。klogd 不使用配置文件,它負(fù)責(zé)截獲內(nèi)核消息,它既可以獨(dú)立使用也可以作為 syslogd 的客戶端運(yùn)行。syslogd 默認(rèn)使用 /etc/syslog.conf 作為配置文件,它負(fù)責(zé)截獲應(yīng)用程序消息,還可以截獲 klogd 向其轉(zhuǎn)發(fā)的內(nèi)核消息。支持 internet/unix domain sockets 的特性使得這兩個(gè)工具可以用于記錄本地和遠(yuǎn)程的日志。

  重要信息

  syslogd 守護(hù)進(jìn)程默認(rèn)情況下并不從 syslog/udp 端口接受任何消息,除非在命令行上使用了"-r"選項(xiàng)。此外,你還應(yīng)當(dāng)仔細(xì)看看"-l"和"-s"命令行選項(xiàng)。

  syslogd 守護(hù)進(jìn)程默認(rèn)情況下并不轉(zhuǎn)發(fā)任何來(lái)自遠(yuǎn)程主機(jī)的消息,這是為了避免可能導(dǎo)致的日志無(wú)限循環(huán)。"-h"選項(xiàng)可以開啟轉(zhuǎn)發(fā)功能。

  syslogd 會(huì)剝除來(lái)自同一個(gè)域范圍內(nèi)的主機(jī)中的每條消息中的本地域(local domain)信息。如果你使用了日志分析程序,請(qǐng)將這一特性牢記在心。

  syslogd 不會(huì)更改任何文件的屬性,所以由它創(chuàng)建的文件將是全局可讀的。如果你不想這樣(比如"auth.*"被進(jìn)行了記錄),你必須手動(dòng)事先創(chuàng)建這些文件并設(shè)置相應(yīng)的權(quán)限。

  如果某些程序發(fā)送了大量的日志消息并且導(dǎo)致硬盤非常忙碌,你可以考慮在每一行后面關(guān)閉fsync()特性。不過(guò)這樣可能會(huì)導(dǎo)致系統(tǒng)崩潰以后丟失一些日志消息。

  如果你使用 init 來(lái)直接啟動(dòng) klogd 或 syslogd ,那么需要在命令行上使用"-n"選項(xiàng)。

  如果 System.map 文件存在并且在 klogd 命令行上使用了"-k"的話,那么它可以解碼 EIP 地址。這個(gè)特性對(duì)于診斷系統(tǒng)崩潰非常有用,但是你必須確保 System.map 文件正確無(wú)誤。

  這兩個(gè)守護(hù)進(jìn)程都會(huì)嘗試在收到退出信號(hào)時(shí)刪除他們的 .pid 文件,不過(guò)如果系統(tǒng)崩潰或者進(jìn)程被"kill -9"結(jié)束,那么可能就會(huì)來(lái)不及清理。這樣,下次啟動(dòng)時(shí)就有可能會(huì)獲得與以前殘留的 .pid 文件中的進(jìn)程號(hào)相同的PID,從而導(dǎo)致無(wú)法啟動(dòng)(進(jìn)程號(hào)沖突)。解決這個(gè)問(wèn)題的最佳方案是系統(tǒng)的啟動(dòng)腳本(rc.*)自身能夠在系統(tǒng)啟動(dòng)的最初就對(duì)這些 .pid 文件進(jìn)行清理(通常是清空 /var/run 目錄)。

  大文件支持(可以寫入大于 2 GB 的日志)并不是 syslogd 的功能,而是 glibc 的功能(使用不同的內(nèi)核API進(jìn)行調(diào)用)。要啟用大文件支持,你必須將 Makefile 中的相應(yīng)注釋取消(兩個(gè)含有"-D_FILE_OFFSET_BITS"的行中的一個(gè))。

  內(nèi)核的控制臺(tái)日志等級(jí)

  內(nèi)核的控制臺(tái)日志等級(jí)控制哪些內(nèi)核消息會(huì)在控制臺(tái)上顯示。有兩種途徑可以修改這個(gè)等級(jí),不過(guò)建議的途徑是通過(guò) sysctl 來(lái)控制,通常這個(gè)設(shè)置位于 /etc/sysctl.conf 中。比如:

  kernel/printk = 4 4 1 7

  安裝注意事項(xiàng)

  仔細(xì)閱讀 README 和 man page 會(huì)減少你不少痛苦。目前所有文檔都已經(jīng)放在man page中了。

  按照你的需求修改 Makefile 然后再進(jìn)行編譯。如果你沒(méi)有認(rèn)真對(duì)待第一步,那么可能會(huì)編譯出不合格的二進(jìn)制程序。

  FSSTND(Linux文件系統(tǒng)標(biāo)準(zhǔn))要求二進(jìn)制文件和其配置文件必須位于不同的目錄。這個(gè)包默認(rèn)情況下遵守FSSTND的約定。你可以通過(guò)修改 Makefile 文件和源代碼來(lái)修改配置文件的位置。

  建議讓這兩個(gè)守護(hù)進(jìn)程都以root身份運(yùn)行,如果你想了解更多安全方面的問(wèn)題,請(qǐng)閱讀 man page 。

  下面是 Makefile 文件開頭的一部分節(jié)選,這部分是在安裝是可能需要改動(dòng)的:

  CC= gcc

  SKFLAGS= $(RPM_OPT_FLAGS) -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce

  # 啟用大文件支持,根據(jù)你的系統(tǒng)是32位還是64位進(jìn)行選擇

  # -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE

  # -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE

  # $(shell getconf LFS_SKFLAGS)

  LDFLAGS= -s

  # 指定 install 程序的位置

  INSTALL = /usr/bin/install

  # 安裝目錄

  BINDIR = $(prefix)/usr/sbin

  MANDIR = $(prefix)/usr/share/man

  # 有bug報(bào)告說(shuō)在一個(gè)純 ELF 系統(tǒng)上需要明確指定連接到 libresolv.a 庫(kù)。

  # 如果你在連接 syslogd 時(shí)失敗,可以試一試取消下面的注釋。

  # LIBS = /usr/lib/libresolv.a

  # 如果你在 ALPHA 平臺(tái)上連接失敗,可以試一試取消下面的注釋。

  # LIBS = ${LIBS} -linux

  # 取消下面的注釋可以讓 klogd 實(shí)現(xiàn)啟動(dòng)延遲,這在 klogd 和 syslogd 并行啟動(dòng)或啟動(dòng)順序靠的非常近的時(shí)候很有用。

  # KLOGD_START_DELAY = -DKLOGD_DELAY=5

  # 下面的定義表示文件位置遵守FSSTND標(biāo)準(zhǔn)。

  FSSTND = -DFSSTND

  # 下面的定義指定了 man page 的宿主和權(quán)限。

  MAN_USER = root

  MAN_GROUP = root

  MAN_PERMS = 644

  # 下面的定義指定了 syslogd 守護(hù)進(jìn)程的 .pid 文件名,

  # 源代碼(paths.h)中默認(rèn)的文件名是"syslog.pid",但很多人認(rèn)為應(yīng)當(dāng)叫"syslogd.pid"。

  # 你可以在這里指定你喜歡的名字。

  SYSLOGD_PIDNAME = -DSYSLOGD_PIDNAME=\"syslogd.pid\"

  syslog.conf

  syslog.conf 是 syslogd 進(jìn)程的配置文件,將在程序啟動(dòng)時(shí)讀取,默認(rèn)位置是 /etc/syslog.conf 。它指定了一系列日志記錄規(guī)則。規(guī)則的格式如下:

  facility.level??? action

  這個(gè)配置文件中的空白行和以"#"開頭的行將被忽略。"facility.level"部分也被稱為選擇符(seletor)。 seletor 和 action 之間使用一個(gè)或多個(gè)空白分隔。

#p#副標(biāo)題#e#

  選擇符(seletor)

  選擇符由 facility 和 level 兩部分組成,之間用一個(gè)句點(diǎn)(.)連接。這兩部分將在后面 syslogd 小節(jié)中詳細(xì)描述。下面提到的名字和 /usr/include/syslog.h 中的 LOG_-values 相一致。

  facility 指定了產(chǎn)生日志的子系統(tǒng),可以是下面的關(guān)鍵字之一:

  auth由 pam_pwdb 報(bào)告的認(rèn)證活動(dòng)。

  authpriv包括私有信息(如用戶名)在內(nèi)的認(rèn)證活動(dòng)

  cron與 cron 和 at 有關(guān)的信息。

  daemon與 inetd 守護(hù)進(jìn)程有關(guān)的信息。

  ftp與 FTP 有關(guān)的信息

  kern內(nèi)核信息,首先通過(guò) klogd 傳遞。

  lpr與打印服務(wù)有關(guān)的信息。

  mail與電子郵件有關(guān)的信息

  marksyslog 內(nèi)部功能用于生成時(shí)間戳

  news來(lái)自新聞服務(wù)器的信息

  syslog由 syslog 生成的信息

  user由用戶程序生成的信息

  uucp由 uucp 生成的信息

  local0 ~ local7由自定義程序使用,例如使用 local5 做為 ssh 功能

  *通配符代表除了 mark 以外的所有功能

  在大多數(shù)情況下,任何程序都可以通過(guò)任何 facility 發(fā)送日志消息,但是一般都遵守約定俗成的規(guī)則。比如,只有內(nèi)核才能使用"kern" facility 。

  level 指定了消息的優(yōu)先級(jí),可以是下面的關(guān)鍵字之一(降序排列,嚴(yán)重性越來(lái)越低):

  emerg系統(tǒng)不可用

  alert需要立即被修改的條件

  crit阻止某些工具或子系統(tǒng)功能實(shí)現(xiàn)的錯(cuò)誤條件

  err阻止工具或某些子系統(tǒng)部分功能實(shí)現(xiàn)的錯(cuò)誤條件

  warning預(yù)警信息

  notice具有重要性的普通條件

  info提供信息的消息

  debug不包含函數(shù)條件或問(wèn)題的其他信息

  none沒(méi)有優(yōu)先級(jí),通常用于排錯(cuò)

  *除了none之外的所有級(jí)別

  facility 部分可以是用逗號(hào)(,)分隔的多個(gè)子系統(tǒng),而多個(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)在"="的前面。

  動(dòng)作(action)

  這個(gè)字段定義了對(duì)符合條件的消息進(jìn)行何種操作,可以選擇下列操作之一:

  普通文件

  將消息記錄到這個(gè)文件中,必須使用絕對(duì)路徑。如果在文件名之前加上減號(hào)(-),則表示不將日志信息同步刷新到磁盤上(使用寫入緩存),這樣可以提高日志寫入性能,但是增加了系統(tǒng)崩潰后丟失日志的風(fēng)險(xiǎn)。

  命名管道

  在絕對(duì)路徑表示的FIFO文件(使用mkfifo命令創(chuàng)建)前加上管道符號(hào)(|)即可。通常用于調(diào)試。比如:|/usr/adm/debug

  終端或者控制臺(tái)

  比如:/dev/tty1 或 /dev/console

  遠(yuǎn)程主機(jī)

  syslogd 能夠?qū)⑾l(fā)送到遠(yuǎn)程主機(jī)或從遠(yuǎn)程主機(jī)接收消息,不過(guò)默認(rèn)并不轉(zhuǎn)發(fā)接收到的消息。要將消息發(fā)送到遠(yuǎn)程主機(jī),可以在主機(jī)名前加一個(gè)"@"即可。

  逗號(hào)分隔的用戶名列表

  critical 級(jí)別的消息除了記錄到日志之外,通常還轉(zhuǎn)發(fā)到root用戶。

  所有當(dāng)前登錄的用戶

  如果寫

關(guān)鍵詞標(biāo)簽:Sysklogd,系統(tǒng)日志

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP Linux操作系統(tǒng)修改IP

相關(guān)下載

    人氣排行 Linux下獲取CPUID、硬盤序列號(hào)與MAC地址 dmidecode命令查看內(nèi)存型號(hào) linux tc實(shí)現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令 查看linux服務(wù)器硬盤IO讀寫負(fù)載