Syslogd Linux和Unix命令

Sysklogd提供了兩個系統實用程序,它們為系統日誌記錄和內核消息捕獲提供支持。 支持internet和unix域套接字使此實用程序包可以同時支持本地和遠程日誌記錄。

系統日誌記錄由源自庫存BSD源的syslogd (8)版本提供。 內核日誌記錄的支持由klogd (8)實用程序提供,該實用程序允許以獨立方式或作為syslogd的客戶端進行內核日誌記錄。

Syslogd提供了許多現代程序使用的日誌記錄。 每個記錄的消息至少包含一個時間和一個主機名字段,通常也是一個程序名稱字段,但這取決於日誌程序的可靠性。

儘管syslogd的源碼已經被大量修改,但仍然需要一些註釋。 首先,系統地嘗試確保syslogd遵循默認的標準BSD行為。 第二個重要的概念是,這個版本的syslogd透明地與標準庫中的syslog版本進行交互。 如果鏈接到標準共享庫的二進製文件無法正常工作,我們需要一個反常行為的例子。

在啟動時讀取主配置文件/etc/syslog.conf或使用-f選項給出的替代文件。 任何以散列標記(``#'')開始的行和空行都將被忽略。 如果在分析過程中發生錯誤,則忽略整行。

概要

syslogd [ -a socket ] [ -d ] [ -f config file ] [ -h ] [ -l hostlist ] [ -m interval ] [ -n ] [ -p socket ] [ -r ] [ -s domainlist ] [ - v ] [ -x ]

選項

- 一個 插座

使用這個參數你可以指定syslogd必須監聽的額外套接字。 如果你打算讓一些守護進程在chroot()環境中運行,那麼這是需要的。 您最多可以使用19個附加插座。 如果您的環境需要更多,則必須在syslogd.c源文件中增加符號MAXFUNIX 。 來自OpenBSD的人員在http://www.psionic.com/papers/dns.html描述了一個chroot()守護進程的例子。

-d

打開調試模式。 使用這個守護進程不會進行fork (2)在後台進行自我設置,但與保留在前台的相反,並在當前tty上寫入很多調試信息。 有關更多信息,請參閱調試部分。

-f 配置文件

指定替代配置文件而不是/etc/syslog.conf ,這是默認配置文件。

-H

默認情況下,syslogd不會轉發它從遠程主機收到的消息。 在命令行中指定此開關將導致日誌守護程序將收到的任何遠程消息轉發給已定義的轉發主機。

-l 主機列表

指定一個主機名,該主機名只能用簡單的主機名記錄,而不能用fqdn記錄。 可以使用冒號(``:'')分隔符指定多個主機。

-m 間隔

syslogd定期記錄標記時間戳。 兩條MARK線之間的默認間隔為20分鐘。 這可以通過此選項進行更改。 將間隔設置為零將完全關閉。

-n

避免自動背景。 如果syslogdinit (8)啟動和控制,那麼這是特別需要的。

-p 插座

您可以指定替代的unix域套接字而不是/ dev / log

-r

此選項將使設施能夠使用具有syslog服務的Internet域套接字從網絡接收消息(請參閱(5))。 默認是不接收來自網絡的任何消息。

該選項在sysklogd軟件包的1.3版中引入。 請注意,默認行為與舊版本的行為方式相反,因此您可能必須將其打開。

-s 域名列表

指定一個應在記錄之前剝離的域名。 可以使用冒號(``:'')分隔符指定多個域。 請注意,不可以指定子域名,但只能指定整個域名。 例如,如果指定-s north.de並且主機日誌記錄解析為satu.infodrom.north.de,則不會切斷域,則必須指定兩個域,如: -s north.de:infodrom.north.de

-v

打印版本並退出。

-X

接收遠程消息時禁用名稱查找。 當名稱服務器運行在運行syslog守護進程的同一台機器上時,這可以避免死鎖。

信號

Syslogd對一組信號作出反應。 您可以使用以下方法輕鬆發送信號到syslogd

kill -SIGNAL`cat / var / run / syslogd.pid`

SIGHUP

這讓syslogd執行重新初始化。 所有打開的文件都關閉,配置文件(默認是/etc/syslog.conf )將被重新讀取, 系統日誌 (3)設備將再次啟動。

SIGTERM

syslogd將會死亡。

SIGINTSIGQUIT

如果啟用調試,則忽略它們,否則syslogd將會死亡。

SIGUSR1

打開/關閉調試。 只有在使用-d調試選項啟動syslogd時才能使用此選項。

SIGCHLD

如果有些孩子出生,等待孩子們,因為牆上的信息。

配置文件語法差異

Syslogd的配置文件使用的語法稍微不同於原始的BSD源文件。 最初,具有特定優先級和以上的所有消息都被轉發到日誌文件。

例如,以下行使用守護程序工具(調試是最低優先級,因此每個更高級別也匹配)導致守護進程的所有輸出進入/ usr / adm /守護進程

#示例syslog.conf daemon.debug / usr / adm / daemons

在新計劃下,這種行為保持不變。 區別在於添加了四個新的說明符,星號( * )通配符,方程符號( = ),感嘆號( )和減號( - )。

*指定將指定設施的所有消息定向到目的地。 請注意,此行為在指定優先級調試時退化。 用戶表示星號符號更直觀。

=通配符用於限制記錄到指定的優先級。 例如,這允許將調試消息僅路由到特定的日誌記錄源。

例如, syslog.conf中的以下行會將來自所有源的調試消息指向/ usr / adm / debug文件。

#示例syslog.conf *。= debug / usr / adm / debug

!! 用於排除指定優先級的記錄。 這會影響指定優先級的所有(!)可能性。

例如,以下行會將設施郵件的所有消息(具有優先級信息的郵件除外)記錄到/ usr / adm / mail文件。 並且從news.info(包括)到news.crit(不包括)的所有消息都將記錄到/ usr / adm / news文件中。

#示例syslog.conf mail。*; mail。!= info / usr / adm / mail news.info; news。!crit / usr / adm / news

您可以直觀地將其用作異常說明符。 上述解釋只是倒過來。 這樣做可以使用

mail.none

要么

郵件。!*

要么

郵件!調試

跳過郵件設備附帶的每封郵件。 有很多空間可以玩。 :-)

