Syslogd LinuxおよびUnixコマンド

Sysklogdは、システムログとカーネルメッセージトラップをサポートする2つのシステムユーティリティを提供しています。 インターネットとUnixドメインソケットの両方をサポートすることで、このユーティリティパッケージはローカルロギングとリモートロギングの両方をサポートできます。

システムロギングは、ストックBSDソースから派生したsyslogd (8)のバージョンによって提供されます。 カーネルロギングのサポートは、 klogd (8)ユーティリティーによって提供されます。これにより、カーネルロギングをスタンドアロン形式またはsyslogdのクライアントとして実行できます。

Syslogdは、最新の多くのプログラムが使用する一種のログを提供します。 記録されたすべてのメッセージには、少なくとも1つの時間とホスト名フィールド(通常はプログラム名フィールド)も含まれますが、ログプログラムがどれほど信頼できるかによって異なります。

syslogdのソースは大幅に変更されていますが、いくつかのメモが整理されています。 まず第一に、syslogdがデフォルトの標準的なBSD動作に従うことを確実にする体系的な試みがありました。 2番目の重要な概念は、このバージョンのsyslogdが、標準ライブラリにあるsyslogのバージョンと透過的にやり取りすることです。 標準共有ライブラリにリンクされたバイナリが正しく機能しない場合は、異常動作の例が必要です。

主な構成ファイル/etc/syslog.confまたは-fオプションで指定された別のファイルは、起動時に読み込まれます。 ハッシュマーク( ``# '')で始まる行と空行は無視されます。 解析中にエラーが発生すると、行全体が無視されます。

シノプシス

syslogd [ -a ソケット ] [ -d ] [ -f 設定ファイル ] [ -h ] [ -l ホストリスト ] [ -m 間隔 ] [ -n ] [ -p ソケット ] [ -r ] [ -s ドメインリスト ] [ - v ] [ -x ]

オプション

ソケット

この引数を使用すると、 syslogdから追加ソケットを聴く必要があることを指定することができます。 これは、chroot()環境でデーモンを動作させる場合に必要です。 最大19の追加ソケットを使用できます。 環境がさらに必要な場合は、syslogd.cソースファイル内のシンボルMAXFUNIXを増やす必要があります。 chroot()デーモンの例は、http://www.psionic.com/papers/dns.htmlのOpenBSDの人々によって記述されています。

-d

デバッグモードをオンにします。 これを使うと、デーモンはfork (2)をバックグラウンドで実行するのではなく、フォアグラウンドにとどまるのと反対に、現在のttyに関する多くのデバッグ情報を書き込みます。 詳細については、DEBUGGINGセクションを参照してください。

-f 設定ファイル

デフォルトの/etc/syslog.confの代わりに、代わりの設定ファイルを指定してください。

-h

デフォルトでは、syslogdはリモートホストから受信したメッセージを転送しません。 コマンドラインでこのスイッチを指定すると、ログデーモンは受信したリモートメッセージを転送先ホストに転送します。

-l ホストリスト

fqdnではなく単純なホスト名でのみログに記録する必要があるホスト名を指定します。 コロン( ``: '')セパレータを使用して、複数のホストを指定することができます。

-m 間隔

syslogdはマークタイムスタンプを定期的に記録します。 2つのMARK行のデフォルト間隔は20分です。 これはこのオプションで変更できます。 間隔をゼロに設定すると、 間隔が完全にオフになります。

-n

自動バックグラウンドは避けてください。 これは、特にsyslogdinit (8)によって起動され制御されている場合に必要です。

-p ソケット

/ dev / logではなく、別のunixドメインソケットを指定することができます。

-r

このオプションは、施設がSyslogサービスでインターネットドメインソケットを使用してネットワークからメッセージを受信できるようにします((5)を参照)。 デフォルトでは、ネットワークからのメッセージは受信されません。

このオプションは、sysklogdパッケージのバージョン1.3で導入されました。 デフォルトの動作は古いバージョンの動作とは逆の動作なので、これをオンにする必要があります。

-s domainlist

ロギングする前に削除するドメイン名を指定します。 複数のドメインは、コロン( ``: '')セパレータを使用して指定できます。 サブドメインを指定することはできませんが、ドメイン全体のみを指定することをお勧めします。 たとえば、 -s north.deが指定されていて、ホストのログがsatu.infodrom.north.deに解​​決されていない場合、ドメインは削除されません。- s north.de:infodrom.north.deのように2つのドメインを指定する必要があります。

-v

バージョンを印刷して終了します。

-バツ

リモートメッセージを受信するときに名前の参照を無効にする。 これにより、ネームサーバーがsyslogデーモンを実行しているのと同じマシンで実行されているときに、デッドロックを回避できます。

信号

Syslogdは一連の信号に反応します。 次のようにsyslogdに簡単に信号を送ることができます:

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

サイアップ

これにより、 syslogdは再初期化を実行できます。 開いているファイルはすべて閉じられ、設定ファイル(デフォルトは/etc/syslog.conf )が再度読み込まれ、 syslog (3)機能が再開されます。

SIGTERM

syslogdが終了します。

SIGINTSIGQUIT

デバッグが有効な場合は無視され、そうでない場合はsyslogdが終了します。

SIGUSR1

デバッグをオン/オフに切り替えます。 このオプションは、 syslogd-dデバッグオプションで起動されている場合にのみ使用できます。

SIGCHLD

生まれたばかりの子どもたちは、メッセージを伝えているので、子供たちを待ちます。

構成ファイルの構文の違い

Syslogdは、元のBSDソースとは少し異なる構文を使用します。 もともと、特定の優先度以上のすべてのメッセージがログファイルに転送されました。

たとえば、次の行は、 / usr / adm / daemonsに入るために、デーモン機能を使用するデーモンからのすべての出力を発生させました(debugは最も低い優先度なので、それ以上のすべても一致します)

#サンプルsyslog.conf daemon.debug / usr / adm / daemons

新しいスキームの下では、この動作は変わりません。 違いは、4つの新しい指定子、アスタリスク( * )ワイルドカード、方程式記号( = )、感嘆符( )、およびマイナス記号( - )の追加です。

*は、指定された施設のすべてのメッセージを宛先に送信することを指定します。 この動作は、デバッグの優先度を指定することによって縮退しています。 ユーザーは、アスタリスク表記がより直感的であることを示しています。

=ワイルドカードは、指定された優先度クラスにログを制限するために使用されます。 これは、例えば、デバッグメッセージのみを特定のロギングソースにルーティングすることを可能にする。

たとえば、 syslog.confの次の行は、すべてのソースからのデバッグメッセージを/ usr / adm / debugファイルに転送します。

#サンプルsyslog.conf *。=デバッグ/ usr / adm / debug

指定された優先順位のロギングを除外するために使用されます。 これは、優先順位を指定するすべての(!)可能性に影響します。

たとえば、次の行は、優先順位情報を持つもの以外のファシリティメールのすべてのメッセージを/ usr / adm / mailファイルに記録します。 news.info(を含む)からnews.crit(除く)へのすべてのメッセージは、 / usr / adm / newsファイルに記録されます。

#サンプルsyslog.confメール。*; mail!!= info / usr / adm / mail news.info; news。!crit / usr / adm / news

例外指定子として直感的に使用できます。 上記の解釈は単純に逆転される。 あなたが使うかもしれないことを行うこと

mail.none

または

郵便物。!*

または

メール!!debug

メール機能を備えたすべてのメッセージをスキップします。 そこに遊ぶ余地があります。 :-)

