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 ドメインの両方のソケットが利用可能なので、ローカルとリモートの両方で記録可能である。オプション
- -a socket
- この引数を使って、 syslogd が listen する追加のソケットを指定できる。これはデーモンを chroot() 環境で動作させようとする時に必要である。追加のソケットは 19 個まで指定できる。もしもっと多くのソケットが必要なら、syslogd.c ファイルの MAXFUNIX シンボルの値を増やす必要がある。 chroot() デーモンの例としては OpenBSD の人が記した http://www.psionic.com/papers/dns.html がある。
- -d
- デバッグモードを有効にする。このときデーモンは自身をバッググラウンドに推移させるための fork(2) を使用せずにフォアグラウンドに留まり、豊富なデバッグ情報を現在有効な tty へ出力する。このマニュアルページのデバッギングの章に詳細な解説があるので参照すること。
- -f config file
- 既定値の /etc/syslog.conf ファイルの代替として、指示された名前のファイルを使用する。
- -h
- syslogd の既定値の設定では、リモートのホストから受信したメッセージをそれ以上転送することはない。コマンドラインからこのスイッチを使用するとデーモンはリモートホストから受信したメッセージをさらに別に定義されるホストへ転送する。
- -l hostlist
- 記録するホストとして、FQDN ではなく単純にホスト名のみを指定する。コロン(``:'')を区切りに用いて複数のホストを指定することもできる。
- -m interval
- syslogd に定期的にタイムスタンプを記録させる。二行の -- MARK -- を記録する間隔 interval の既定値は 20 分であり、このオプションで変更可能である。 interval を 0 にすると、-- MARK -- 行を全く出力しない。
- -n
- 自動的なバックグラウンドへの移行を抑止する。これは syslogd が init(8) により起動および制御される場合にのみ必要である。
- -p socket
- /dev/log の代りに指定した UNIX ドメインソケットを利用する。
- -r
-
このオプションで、ネットワーク上でインターネットドメインソケットにより syslog サービス(
services(5) を参照せよ)を使用してメッセージを受信する機能が有効になる。既定値ではネットワークからのいかなるメッセージも受信しない。
- -s domainlist
- 記録する際に剥ぎ取るドメイン名を指定する。コロン(``:'')を区切りに用いて複数のドメインを指定することもできる。ドメインの一部ではなく、ドメイン全体を指定することに注意すること。例えば、 -s north.de と指定して、ログを記録するホスト名が satu.infodrom.north.de だった場合、ドメインは剥ぎ取られない。このような場合、 -s north.de:infodrom.north.de のように二つのドメインを指定しなければならない。
- -v
- バージョンを出力し、終了する。
シグナルの処理
syslogd はシグナルに反応する。 syslogd に簡単にシグナルを送るには次のように実行すればよい:-
kill -SIGNAL `cat /var/run/syslogd.pid`
- SIGHUP
- このシグナルは syslogd に再初期化を指示する。全ての開いていたファイルを閉じ、設定ファイル(既定値では、 /etc/syslog.conf) を再度読み込んで、 syslog(3) の機能を再び有効にする。
- SIGTERM
- syslogd は終了する。
- SIGINT, SIGQUIT
- デバッグモードが有効である場合は無視するが、そうでなければ syslogd は終了する。
- SIGUSR1
- デバッグモードのオン/オフを切り替える。この動作は syslogd がその起動時に -d オプションが指示されている場合にのみ有効。
- SIGCHLD
- メッセージの一斉通知のために、子プロセスがあればその終了を待つ。
設定ファイル文法の差異について
syslogd の設定ファイル文法はオリジナルの BSD のソースコードとは微妙に差異がある。オリジナルでは、指示されたものとそれ以上の優先順位をもつメッセージは全てログファイルに記録される。- たとえば、下記の例は daemon facility を使用する「全て (debug は最低の優先順位なので、それ以上の全てが適合するわけである)」のデーモンからの出力が /usr/adm/daemons に記録される:
-
# syslog.conf のサンプル
daemon.debug /usr/adm/daemons
新しい仕組みのもとでもこの記述は全く同じ動作をもたらす。アスタリスク( *)、イコール記号( =)、エクスクラメーションマーク( !)、マイナス記号( -)の四つの新たな記述子が追加された相異点である。
* を指定すると、指示した facility に関するの全てのメッセージを一つに集めることができる。この動作は特定の priority レベルに対するデバッグに支障がでるかもしれない点に注意すること。このアスタリスク記法はより直観的なものであることがわかるだろう。
= ワイルドカードは記録を指示された priority のもののみに限定する。たとえば特定のロギングについて、デバッグメッセージのみを集めることが可能となる。
- 下記の syslog.conf の記述例はすべての debug メッセージを /usr/adm/debug に記録する。
-
# syslog.conf のサンプル
*.=debug /usr/adm/debug
priority の先頭に付く ! は、上記の priority、記述子の解釈を反転する(訳注:すなわち、!info なら info 未満の priority を表す)。
- 以下の例では、priority が info であるものを除くすべての mail facility のメッセージが /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
であるとか
mail.!*
であるとか
mail.!debug
と記述すると mail facility によるすべてのメッセージが除外される。もっと楽しむ余地もあるよね :-)
- をファイル名に接頭すると書き込み時のファイルシステムバッファのフラッシュ動作を抑制することができる。
純粋な BSD 的挙動からは多少順応した結果なのかもしれないが、使う立場からすれば、BSD 的挙動よりもよりいくらかでも柔軟であることがわかるだろう。これらの変更は標準的な syslog.conf(5) ファイルにはなんら影響を及ぼしていない点に注意せよ。拡張機能を利用するには明示的に設定ファイルを調整する必要がある。
リモートロギングサポート
syslogd の機能にネットワークへのサポートを提供する変更点がいくつかある。ネットワークサポートとは、syslogd が稼働しているあるホストでのメッセージを別の syslogd が稼働しているホストへ転送し、そこで実際にディスクのファイルに記録するようにできる、ということである。-
syslog 514/udp
もしこのエントリがなければ、UDP ポートが開設できないために syslogd はリモートのメッセージを受信することも他へ送信することもできない。この場合、 syslogd は即座に終了する代りにエラーメッセージを出力する。
メッセージを送信するべきホスト名に @ を接頭して syslog.conf ファイルの通常のファイル名のかわりに記述することで、他のホストへメッセージを送信することができる。
- たとえば「すべて」のメッセージをリモートのホストへ送信するには、 syslog.conf に次のように記述する:
-
# メッセージをすべてリモートのホストへ
# 送信するための syslogd 設定ファイルの例
*.* @hostname
-
# カーネルメッセージをリモートのホストへ
# 送信する設定ファイルの例
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 ソケットは毎回オープンされていたが、読み込み用あるいは転送用という形ではなかった。
名前付きパイプ(FIFO)への出力
この版の syslogd は複数の名前付きパイプ(FIFO) へのログ出力も可能である。記録するメッセージをFIFO あるいは名前付きパイプで記録するには、ファイル名の前にパイプ記号(``|'')を付ける。これはデバッグに役に立つ。使用する FIFO は syslogd の起動に先立って mkfifo コマンドで作成しておかなければならない点に注意すること。- 下記はカーネルのデバッグメッセージを FIFO で記録する為の設定例である。
-
# 名前付きパイプとしての /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 で終端されていることに依存することとなった。セキュリティ上の注意
syslogd デーモンは使用不能攻撃の抜け道として利用されてしまう潜在的な可能性を持っている。Jon Morrison (jmorrison@rflab.ee.ubc.ca) がこの可能性を警告した。ごろつきのプログラマ(達)が、 syslog メッセージを syslogd デーモンに殺到させて、その結果、ログファイルで全ての利用可能なファイルシステムを埋め尽すことが簡単にできるようになっていた。インターネットドメインソケットを用いるロギングを有効にすることはローカルのコンピュータの上のプログラムや、他の誰かによる外部からの危険にシステムをさらすことになりうる。- 1.
- 514/UDP ソケットにアクセスすることができるホストやネットワークを制限するファイアウォールをカーネルに実装する。
- 2.
- ログの出力先をもしそれが破壊されてもコンピュータを損なうことはないような独立しているかまたはルート (/) ではないファイルシステムにする。
- 3.
- ext2 ファイルシステムはそのうちの特定の割合を root だけが使用可能とする制限を設定することができる。 注意 この方法は syslogd を root ではないプロセスで実行する必要がある。 さらに注意 この方法は syslogd が 514/UDP ソケットと接続できなくなるので、リモートロギングが不可能となる。
- 4.
- ローカルのコンピュータへの危険を制限するためにインターネットドメインソケットを無効にする。
- 5.
-
ステップ 4 を用いてもなお問題が残っていて、それが 3.5 フィート(だいたい 1 メートル)の吸出し棒(注)を持ったごろつきのプログラム/デーモンどころのさわぎではないようであれば、問題を起しているユーザとおしゃべりしてみるしかないね。
デバッギング
-d オプションを用いてデバッグモードを有効にすると syslogd はとてつもなく饒舌になって、いまなにがおこっているかを標準出力に出力する。設定ファイルが再度読み込み込まれ解釈され直すときはいつでもテーブル化された内部データ構造が出力される。このテーブルは四つのフィールドから成っている:- number
- このフィールドは 0 から始まるシリアル番号である。この番号は内部データ構造上(すなわち配列)での位置をあらわす。もし番号がないときは、 /etc/syslog.conf の対応する行にエラーがある。
- pattern
- このフィールドは巧妙で正確に内部構造を表現している。各列は facility( syslog(3) を参照)を表わす。以前使用されていたいくつかの facility もまだ残っているが、使用されているものだけがある。列の各フィールドは priority( syslog(3) を参照)をあらわす。
- action
- このフィールドには(facility/priority の)パターンに一致するメッセージを受信したときの action の詳細が記述される。全ての action については syslog.conf(5) マニュアルページを参照すること。
- arguments
-
このフィールドは action の最後のフィールドによる付加的な引数を示す。ファイルロギングではログファイルとするファイル名;ユーザロギングでは(ログ出力を通知する)ユーザの一覧;リモートロギングではログを配信するコンピュータのホスト名;コンソールロギングでは使用されるコンソール; ttyロギングでは指定された tty;一斉通知の場合は付加引数はなし。
ファイル
- /etc/syslog.conf
- syslogd の設定ファイル。正確な情報は syslog.conf(5) を見ること。
- /dev/log
- ローカル syslog メッセージを読み出す UNIX ドメインソケット。
- /var/run/syslogd.pid
- syslogd のプロセス ID を保持するファイル。
バグ
ある行にエラーがあると全てのルールを無視してしまう。関連項目
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 が多くの改善を施した。- Dr. Greg Wettstein
- Enjellic Systems Development
- Oncology Research Division Computing Facility
- Roger Maris Cancer Center
- Fargo, ND
- greg@wind.enjellic.com
-
- Stephen Tweedie
- Department of Computer Science
- Edinburgh University, Scotland
- sct@dcs.ed.ac.uk
-
- Juha Virtanen
- jiivee@hut.fi
-
- Shane Alderton
- shane@ion.apana.org.au
-
- Martin Schulze
- Infodrom Oldenburg
- joey@linux.de
12 October 1998 | Version 1.3 |