如果您想在每次寫入文件後忽略同步文件,那麼只能用 - 前綴。

這對於那些習慣於純BSD行為的人來說可能需要一些適應性,但是測試人員已經表明這種語法比BSD行為更靈活。 請注意,這些更改不應影響標準syslog.conf (5)文件。 您必須特別修改配置文件以獲得增強的行為。

支持遠程記錄

這些修改為syslogd工具提供了網絡支持。 網絡支持意味著消息可以從一個運行syslogd的節點轉發到另一個運行syslogd的節點,在那裡它們將被實際記錄到一個磁盤文件中。

要啟用此功能,您必須在命令行中指定-r選項。 默認行為是syslogd不會監聽網絡。

策略是讓syslogd監聽本地生成的日誌消息的unix域套接字。 這種行為將允許syslogd與標準C庫中的syslog進行交互操作。 同時,syslogd在標準syslog端口上偵聽從其他主機轉發的消息。 要正確執行此項工作, services (5)文件(通常位於/ etc中 )必須具有以下條目:

syslog 514 / udp

如果缺少此項, syslogd既不能接收遠程消息也不能發送它們,因為UDP端口不能被打開。 相反, syslogd會立即死亡,並發出錯誤消息。

要使消息轉發到其他主機,請將syslog.conf文件中的普通文件行替換為消息要發送到的主機的名稱,後面加上@前綴。

例如,要使用以下syslog.conf條目將所有消息轉發到遠程主機:

#將syslogd配置文件示例為#消息轉發給遠程主機全部轉發。 *。* @主機名

要將所有內核消息轉發到遠程主機,配置文件如下所示:

#示例配置文件將所有內核#消息轉發到遠程主機。 kern。* @hostname

如果遠程主機名在啟動時無法解析,因為名稱服務器可能無法訪問(可能會在syslogd之後啟動),因此您不必擔心。 Syslogd將重試十次解析名稱,然後發出抱怨。 避免這種情況的另一種可能性是將主機名放置在/ etc / hosts中