ファイルへのすべての書き込みの後にファイルを同期させない場合は、ファイル名の先頭にのみ使用できます。

これは、純粋なBSDの動作に使用された個人にはある程度の順応が必要かもしれませんが、テスターはこの構文がBSDの動作よりもいくらか柔軟性があることを示しています。 これらの変更は、標準のsyslog.conf (5)ファイルには影響しないことに注意してください。 拡張動作を取得するには、構成ファイルを特に変更する必要があります。

リモートロギングのサポート

これらの変更により、syslogd機能に対するネットワークのサポートが提供されます。 ネットワークサポートとは、syslogdを実行している1つのノードからsyslogdを実行している別のノードにメッセージを転送し、実際にディスクファイルに記録することを意味します。

これを有効にするには、コマンドラインで-rオプションを指定する必要があります。 デフォルトの動作では、 syslogdはネットワークをリッスンしません。

syslogdは、ローカルに生成されたログメッセージのためのunixドメインソケットでリスンするようにします。 この動作により、syslogdは標準のCライブラリにあるsyslogと相互運用できます。 同時に、syslogdは、他のホストから転送されたメッセージの標準syslogポートで待機します。 この作業を正しく行うには、 services (5)ファイル(通常は/ etcにあります)に次のエントリが必要です。

syslog 514 / udp

このエントリにsyslogdがない場合、UDPポートを開くことができないため、リモートメッセージも受信も送信もできません。 代わりに、 syslogdは直ちに終了し、エラーメッセージが表示されます。

メッセージを別のホストに転送させるには、 syslog.confファイルの通常のファイル行を、メッセージの先頭に@を付けて送信するホストの名前に置き換えます。

たとえば、次のsyslog.confエントリを使用してすべてのメッセージをリモートホストに転送するには、次のように入力します。

#syslogdの設定ファイルをリモートホストへの#メッセージをすべて転送します。 *。* @hostname

すべてのカーネルメッセージをリモートホストに転送するには、設定ファイルは次のようになります。

#すべてのカーネル#メッセージをリモートホストに転送するサンプル設定ファイル。 kern。* @hostname

起動時にリモートホスト名を解決できない場合は、ネームサーバにアクセスできない可能性があります(syslogdの後に起動される可能性があります)ので、心配する必要はありません。 Syslogdはその名前を10回解決するために再試行し、その後不平を言います。 これを避ける別の可能性は、ホスト名を/ etc / hostsに置くことです。

