Provided by: manpages-ja_0.5.0.0.20131015+dfsg-2_all
名前
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 オプションであたえ られる名前のファイルが読み込まれる。その各行のうち、 シャープ記号 (``#'') ではじまるものと 空行は無視する。その行の解析におい てエラーを生じた行もまた無視する。
オプション
-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) を参照せよ)を使用してメッセージを受信する機能が有効になる。既定 値ではネットワークからのいかなるメッセージも受信しない。 このオプションは sysklogd パッケージの version 1.3 で導入された。既定 値の挙動がよ り以前の版の挙動の反対となっていて(ネットワーク越しに受信 するには)このオプションを 利用しなければならないという点にどうか注意し ていただきたい。 -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 が稼働しているホ ストへ転送し、そこで実際にディスクの ファイルに記録するようにできる、ということである。 この機能を有効にするにはコマンドラインで -r オプションを指定する。 syslogd の既定の動作は ネットワークを関知しない。 syslogd はローカルに生成されるメッセージについて UNIX ドメインソケット を監視する方法を用 いる。この方法が syslogd に標準 C ライブラリに含まれ る syslog との協調動作を可能にしてい る。同時に syslogd は他のホストか ら送信されるメッセージのために標準の syslog ポートを監視 している。正し い動作のためには services(5) ファイル (普通 /etc にある)に次のエントリが必 要である: syslog 514/udp もしこのエントリがなければ、UDP ポートが開設できないために syslogd はリモートのメッセージ を受信することも他へ送信することもできない。この 場合、 syslogd は即座に終了する代りにエ ラーメッセージを出力する。 メッセージを送信するべきホスト名に @ を接頭して syslog.conf ファイルの通常のファイル名のか わりに記述することで、他のホストへメッセ ージを送信することができる。 たとえば「すべて」のメッセージをリモートのホストへ送信するには、 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 ソケットは毎回オープンされていたが、 読み込み用あるいは転送用という形ではなかった。
名前付きパイプ(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 で終端されてい るこ とに依存することとなった。 この問題は、概して、システム上で古いスタティックにリンクされたバイナリ コードを動作させる ときにあらわになる。古い syslog ファンクションを用い るバイナリコードは、メッセージ中の最 初の文字が削除されたメッセージを記 録し、空行を(複数)作ってしまう。この問題を修正するに は、新しい版の共有 ライブラリを用いてリンクしなおすしかない。 syslogd(8) と klogd(8) の両方とも init(8) を用いる起動でも rc.* の中で起動でもどちらでも可 能である。もし、init を用いる場合は -n オプションを必ず設定すること、さもなくばたく さんの syslog デーモンが起動してしまう。これは init(8) がプロセス ID に依存しているためである。
セキュリティ上の注意
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 メート ル)の吸出し棒(注)を持ったごろつきのプログラム/デーモンどこ ろのさわぎではないようで あれば、 問題を起しているユーザとおしゃべりし てみるしかないね。 注:吸出し棒とは — 3/4、7/8、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 を保持するファイル。
バグ
ある行にエラーがあると全てのルールを無視してしまう。 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 が多 くの改善を施した。 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