如果您將從遠程主機接收到的消息發送到同一主機(或者將第三個主機發送回第一個主機等更複雜),那麼使用普通的syslogd時,您將獲得syslog循環。 在我的域名(Infodrom Oldenburg),我們意外地收到了一個,我們的磁盤上填充了同一條消息。 :-(

為了避免這種情況,遠程主機收到的消息不再發送給另一台(或同一台)遠程主機。 如果出現這種情況沒有意義,請給我(喬伊)一條線。

如果遠程主機與主機位於同一個域中,則syslogd正在運行,只會記錄簡單的主機名而不是整個fqdn。

在本地網絡中,您可以提供一個中央日誌服務器,將所有重要信息保存在一台機器上。 如果網絡包含不同的域,則不必抱怨記錄完全限定的名稱而不是簡單的主機名。 您可能想要使用此服務器的strip-domain功能。 您可以告訴syslogd去除服務器所在的域以外的幾個域,並且只記錄簡單的主機名。

使用-l選項還可以將單個主機定義為本地機器。 這也會導致只記錄他們的簡單主機名而不是fqdns。

用於將消息轉發到遠程主機或從中接收消息的UDP套接字僅在需要時才打開。 在1.3-23之前的版本中,它每次都打開,但不能打開閱讀或轉發。

輸出到命名管道(FIFO)

此版本的syslogd支持將輸出記錄到命名管道(fifos)。 通過將一個pipy符號(``|'')添加到文件的名稱中,可以將fifo或命名管道用作日誌消息的目的地。 這對調試很方便。 請注意,必須在syslogd啟動之前使用mkfifo命令創建fifo。

以下配置文件將調試消息從內核路由到fifo:

#示例配置將內核調試#消息路由到/ usr / adm / debug,這是#命名管道。 kern。= debug | / usr / adm / debug

安裝問題

安裝此版本的syslogd時可能需要考慮一個重要因素。 此版本的syslogd依賴於syslog函數對消息的正確格式。 共享庫中syslog函數的功能在libc.so.4區域中的某處發生了變化[2-4] .n。 具體更改是在將消息傳輸到/ dev / log套接字之前將其終止。 此版本的syslogd的正常運行取決於消息的空終止。

如果系統上正在使用舊的靜態鏈接二進製文件,則通常會出現此問題。 使用舊版syslog功能的二進製文件將導致記錄空行,然後刪除消息中的第一個字符。 將這些二進製文件重新鏈接到較新版本的共享庫將糾正此問題。

syslogd (8)和klogd (8)都可以從init(8)運行,或者作為rc。*序列的一部分啟動。 如果它是從init啟動的,則必須設置-n選項,否則,將會啟動大量的syslog守護進程。 這是因為init (8)取決於進程ID。

安全威脅

syslogd守護進程有可能被用作拒絕服務攻擊的管道。 感謝John Morrison(jmorriso@rflab.ee.ubc.ca)提醒我這個潛力。 流氓程序(mer)可以非常容易地用syslog消息來洪氾syslogd守護進程,從而導致日誌文件佔用文件系統上的所有剩餘空間。 激活對inet域套接字的日誌記錄當然會使系統暴露在本地機器上的程序或個人之外。

有許多保護機器的方法:

  1. 實施內核防火牆以限制哪些主機或網絡可以訪問514 / UDP套接字。
  2. 記錄可以被定向到一個孤立的或者非根文件系統,如果被填充的話,它不會損害機器。
  3. 可以使用ext2文件系統,該文件系統可以配置為僅將文件系統的某個百分比限制為僅由root用戶使用。 請注意 ,這將要求syslogd作為非根進程運行。 此外請注意 ,這將阻止使用遠程日誌記錄,因為syslogd將無法綁定到514 / UDP套接字。
  4. 禁用inet域套接字將會限製本地機器的風險。
  5. 使用步驟4,如果問題仍然存在,並且不是次要的流氓程序/守護進程,請獲取3.5英尺(約1米)長的抽油桿*並與相關用戶聊天。 抽油桿def。 --- 3/4,7/8或1in。 硬化鋼桿,每端帶有外螺紋。 在北達科他州西部和其他地區的石油工業中主要用於從油井中抽吸“吸”石油。 次要用途是用於建設牛飼料批次和處理偶爾頑固或好戰的個人。

調試

當使用-d選項打開調試時,通過寫入stdout上的大部分內容, syslogd將變得非常冗長。 每當配置文件重新讀取並重新分析時,您將看到一個表格,對應於內部數據結構。 該表格由四個字段組成:

該字段包含從零開始的序列號。 這個數字表示內部數據結構(即數組)中的位置。 如果剩下一個數字,那麼在/etc/syslog.conf的相應行中可能會有錯誤。

模式

這個領域很棘手,完全代表了內部結構。 每列表示一個設施(請參閱syslog (3))。 正如你所看到的,還有一些設施可以免費供以前使用,只使用最左邊的設施。 列中的每個字段都表示優先級(請參閱syslog (3))。

行動

該字段描述了每當收到與該模式匹配的消息時發生的特定操作。 有關所有可能的操作,請參閱syslog.conf (5)聯機幫助頁。

參數

此字段顯示最後一個字段中的操作的附加參數。 對於文件記錄,這是日誌文件的文件名; 對於用戶日誌記錄,這是一個用戶列表; 對於遠程日誌記錄,這是要登錄的計算機的主機名; 對於控制台日誌記錄,這是使用的控制台; 對於tty-logging這是指定的tty; 牆沒有額外的論據。

也可以看看

記錄器 (1), 系統日誌 (2),(5)

合作者

Syslogd取自BSD資源,Greg Wettstein(greg@wind.enjellic.com)執行該端口至Linux ,Martin Schulze(joey@linux.de)修復了一些錯誤並添加了若干新功能。 Klogd最初由Steve Lord(lord@cray.com)撰寫,Greg Wettstein做出了重大改進。

Greg Wettstein博士
Enjellic系統開發

腫瘤研究部計算機
羅杰馬里斯癌症中心
法戈,ND
greg@wind.enjellic.com

斯蒂芬特維迪
計算機科學系
蘇格蘭愛丁堡大學
sct@dcs.ed.ac.uk

Juha Virtanen
jiivee@hut.fi

Shane Alderton
shane@ion.apana.org.au

Martin Schulze
Infodrom奧登堡
joey@linux.de

重要提示:使用man命令( %man )查看特定計算機上的命令使用方式。

相關文章