通常のsyslogdでは 、リモートホストから受信したメッセージを同じホストに送信した場合(または最初のホストに戻すなど、複雑なホストを第三者に送信した場合など)、syslogループが発生します。 私のドメイン(Infodrom Oldenburg)では、間違いなく1つのディスクと1つのディスクが同じメッセージでいっぱいになりました。 :-(

これを避けるために、リモートホストから受信したメッセージは、別の(または同じ)リモートホストにはもう送信されません。 これが意味をなさないシナリオがある場合は、私(ジョーイ)の行をドロップしてください。

リモートホストがホストと同じドメインにあり、 syslogdが実行されている場合、fqdn全体ではなく単純なホスト名だけが記録されます。

ローカルネットワークでは、すべての重要な情報を1台のマシンに保持するために、中央ログサーバーを提供することができます。 ネットワークが異なるドメインで構成されている場合、単純なホスト名の代わりに完全修飾名を記録することについて不平を言う必要はありません。 このサーバーのストリップドメイン機能を使用することができます。 syslogdに、サーバが置かれているドメイン以外のいくつかのドメインを削除し、単純なホスト名だけをログに記録するように指示することができます。

-lオプションを使用すると、単一のホストをローカルマシンとして定義することもできます。 これもまた、単純なホスト名だけを記録し、fqdnsは記録しません。

メッセージをリモートホストに転送したり、リモートホストからのメッセージを受信するために使用されるUDPソケットは、必要なときにのみ開かれます。 1.3-23より前のリリースでは毎回開かれましたが、読書や転送のために開かれませんでした。

名前付きパイプ(FIFO)への出力

このバージョンのsyslogdは、名前付きパイプ(fifo)への出力ログをサポートしています。 fifoまたはnamed pipeは、ファイル名にパイプ記号( `` | '')を付けることで、ログメッセージの宛先として使用できます。 これはデバッグに便利です。 syslogdを開始する前に、FIFOをmkfifoコマンドで作成する必要があります。

次の設定ファイルは、デバッグメッセージをカーネルからFIFOにルーティングします。

#カーネルのデバッグ#メッセージを#名前付きパイプである/ usr / adm / debugにのみルーティングする設定例。 kern。=デバッグ| / usr / adm / debug

インストールに関する懸念

このバージョンのsyslogdをインストールする際には、おそらく重要な考慮事項が1つあります。 このバージョンのsyslogdは、syslog関数によるメッセージの適切な書式設定に依存しています。 libc.so.4。[2-4] .nの領域のどこかで、共有ライブラリのsyslog関数の機能が変更されました。 具体的な変更は、メッセージを/ 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)は、syslogdデーモンにsyslogメッセージを非常に簡単に流すことができます。その結果、ログファイルはファイルシステム上の残りのスペースをすべて消費します 。 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オプションを使用してデバッグを有効にすると、 syslogdはstdoutの処理の大部分を書くことで非常に冗長になります。 設定ファイルを再読み込みして再解析するたびに、内部データ構造に対応する表が表示されます。 この表は4つのフィールドで構成されています。

このフィールドにはゼロから始まるシリアル番号が入ります。 この数値は、内部データ構造(つまり配列)内の位置を表します。 1つの番号を省略すると、/ etc / syslog.confの対応する行にエラーが存在する可能性があります。

パターン

このフィールドは厄介で、内部構造を正確に表します。 すべての列はファシリティを表します( syslog (3)を参照)。 ご覧のように、以前の使用のために無料で残っている機能がいくつかありますが、左端のものだけが使用されています。 列の各フィールドは優先順位を表します( syslog (3)を参照)。

アクション

このフィールドは、パターンに一致するメッセージが受信されるたびに実行される特定のアクションを記述します。 可能なすべてのアクションについては、 syslog.conf (5)のマンページを参照してください。

議論

このフィールドには、最後のフィールドのアクションに対する追加の引数が表示されます。 ファイルロギングの場合、これはログファイルのファイル名です。 ユーザロギングの場合、これはユーザのリストです。 リモート・ロギングの場合、これはログを取るマシンのホスト名です。 コンソールログの場合、これは中古のコンソールです。 tty-loggingの場合、これは指定されたttyです。 ウォールには追加の引数はありません。

関連項目

logger (1)、 syslog (2)、(5)

共同作業者

SyslogdはBSDソースから、Greg Wettstein(greg@wind.enjellic.com)はLinuxへの移植を行い、Martin Schulze(joey@linux.de)はいくつかのバグを修正し、いくつかの新機能を追加しました。 KlogdはもともとSteve Lord(lord@cray.com)によって書かれたもので、Greg Wettsteinは大きな改良を加えました。

Dr. Greg Wettstein
Enjellicシステム開発

がん研究部コンピューティング施設
ロジャーマリスがんセンター
ファーゴ、ND
greg@wind.enjellic.com

スティーブントゥイード
コンピュータサイエンス学科
エジンバラ大学、スコットランド
sct@dcs.ed.ac.uk

Juha Virtanen
jiivee@hut.fi

シェーン・アルダートン
shane@ion.apana.org.au

マーティン・シュルツェ
インフォドロムオルデンブルク
joey@linux.de

重要: manコマンド( %man )を使用して、特定のコンピュータでコマンドがどのように使用されているかを確認してください。

関連記事