SYSKLOGD(8) | Linux System Administration | SYSKLOGD(8) |
sysklogd - Linux システムロギングユーティリティ
syslogd [ -a socket ] [ -d ] [ -f config file ] [ -h ] [ -l hostlist ] [ -m interval ] [ -n ] [ -p socket ] [ -r ] [ -s domainlist ] [ -v ]
sysklogd はシステムロギングとカーネルメッセージの確保という二つの機能 を提供するユーティリティである。 このユーティリティではインターネットと UNIX ドメインの両方のソケットが 利用可能なので、ローカルとリモートの両方で記録可能である。
このシステムの記録を提供する syslogd(8) は BSD のソースコードに由来しているものである。 カーネルロギング機能は klogd(8) ユーティリティによって提供され、スタンドアロン形式、syslogd クライアントのどちらの形式でも動作する。
syslogd は最近の多くのプログラムにロギングの手段を提供する。 記録されるメッセージは少なくとも時間の情報とホスト名を持ち、 通常はそれらに加えてプログラム名のフィールドも持っている。 しかしながら記録される内容の信頼性については それぞれのプログラムに依存する。
syslogd のソースコードは激しく変更されながらも二つの特徴についてはそれを維持し つづけている。まず第一に、その基本となる、一般的な BSD らしい挙動への 追随を保証することの系統的な意図の維持である。第二の重要な特徴は、この 版の syslogd が標準ライブラリに含まれる syslog と透過的に相互に影響し あっていることである。もし標準の共有ライブラリがリンクされたバイナリコ ードが正常に機能しないならば、作者達にその異様な挙動の例を送って欲しい。
起動時にその主設定ファイルである /etc/syslog.conf かまたは代替として -f オプションであたえられる名前のファイルが読み込まれる。その各行のうち、 シャープ記号 (``#'') ではじまるものと空行は無視する。その行の解析におい てエラーを生じた行もまた無視する。
このオプションは sysklogd パッケージの version 1.3 で導入された。既定 値の挙動がより以前の版の挙動の反対となっていて(ネットワーク越しに受信 するには)このオプションを利用しなければならないという点にどうか注意し ていただきたい。
syslogd はシグナルに反応する。 syslogd に簡単にシグナルを送るには次のように実行すればよい:
kill -SIGNAL `cat /var/run/syslogd.pid`
syslogd の設定ファイル文法はオリジナルの BSD のソースコードとは微妙に差異があ る。オリジナルでは、指示されたものとそれ以上の優先順位をもつメッセージ は全てログファイルに記録される。
# syslog.conf のサンプル daemon.debug /usr/adm/daemons
新しい仕組みのもとでもこの記述は全く同じ動作をもたらす。 アスタリスク(*)、イコール記号(=)、エクスクラ メーションマーク(!)、マイナス記号(-)の四つの新たな記述子が 追加された相異点である。
* を指定すると、指示した facility に関するの全てのメッ セージを一つに集めることができる。この動作は特定の priority レベルに対 するデバッグに支障がでるかもしれない点に注意すること。このアスタリスク 記法はより直観的なものであることがわかるだろう。
= ワイルドカードは記録を指示された priority のもののみに限定する。 たとえば特定のロギングについて、デバッグメッセージのみを集めることが可 能となる。
# syslog.conf のサンプル *.=debug /usr/adm/debug
priority の先頭に付く ! は、上記の priority、記述子の解釈を 反転する(訳注:すなわち、!info なら info 未満の priority を表す)。
# syslog.conf のサンプル mail.*;mail.!=info /usr/adm/mail news.info;news.!crit /usr/adm/news
除外する指示子はもっと直観的にも利用できる。上述の例はもっと簡単にでき る。たとえば…
mail.noneであるとか
mail.!*であるとか
mail.!debug
と記述すると mail facility によるすべてのメッセージが除外される。もっ と楽しむ余地もあるよね :-)
- をファイル名に接頭すると書き込み時のファイルシステムバッファの フラッシュ動作を抑制することができる。
純粋な BSD 的挙動からは多少順応した結果なのかもしれないが、 使う立場からすれば、BSD 的挙動よりもよりいくらかでも柔軟であることがわ かるだろう。これらの変更は標準的な syslog.conf(5) ファイルにはなんら影響を及ぼしていない点に注意せよ。拡張機能を利用する には明示的に設定ファイルを調整する必要がある。
syslogd の機能にネットワークへのサポートを提供する変更点がいくつかある。 ネットワークサポートとは、syslogd が稼働しているあるホストでのメッセー ジを別の syslogd が稼働しているホストへ転送し、そこで実際にディスクの ファイルに記録するようにできる、ということである。
この機能を有効にするにはコマンドラインで -r オプションを指定する。 syslogd の既定の動作はネットワークを関知しない。
syslogd はローカルに生成されるメッセージについて UNIX ドメインソケット を監視する方法を用いる。この方法が syslogd に標準 C ライブラリに含まれ る syslog との協調動作を可能にしている。同時に syslogd は他のホストか ら送信されるメッセージのために標準の syslog ポートを監視している。正し い動作のためには services(5) ファイル (普通 /etc にある)に次のエントリが必要である:
syslog 514/udp
もしこのエントリがなければ、UDP ポートが開設できないために syslogd はリモートのメッセージを受信することも他へ送信することもできない。この 場合、 syslogd は即座に終了する代りにエラーメッセージを出力する。
メッセージを送信するべきホスト名に @ を接頭して syslog.conf ファイルの通常のファイル名のかわりに記述することで、他のホストへメッセ ージを送信することができる。
# メッセージをすべてリモートのホストへ # 送信するための syslogd 設定ファイルの例 *.* @hostname
すべての カーネル メッセージをリモートのホストに送信するには (syslog.conf に)次のように記述する:
# カーネルメッセージをリモートのホストへ # 送信する設定ファイルの例 kern.* @hostname
起動時にネームサーバ(通常、syslogd よりも後から起動する)が応答しないた めにリモートのホストネームが名前解決できなくても問題はない。 syslogd はホスト名の問い合わせを 10 回繰り返し、そののちにエラーメッセージ出す。 あるいはこの問題を回避するために、 /etc/hosts ファイルに当のホスト名を記述しておくという方法もある。
普通の syslogd では、リモートホストが実は自分自身であった場合 (または、より複雑な三角関係とか、そんなの) syslog-loop が発生する。 たとえば作者のドメイン(Infodrom Oldenburg)でもたった一つのメッセージが われわれのディスクをあふれかえさせるという事故が起きたことがある :-(
これをさけるべく、リモートホストから(または自分自身)から発信されたメッ セージはそれ以上転送されない。これでもまだ問題があるような状況があるの なら作者(Joey) まで連絡してほしい。
もしリモートのホストが syslogd が稼働しているホストと同じドメインに属しているのであれば、FQDN ではな くて単純にホスト名のみが記録される。
ローカルネットワークにおいて、重要な情報のすべてを一台のコンピュータに 集めるための中央ロギングサーバを提供することができる。もしネットワーク が複数のドメインからなっているような場合には、単純なホスト名ではなくて FQDN で記録されるが、それが嫌な場合は、 -s でそのサーバで strip-domain 機能を使えばよい。これで syslogd はサーバが属するドメイン以外であっても剥ぎ取って単純にホスト名のみを記 録する。
-l オプションを使用するとローカルのコンピュータとしてのホスト名を定義でき る可能性が生じる。この場合でもやはり FQDN ではなくて単純なホスト名だけ を記録する。
リモートホストへメッセージを転送したり、リモートホストからメッセージを 受け取るために用いられる UDP ソケットは、 それが必要な時にだけオープンされる。 1.3-23 より前のリリースでは UDP ソケットは毎回オープンされていたが、 読み込み用あるいは転送用という形ではなかった。
この版の syslogd は複数の名前付きパイプ(FIFO) へのログ出力も可能である。 記録するメッセージをFIFO あるいは名前付きパイプで記録するには、ファイ ル名の前にパイプ記号(``|'')を付ける。これはデバッグに役に立つ。使用す る FIFO は syslogd の起動に先立って mkfifo コマンドで作成しておかなけ ればならない点に注意すること。
# 名前付きパイプとしての /usr/adm/debug へ # カーネルのデバッグメッセージを記録するための # 基本的な設定例 kern.=debug |/usr/adm/debug
この版の syslogd をインストールする場合において、重要な考察を要す る点が多分一つだけある。この版の syslogd は syslog ファンクションによ るメッセージのフォーマットが適切なものであることを前提としている。共有 ライブラリにより提供される syslog ファンクションの動作内容は、 libc.so.4.[2-4].n の範囲のなかだけでもどこかしら変更されている。なかで も明らかな変更は /dev/log ソケットへ出力される際にメッセージが NUL-terminate (\0 で終端される こと) されるようになった ことである。よって、この版の syslogd はメッセージが \0 で終端されてい ることに依存することとなった。
この問題は、概して、システム上で古いスタティックにリンクされたバイナリ コードを動作させるときにあらわになる。古い syslog ファンクションを用い るバイナリコードは、メッセージ中の最初の文字が削除されたメッセージを記 録し、空行を(複数)作ってしまう。この問題を修正するには、新しい版の共有 ライブラリを用いてリンクしなおすしかない。
syslogd(8) と klogd(8) の両方とも init(8) を用いる起動でも rc.* の中で起動でもどちらでも可能である。もし、init を用いる場合は -n オプションを必ず設定すること、さもなくばたく さんの syslog デーモンが起動してしまう。これは init(8) がプロセス ID に依存しているためである。
syslogd デーモンは使用不能攻撃の抜け道として利用されてしまう潜在的な可 能性を持っている。Jon Morrison (jmorrison@rflab.ee.ubc.ca) がこの可能 性を警告した。ごろつきのプログラマ(達)が、 syslog メッセージを syslogd デーモンに殺到させて、その結果、ログファイルで全ての利用可能な ファイルシステムを埋め尽すことが簡単にできるようになっていた。インター ネットドメインソケットを用いるロギングを有効にすることはローカルのコ ンピュータの上のプログラムや、他の誰かによる外部からの危険にシステムを さらすことになりうる。
コンピュータを守るための手段がいくつかある:
注:吸出し棒とは — 3/4、7/8、1 インチ の鋼鉄の棒で両端に吸い口が付 いている。もともとは西ノースダコタの油田などで使われた油井から油を`吸 い出す'ポンプで使われているもののことである。それが転じて牧場で牛に餌 をあたえるため、また時には反抗的だったり喧嘩腰だったりする牛を追うため に使われている棒を差す。
-d オプションを用いてデバッグモードを有効にすると syslogd はとてつもなく饒舌になって、いまなにがおこっているかを標準出力に出力す る。設定ファイルが再度読み込み込まれ解釈され直すときはいつでもテーブル 化された内部データ構造が出力される。このテーブルは四つのフィールドから 成っている:
ある行にエラーがあると全てのルールを無視してしまう。
syslogd はその処理過程のどの時点においてもログファイルのファイルモードを変更し ない。もしファイルが誰でも読み書きできるように作成されていても、である。 もしこのことによる問題を回避したいのであれば作成時に管理者のみがあつか えるように変更する必要がある。
これは、 smail 3.x の配布に含まれる savelog(8) によるログファイルのローテーションと連携して都合がよい。auth.* メッセ ージはパスワードが含まれていることがあり、それが誰にでも読めるというこ とは重大なセキュリティホールになるという点を忘れないように。
syslog.conf(5), klogd(8), logger(1), syslog(2), syslog(3), services(5), savelog(8)
syslogd は BSD のソースコードに由来していて、Greg Wettstein (greg@wind.enjellic.com) が Linux に移植し、Martin Schulze (joey@linux.de) が幾つかのバグの修正と新しい機能追加を実装した。 klogd のオリジナルは Steve Lord (lord@crya.com)によって書かれ、Greg Wettstein が多くの改善を施した。
12 October 1998 | Version 1.3 |