Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
--- 2000/ed000005.txt Fri Aug 25 12:57:41 2000 +++ 2001/ed010002.txt Thu Dec 27 13:56:35 2001 @@ -1,14 +1,14 @@ -----BEGIN PGP SIGNED MESSAGE----- ====================================================================== - JPCERT-ED-2000-0005 + JPCERT-ED-2001-0002 JPCERT/CC 技術メモ - sendmail バージョンアップマニュアル 初 版: 1998/01/30 (Ver.01) -発 行 日: 2000/08/25 (Ver.10) -最新情報: http://www.jpcert.or.jp/ed/2000/ed000005.txt +発 行 日: 2001/12/27 (Ver.11) +最新情報: http://www.jpcert.or.jp/ed/2001/ed010002.txt ====================================================================== 目 次 @@ -32,16 +32,20 @@ 6) システムファイルの内容に関する確認 VII. sendmail のインストール VIII. sendmail の再起動 + IX. (付録) PGP署名の検証 + X. 参考資料 I. はじめに - sendmail のバージョンアップは主に時代の流れに則した仕様変更や機能拡 -張のために行なわれていますが、中には新たに報告されたセキュリティホール -を塞ぐためのバージョンアップも存在します。sendmail の最新バージョンは -8.9.3 です (1999/10/01現在)。できるだけ新しいバージョンの sendmail を -利用されることをお勧めします。なお、sendmail 8.9 では、SPAM 対策に関す -る機能が強化されました。 + sendmail [1] [2] [3] のバージョンアップはおもに時代の流れに則した仕 +様変更や機能拡張のために行なわれていますが、中には新たに報告されたセキュ +リティホールを塞ぐためのバージョンアップも存在します。sendmail の最新 +バージョンは 8.12.1 です(2001年11月30日現在)。できるだけ新しいバージョ +ンの sendmail を利用されることをお勧めします。sendmail 8.9 からは SPAM +対策に関する機能が強化されています。sendmail 8.12 からは sendmail プロ +グラムに set-user-id ビットを立てないような設定もできるようになってい +ます。 sendmail R8 のバージョン番号は 8.x.y という形式で表されます。機能拡 張が行われた場合は x が加算され、仕様変更を伴わない minor bug fix (セ @@ -53,60 +57,78 @@ けが表示されます)。 % sendmail -d0.1 -bv -Version 8.9.3 - Compiled with: MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7 NAMED_BIND +Version 8.12.1 + Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MIME7TO8 MIME8TO7 : -yourname... Recipient names must be specified % sendmail -d0.101 (sendmail 8.9 以降の場合のみ) -Version 8.9.3 +Version 8.12.1 - セキュリティ上の修正が入ったのがどのバージョンであるかを知るには、 + セキュリティ上の修正が行なわれたのがどのバージョンであるかを知るには、 sendmail の配布パッケージに含まれる RELEASE_NOTES を参照して下さい。修 正項目の先頭に、SECURITY: と印が付されています (バグフィックスでないセ -キュリティ機能の強化を含む)。また CERT Advisory 等の文書を参照すること -で確認することもできるでしょう。特に sendmail 8.8.5 より古いバージョン -にはネットワークからの不正な操作を許す余地のあるセキュリティホールが報 -告されていますので、8.8.6 以降を利用するようにしてください。 +キュリティ機能の強化を含む)。また CERT Advisory 等の文書から確認するこ +ともできるでしょう(例えば [7] [8] [9] など)。 - なお、sendmail のセキュリティホールは大きく次の2つに分類されます。 + sendmail のセキュリティホールは大きく次の2つに分類されます。 ・アクセス権のない部外者のネットワークからの侵入を許してしまうもの ・ホストにログイン可能な一般ユーザが root 権限を詐取したり、読めな いはずのファイルが読めてしまうもの - 特に、sendmail R5 については、一般的に用いられているファイアウォール -ですら防衛できないセキュリティホールが広く知られているため、早急にバー -ジョンアップを行なうことを強く推奨します。 + sendmail R5 については、一般的に用いられているファイアウォールですら +防衛できないセキュリティホールが広く知られています[6]。sendmail 8.8.5 +より古いバージョンにはネットワークからの不正な操作を許す余地のあるセキュ +リティホールが報告されています[10]。さらに、sendmail 8.12.1 より古いバー +ジョンでは、いくつかの OS でローカルユーザがメイルキューに関する情報を +不正に入手できる可能性が指摘されています。 II. sendmail.cf とバージョン 最新の sendmail をインストールする際、sendmail.cf も同時に最新のもの -にすべきことは言うまでもありません。sendmail.cf もバージョンアップとと -もに幾つかの機能拡張や不具合の修正が施されています。ただ、sendmail.cf -を置き換えるための時間が十分に取れない場合で、かつ III 章に示すような、 -OS ベンダ独自の拡張を利用していない場合は、従来の sendmail.cf をそのま -ま使い続けることも可能です。sendmail.cf にもバージョンの区別があり、 -sendmailは、sendmail.cf のバージョンを調べて、それに相応しいように動作 -を切り換えます。新しい sendmail の機能は、新しいバージョンの -sendmail.cf を用いることによって柔軟に設定することができますが、古い -sendmail.cf を利用する場合は、従来の sendmailと互換性のある動作をする -ように不足しているパラメータが適切に補われます。従って、最低限のバージョ -ンアップ作業は、sendmail のバイナリファイルを置き換えるだけになります。 - - sendmail.cf のバージョンは、V で始まる行で定義されています。V で始ま -る行が存在しない場合は V1 相当となります。sendmail 8.9 で利用可能な最 -新の sendmail.cf のバージョンは V8 です。sendmail 8.9 からは、対応する -V7 より古い sendmail.cf を利用している場合に以下のようなメッセージが出 -力されることがありますが、無視しても構いません。 - - Warning: .cf file is out of date: sendmail 8.9.3 supports version 8, - .cf file is version 7 - - なお、sendmail R8 では sendmail.cf の置き場所は /etc/sendmail.cf に -統一されています。OS によっては、標準添付の sendmail が参照する -sendmail.cf の場所とは異なる場合があるので、注意が必要です。 +にすべきことは言うまでもありません。sendmail のバージョンアップととも +に sendmail.cf にも機能拡張や不具合の修正が施されています。ただ、 +sendmail.cf を置き換える作業を行なう余裕がなく、かつ III 章に示すよう +な OS ベンダ独自の拡張を利用していない場合は、従来の sendmail.cf をそ +のまま使い続けることも可能です。sendmail.cf にもバージョンの区別があり、 +sendmail のドキュメントではこれを「バージョンレベル」と呼んでいます。 +sendmailは、sendmail.cf のバージョンレベルを調べ、それに相応しいように +動作を切り換えます。新しい sendmail の機能は、新しいバージョンレベルの +sendmail.cf を用いることによって柔軟に設定することができますが、古い +sendmail.cf を利用する場合は、従来の sendmail と互換性のある動作をする +ように不足しているパラメータが補われます。従って、最低限のバージョンアッ +プ作業は、sendmail のバイナリファイルを置き換えるだけになります。 + + sendmail.cf のバージョンレベルは、V で始まる行で定義されます。V で始 +まる行が存在しない場合は V1 相当となります。sendmail 8.12.1 で利用可能 +な最新の sendmail.cf のバージョンレベルは V10 です。sendmail 8.9 以降 +では、古いバージョンレベルの sendmail.cf を利用している場合に warning +メッセージが出力され、管理者に注意を促します。以下はバージョンレベル +V9 の sendmail.cf を使って sendmail 8.12.1 を起動した場合の出力です。 + + Warning: .cf file is out of date: sendmail 8.12.1 supports version 10, + .cf file is version 9 + + なお、sendmail 8.10 からは sendmail.cf や aliases など sendmail の設 +定に関連するファイルの置き場所として /etc/mail/ が想定されています。OS +によっては、標準添付の sendmail が参照するディレクトリとは異なる場合が +あるので、注意が必要です。 + + sendmail 8.12 より以前の sendmail プログラムでは、root 権限で動作す +るよう、root を所有者として set-user-id ビットを設定する必要がありまし +た。これはデーモンとして動作する場合に tcp/25 番ポートを開いて外部から +の接続を待ち受けたり、一般ユーザが利用する MUA から直接起動されてメッ +セージを送信待ちキューに書き込んだりする場合のためです。一般に root 権 +限で動作するよう set-user-id ビットを設定されたプログラムには、なんら +かの脆弱性が発見された場合に root 権限が悪用される危険があります。そこ +で sendmail 8.12 からは、MTA として SMTP 接続を待ち受けて処理する機能 +と、MUA から起動されてメッセージ送信処理を行ない終了する機能の二つに対 +して異なる設定ファイルを利用するようになりました。このような設定で利用 +する場合には sendmail プログラムに set-user-id ビットを設定する必要が +なくなっています。本技術メモでは sendmail プログラムの更新に関する説明 +しか扱っていませんので、詳細に関しては +sendmail-8.12.1/sendmail/SECURITY をご参照ください。 III. OSベンダによる独自拡張 @@ -122,117 +144,83 @@ 最新の sendmail の機能を利用することによって、ベンダによる独自拡張と 同様の機能が実現できる場合は、sendmail.cf を最新の sendmail に合わせて -書き換える必要があります。もし、それが困難な場合は、各 OS ベンダが提供 -するパッチを入手することで sendmail のバージョンアップを行います。OS -ベンダが提供するセキュリティ関連のパッチに関する情報は、ベンダから直接 -入手することができますが、前述の CERT Advisory にも掲載されています。 +書き換える必要があります。それが困難な場合は、各 OS ベンダが提供するパッ +チを入手することで sendmail のバージョンアップを行います。OS ベンダが +提供するセキュリティ関連のパッチに関する情報は、ベンダから直接入手する +ことができますが、前述の CERT Advisory などにも掲載されています。 IV. コンパイル 以下では、sendmail.cf は変更せず、sendmail という名前のバイナリファ -イルを置き換えることによるバージョンアップ作業の方法について説明します。 -従って、バージョンアップ作業は sendmail のコンパイルから開始することに -なります。なお、sendmail 8.9 では SPAM 対策機能が強化されていると言わ -れていますが、その機能を効果的に利用するためには、sendmail.cf の変更が -必要になります。 +イルを置き換えることによるバージョンアップ作業について説明します。従っ +て、バージョンアップ作業は sendmail のコンパイルから開始することになり +ます。なお、sendmail 8.9 以降では SPAM 対策機能が強化されていると言わ +れていますが、その機能を効果的に利用するためには、sendmail.cf の変更も +必要です。 コンパイル作業の詳細や OS 毎の注意点などに関しては [4] もご +参照ください。 1) sendmail の配布パッケージを取得する sendmail の最新版は、以下の Anonymous ftp サーバ等から取得可能で す。 - ftp://ftp.sendmail.org/pub/src/sendmail/ - - 取得するファイルは以下のものです (sendmail 8.9.3 を入手する場合)。 - - sendmail.8.9.3.tar.gz - sendmail.8.9.3.tar.sig - - sendmail.8.9.3.tar.sig は、配布パッケージが改変されていないことを - 確認するための PGP による電子署名です。PGP がインストールされてい - るなら、以下のようにして、改変されていないことを確認することがで - きます。なお、"Sendmail Signing Key/1998 " - に対応する公開鍵は次の URL から入手できます。 - - http://pgp5.ai.mit.edu/ - -% gunzip sendmail.8.9.3.tar.gz -% pgp sendmail.8.9.3.tar.sig -Pretty Good Privacy(tm) 2.6.3i - Public-key encryption for the masses. -(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-01-18 -International version - not for use in the USA. Does not use RSAREF. -Current time: 1999/02/23 08:51 GMT - -File has signature. Public key is required to check signature. + ftp://ftp.sendmail.org/pub/sendmail/ -File 'sendmail.8.9.3.tar.$00' has signature, but with no text. -Text is assumed to be in file 'sendmail.8.9.3.tar'. + 取得するファイルは以下のものです (sendmail 8.12.1 を入手する場合)。 -Please enter filename of material that signature applies to: sendmail.8.9.3.tar - -Good signature from user "Sendmail Signing Key/1998 ". -Signature made 1999/02/05 01:07 GMT using 1024-bit key, key ID A39BA655 - -Signature and text are separate. No output file produced. - - 上記のように「Good signature」と表示されれば問題ありません。 - - なお、PGP は ftp://ftp.jpcert.or.jp/pub/security/tools/pgp/ などか - ら入手できます。また、gunzip は GNU プロジェクトから配布されてい - るパッケージ gzip-1.2.4.tar を入手して利用します。GNU から配布さ - れているソフトウェアは、多くの Anonymous FTP サイトにミラーされて - います。 + sendmail.8.12.1.tar.gz + sendmail.8.12.1.tar.sig + sendmail.8.12.1.tar.sig は、配布パッケージが改変されていないこと + を確認するための (sendmail.8.12.1.tar に対する) PGP 電子署名です。 + PGP プログラムと署名検証用の公開鍵を持っていれば、配布パッケージ + が改変されていないことを確認することができます。署名検証手順につ + いては 「IX.(付録) PGP署名の検証」を参照してください。 2) パッケージの展開 sendmail のパッケージは tar コマンドによりアーカイブされています ので、次のコマンドを実行してパッケージを展開します。 -% gunzip sendmail.8.9.3.tar.gz (すでに実行済みなら不要) -% tar xvf sendmail.8.9.3.tar +% gzip -d sendmail.8.12.1.tar.gz (すでに実行済みなら不要) +% tar xvf sendmail.8.12.1.tar - これにより、sendmail-8.9.3 という名前のディレクトリが作成され、そ - の中にパッケージが展開されます。展開の終了後、次のコマンドを実行 - してソースディレクトリに移動します。 + これにより、sendmail-8.12.1 という名前のディレクトリが作成され、 + その中にパッケージが展開されます。実際には sendmail 以外にもいく + つかのプログラムのソースコードがそれぞれのディレクトリの下に展開 + されます。sendmail 本体のソースコードは sendmail-8.12.1/sendmail/ + の下にあります。展開終了後、次のコマンドを実行して移動します。 -% cd sendmail-8.9.3/src +% cd sendmail-8.12.1/sendmail/ 3) WIDE 版パッチについて - 従来の sendmail は、国内で開発された OS でコンパイルする場合に若 - 干のソースコードの変更が必要でした。この変更をまとめたものとして - 「WIDE 版パッチ」と呼ばれるものが WIDE プロジェクトから配布されて - いました。この従来配布されていたパッチに含まれている移植性に関連 - した変更は、現在のオリジナルの sendmail に反映されており、最新の - sendmail であればオリジナルのままでも国内の主要な OS で特別な修正 - をすることなくコンパイルできるようになっています。 - - 現在も、引き続き「WIDE 版パッチ」は配布されていますが、これはいく - つかの機能拡張を行なうためのものです。この機能拡張は、主に特殊な - 配信処理を実現するためのものであり、一般的なワークステーションに + 現在配布されている「WIDE 版パッチ」は、主に特殊な配信処理を実現す + る機能拡張を行なうためのものであり、一般的なワークステーションに インストールされる sendmail には不要なものです。従って、「WIDE 版 パッチ」は、それによって実現される機能の必要性を十分に理解した上 で利用するようにして下さい。「WIDE 版パッチ」に関する情報は、 - http://www.wide.ad.jp/sendmail.html から入手することができます。 + http://www.kyoto.wide.ad.jp/mta/sendmail.html を参照してください + [5]。 4) コンパイルの準備 - コンパイルには、sendmail パッケージの展開で生成された src ディレ - クトリに用意されている Build というスクリプトを利用します。(Build - は sendmail 8.8 までの makesendmail に置き換わるものです。コンパ - イル作業に関する詳細な説明は、src ディレクトリにある README ファ - イルにもありますので、一読をお勧めします)。 + コンパイルには、ディレクトリ sendmail-8.12.1/sendmail/ に用意され + ている Build というスクリプトを利用します。(Build は sendmail 8.8 + までの makesendmail に置き換わるものです。コンパイル作業に関する + 詳細な説明は、sendmail ディレクトリにある README ファイルにもあり + ますので、一読をお勧めします)。 Build は、コンパイルを行おうとしている OS の種類を判定するととも に、その OS に対応したコンパイル環境を構築し、実際にコンパイルす - るところまでを行なうスクリプトです。コンパイル環境は、src/obj.[OS - の種類]というディレクトリに用意されます。また、sendmail に組み込 - むことが可能なオプショナルなライブラリ (NEWDB や BIND8 など) は自 - 動検出されます。ここでは、次のコマンドを実行して下さい。 + るところまでを行なうスクリプトです。コンパイル環境は、 + sendmail-8.12.1/obj.[OS の種類]/ というディレクトリに用意されます。 + また、sendmail に組み込むことが可能なオプショナルなライブラリ + (NEWDB や BIND8 など) は自動検出されます。ここでは、次のコマンド + を実行して下さい。 % sh Build @@ -242,17 +230,17 @@ % sh Build -I/usr/local/include -L/usr/local/lib - src/obj.[OSの種類] ディレクトリの中に生成される Makefile を調整した - い場合は、siteconfig ファイルを用意します。siteconfig ファイルは、 - Build から参照され、生成される Makefile に反映されます。siteconfig - ファイルは Build の起動時に、-f siteconfig というオプションを指定す - ることもできますが、BuildTools/Site/ ディレクトリの中に site.config.m4 - というファイルを用意しておけば、Makefile 生成時にデフォルトで参照さ - れます。 - - siteconfig ファイルの書式に関する詳細は、BuildTools/README や - BuildTools/Site/README を参照してください。ここでは、基本的なもの - のみを紹介します。 + sendmail-8.12.1/obj.[OSの種類]/sendmail/ ディレクトリの中に生成さ + れる Makefile を調整したい場合は、siteconfig ファイルを用意します。 + siteconfig ファイルは、Build から参照され、生成される Makefile に + 反映されます。siteconfig ファイルは Build の起動時に、-f + siteconfig というオプションを指定することもできますが、 + devtools/Site/ ディレクトリの中に site.config.m4 というファイルを + 用意しておけば、Makefile 生成時にデフォルトで参照されます。 + + siteconfig ファイルの書式に関する詳細は、devtools/README や + devtools/Site/README を参照してください。ここでは、基本的なものの + みを紹介します。 i) コンパイラやコンパイルオプション @@ -286,25 +274,25 @@ APPENDDEF(`confLIBS', `-ldbm') db (Berkeley new DB) を利用 + aliases.db といったファイルにデータベースを保存するライブラ リです。4.4BSD には標準で用意されています。ndbm に比べて高速 で、1レコード1024 文字までという長さ制限もありません。また、 - sendmail 8.9 からは db 2.x にも対応しています。特に db 1.x を - 使い続ける積極的な理由がない限り、db 2.x の利用を推奨します。 - また、8.9.2 以降では、8.9.1 以前のバージョンで問題となっていた、 - sendmail のプロセスがたくさん残ったままになる問題が解決され - ています。 - db を利用する場合、confMAPDEF に -DNEWDB を、LIBS= に -ldb を - 追加定義します。 + sendmail 8.9 からは db 2.x に、sendmail 8.10 からは db 3.x + にも対応しています。特に db 1.x を使い続ける積極的な理由がな + い限り、db 2.x 以降の利用を推奨します。また、8.9.2 以降では、 + 8.9.1 以前のバージョンで問題となっていた、sendmail のプロセ + スがたくさん残ったままになる問題が解決されています。db を利 + 用する場合、confMAPDEF に -DNEWDB を、LIBS= に -ldb を追加定 + 義します。 APPENDDEF(`confMAPDEF', `-DNEWDB') APPENDDEF(`confLIBS', `-ldb') - もし、これまで利用していた db より新しいバージョンを利用する - 場合は、sendmail を置き換えた後、忘れずに newaliases などを - 実行してデータベースファイルを作り直しておきます。 - new DB に関する情報は http://www.sleepycat.com/ から入手でき - ます。 + これまで利用していた db より新しいバージョンを利用する場合は、 + sendmail を置き換えた後、忘れずに newaliases などを実行して + データベースファイルを作り直しておきます。new DB に関する情 + 報は http://www.sleepycat.com/ から入手できます[11]。 NIS (旧称 YP) の参照 NIS 経由で aliases を参照したり、NIS の aliases データベース @@ -318,10 +306,9 @@ なお、-DNDBM と -DNEWDB を同時に定義して、aliases.{dir,pag} と aliases.db のどちらのファイル形式も利用できるようにしたい場合は、 - リンクしようとする new DB のライブラリから、ndbm コンパチブルイ - ンタフェース部分を削除しておく必要があります。詳細については、 - sendmail の配布パッケージに附属の README ファイルを参照してくだ - さい。 + リンクしようとする new DB のライブラリから、ndbm 互換インタフェー + ス部分を削除しておく必要があります。詳細については、sendmail の + 配布パッケージに附属の README ファイルを参照してください。 また、ヘッダ (*.h) やライブラリ (lib*.a) が OS の標準パスにイン ストールされていない場合は、confINCDIRS や confLIBDIRS に、それ @@ -344,20 +331,18 @@ β) DNS の MX レコードを参照可能な sendmail を作る - インクルードファイルやライブラリの調整を行います。 - なお、古いバージョンの BIND ライブラリにはセキュリティホール - があるため、できるだけ新しいバージョン (bind 4.9.7 や 8.1.2) - を利用してください。また、bind 4.8 などの古いバージョンでは、 - セキュリティ以前の問題として、動作が不安定で届くはずのメール - がエラーになる場合があります。 - BIND に関する情報は http://www.isc.org/bind.html を参照して - ください。 - - a) OS 添付の bind (4.x ベース) を利用するとき - 現在、OS に標準で添付されている bind のほとんどのバージョ - ンは 4.x です。libresolv.a が用意されている場合は、confLIBS - に -lresolv を定義します。OS によっては、libc.a に含まれ - ているため、定義する必要がない場合があります。 + インクルードファイルやライブラリの調整を行います。なお、古い + バージョンの BIND ライブラリにはセキュリティホールがあるため、 + できるだけ新しいバージョンを利用してください。また、bind 4.8 + などの古いバージョンでは、セキュリティ以前の問題として、動作 + が不安定で届くはずのメールがエラーになる場合があります。BIND + に関する情報は http://www.isc.org/products/BIND/ を参照して + ください[12]。 + + a) bind (4.x ベース) を利用するとき + bind バージョン 4.x の libresolv.a が用意されている場合は、 + confLIBS に -lresolv を定義します。OS によっては、libc.a + に含まれているため、定義する必要がない場合があります。 APPENDDEF(`confLIBS', `-lresolv') @@ -393,24 +378,23 @@ iv) TCP Wrappers (SMTP の接続制限を細かく行いたい場合) sendmail 8.8 からは、sendmail.cf に check_relay ルールセットを - 定義することにができるようになりました。check_relay ルールセッ - トを定義すると、デーモン sendmail に SMTP 接続しようとするホス - トの IP アドレスや、その IP アドレスを DNS で逆引きして得られる - ホスト名によって、選択的に接続を拒否することができます。 - - ところで、同様な機能をより一般的に実現するものとして、TCP - Wrappers と呼ばれるパッケージが存在し、このパッケージを - sendmail に組み込んで利用することが可能です。多くの場合、 - check_relay ルールセットの機能を用いるだけで十分ですが、TCP - Wrappers を組み込んできめ細かく効果的に接続制限を行いたい場合は、 - libwrap.a および tcpd.h を用意し、コンパイル時にマクロ - TCPWRAPPERS が定義されるよう、confENVDEF 等に -DTCPWRAPPERS を - 定義します。また、必要に応じて、confINCDIRS や confLIBDIRS も - 調整します。 + 定義することができるようになりました。check_relay ルールセット + を定義すると、デーモン sendmail に SMTP 接続しようとするホスト + の IP アドレスや、その IP アドレスを DNS で逆引きして得られるホ + スト名によって、選択的に接続を拒否することができます。 + + 同様な機能をより一般的に実現するものとして、TCP Wrappers と呼ば + れるパッケージが存在し、このパッケージを sendmail に組み込んで + 利用することも可能です。多くの場合、check_relay ルールセットの + 機能を用いるだけで十分ですが、TCP Wrappers を組み込んできめ細か + く効果的に接続制限を行いたい場合は、libwrap.a および tcpd.h を + 用意し、コンパイル時にマクロ TCPWRAPPERS が定義されるよう、 + confENVDEF 等に -DTCPWRAPPERS を定義します。また、必要に応じて + confINCDIRS や confLIBDIRS も調整します。 TCP Wrappers は次の URL から入手できます。 - ftp://ftp.porcupine.org/pub/security/ + ftp://ftp.porcupine.org/pub/security/index.html パッケージ名は tcp_wrappers_.tar.gz です ( は最新のバー ジョン番号になります)。 @@ -420,26 +404,12 @@ /etc/hosts.allow に sendmail: ALL のような行が必要になるので、 注意が必要です。 - v) MIME Buffer Overflow 対策 - - sendmail.8.9.1a.patch として提供されていた、メールクライアント - に対するバッファオーバフロー攻撃への対策は、sendmail 8.9.2 から - はパッケージに含まれています (sendmail.8.9.1a.unofficial.patch - の修正も含まれています)。ただし、8.9.1a の場合と同様に、対策の - ためのコードを有効にするには、コンパイルの際に _ - FFR_MAX_MIME_HEADER_LENGTH を定義しておくことが必要です。 - - APPENDDEF(`confENVDEF', `-D_FFR_MAX_MIME_HEADER_LENGTH=1') - - この対策の詳細については、sendmail.8.9.1a.patch.README を参照して - ください。 - 5) コンパイルの開始 - 一旦コンパイル環境が構築された後に再びコンパイルが必要になった場合 - は、再び sh Build を実行するか、obj.[OSの種類] ディレクトリの中で - make を実行します。 + 一旦コンパイル環境が構築された後に再びコンパイルが必要になった場 + 合は、再び sh Build を実行するか、obj.[OSの種類]/sendmail/ ディレ + クトリの中でmake を実行します。 % make sendmail @@ -456,15 +426,16 @@ 一部の OS では、標準でサービススイッチファイルがサポートされているこ とがあります。また、sendmail 8.7 からは sendmail 独自のサービススイッ -チファイルの仕組みが提供されています。サービススイッチファイルは、hosts -や aliases の検索について、ローカルのファイル、NIS、DNS のいずれを参照 -するのか、あるいはそれらのうちの複数を参照する場合にその参照順序を指定 -するために利用されます。 - サービススイッチファイルは、Solaris では /etc/nsswitch.conf が、DEC -では /etc/svc.conf が、sendmail 方式では /etc/service.switch が利用され -ます。もしファイルが存在する場合は、設定内容が意図通りになっているかど -うかを確認しておきます。OS が標準でサポートしているサービススイッチファ -イルの設定方法については、それぞれの OS のマニュアルを参照してください。 +チファイルの仕組みが提供されています。サービススイッチファイルは、 +hosts や aliases の検索について、ローカルのファイル、NIS、DNS のいずれ +を参照するのか、あるいはそれらのうちの複数を参照する場合にその参照順序 +を指定するために利用されます。 + サービススイッチファイルは、例えば Solaris では /etc/nsswitch.conf +が、DEC では /etc/svc.conf が、sendmail 方式では +/etc/mail/service.switch が利用されます。もしファイルが存在する場合は、 +設定内容が意図通りになっているかどうかを確認しておきます。OS が標準で +サポートしているサービススイッチファイルの設定方法については、それぞれ +の OS のマニュアルを参照してください。 VI. sendmail のテスト @@ -486,7 +457,7 @@ % ./sendmail -bt - エラーが報告された場合は、既存の sendmail.cf 修正するか、新しい + エラーが報告された場合は、既存の sendmail.cf を修正するか、新しい sendmail.cf を用意する必要があります。前述のように、OS に標準で添 付されている sendmail.cf を利用している場合には特に注意が必要です。 なお、aliases のデータベースファイルが、aliases のテキストファイル @@ -494,10 +465,10 @@ あります。そのような場合は、まず運用中の sendmail で newaliases (あるいは sendmail -bi) を実行しておくと良いでしょう。 - なお、-bt を指定して起動したテストモードにおいて sendmail.cf による - アドレス解析のテストを行う場合、sendmail 8 からルールセット 3 がデ - フォルトで適用されなくなっていることに注意して下さい。ルールセット 0 - によるアドレス解析のテストを行う場合は、必ず + なお、-bt を指定して起動したテストモードにおいて sendmail.cf によ + るアドレス解析のテストを行う場合、sendmail 8 以降ではルールセット + 3 がデフォルトで適用されなくなっていることに注意して下さい。ルー + ルセット 0 によるアドレス解析のテストを行う場合は、必ず > 3,0 user@domain のように入力してテストを行ってください。sendmail.cf によっては、3 を 省略しても同様のテストができてしまうことがありますが、これはたまたま @@ -514,7 +485,7 @@ はずして下さい) に、期待されるホスト名を定義して下さい。 % ./sendmail -bt -d0.4 -Version 8.9.3 +Version 8.12.1 : ============ SYSTEM IDENTITY (after readcf) ============ (short domain name) $w = mail1 @@ -522,13 +493,14 @@ (subdomain name) $m = sub.university.ac.jp (node name) $k = mail1.sub.university.ac.jp ======================================================== + : hostname(1) コマンドの出力が mail1 といった FQDN でない名前であり、 FQDN を得るために DNS の参照が必要な場合には、sendmail の起動時に ネームサーバが起動されていなければなりません。もし、FQDN がネーム サーバから取得できなかった場合は、メールの配信が正しく行なえない 可能性があるので、sendmail は動作を中止してしまいます。このような - 問題を避けるためには、sendmail.cfの Dj 行で静的に定義しておくと良 + 問題を避けるためには、sendmail.cfの Dj 行で静的に定義しておくとよ いでしょう。 ホスト名に関するもう一つの注意点ですが、例えばメールサーバとして @@ -545,7 +517,7 @@ 定義する名前として、メールサーバの正式な FQDN ではなく、メールサー バに対する別名を用いることがあります。例えば次のような場合です。 (注意: 別名として DNS の CNAME で定義されるものを指定することは、 - 推奨されていません; RFC1912 参照。) + 推奨されていません; RFC1912 参照[13]。) host.sub.university.ac.jp. IN MX 10 host.sub.university.ac.jp. IN MX 20 ms.sub.university.ac.jp. @@ -579,10 +551,10 @@ Cw ms.sub.university.ac.jp - あるいは /etc/sendmail.cw ファイル中にホスト名を記述します。後者 - の場合、sendmail.cf において Fw/etc/sendmail.cw という行が有効に - なっていることも確認しておきます。記述した後、もう一度 sendmail - をテストモードで起動し $=w を入力して設定を確認します。 + あるいは /etc/mail/sendmail.cw ファイル中にホスト名を記述します。 + 後者の場合、sendmail.cf において Fw/etc/mail/sendmail.cw という行 + が有効になっていることも確認しておきます。記述した後、もう一度 + sendmail をテストモードで起動し $=w を入力して設定を確認します。 もちろん、DNS の設定において MX の右辺に現れる名前を、現在の sendmail.cf の設定で $=w に含まれている FQDN に修正する、という対 @@ -654,8 +626,8 @@ 5) ファイルやディレクトリのパーミッションに関する設定および確認 - sendmail 8.9 では、より安全性を高めるため、ファイルやディレクトリ - に関するチェックが厳しく行われ、原則として world/group writable + sendmail 8.9 からは、より安全性を高めるため、ファイルやディレクト + リに関するチェックが厳しく行われ、原則として world/group writable なファイルやディレクトリを信用しなくなりました。特に、システムディ レクトリについては、sendmail の起動時に以下のようなメッセージが出 力されることがあります。 @@ -668,15 +640,16 @@ 本来 world/group writable である必要がないものです。 また、その他のファイルについても、sendmail の実行時に同様の確認が - 行われ、パーミッションに問題がある場合には、そのファイルは無視され - るとともに、エラーが報告されます。ただし、あえて world/group + 行われ、パーミッションに問題がある場合には、そのファイルは無視さ + れるとともに、エラーが報告されます。ただし、あえて world/group writable に設定する必要がある場合のことを考慮して、チェックの厳し - さの度合いを sendmail.cf の DontBlameSendmail オプションの設定によ - り緩和させることができるようになっています。sendmail 8.9 へのバー - ジョンアップの際には、これらの設定について十分確認をしておいてくだ - さい。sendmail のインストール前に、-bv オプションを用いて、問題が - ありそうなアドレスをチェックしておくことで、DontBlameSendmail の - 設定に関するほとんどの問題を事前に確認しておくことができます。 + さの度合いを sendmail.cf の DontBlameSendmail オプションの設定に + より緩和させることができるようになっています。sendmail 8.9 以前の + バージョンから sendmail 8.9 以降のバージョンへの置き換えを行なう + 際には、これらの設定について十分確認をしておいてください。 + sendmail のインストール前に、-bv オプションを用いて、問題がありそ + うなアドレスをチェックしておくことで、DontBlameSendmail の設定に + 関するほとんどの問題を事前に確認しておくことができます。 # sendmail -bv list :include: /usr/local/lib/ml/list... Cannot open /usr/local/lib/ml/list: @@ -907,9 +880,9 @@ 例えば、sendmail をインストールしている場所が /usr/lib/sendmail であっ たとすると、root 権限で次のように作業します (sendmail をインストールす -るディレクトリは、OS 毎に異るので、環境に合わせて読み替えてください)。 +るディレクトリは、OS 毎に異なるので、環境に合わせて読み替えてください)。 -# cp ./sendmail /usr/lib/sendmail.new +# cp -p ./sendmail /usr/lib/sendmail.new # chown root /usr/lib/sendmail.new # chmod 4755 /usr/lib/sendmail.new (root 権限で起動されることになるので、SGID kmem は必要ありません) @@ -946,8 +919,8 @@ いる sendmail を再起動します。もちろん、外部から送られてくるメールを受 信する必要のないホストでは、受信用のデーモン sendmail を起動する必要は ありません。ただし、sendmail を用いてリモートにメールを発信するホスト -では、配信未完了のため mqueue に保存されたメールを定期的に処理するため、 -デーモンを起動しておく必要があります。 +では、配信未完了で mqueue に保存されたメールを定期的に処理するため、デー +モンを起動しておく必要があります。 # ps ax | grep sendmail 143 ... 0:42 sendmail: accepting connections on port 25 @@ -983,6 +956,139 @@ % tail -f /var/log/syslog +IX. (付録) PGP署名の検証 + + sendmail では配布パッケージが第三者によって改変されていないことを確 +認できるようにするため、PGP による署名を行なっています。署名を検証する +ためには sendmail の配布パッケージ自身とその署名ファイル、そして署名者 +の公開鍵を入手する必要があります。sendmail バージョン 8.12.1 の署名検 +証に使う鍵 + + "Sendmail Signing Key/2001 " + +は次の URL から公開されています。 + + ftp://ftp.sendmail.org/pub/sendmail/PGPKEYS + +厳密には、sendmail の配布パッケージ、その署名ファイル、そして署名者の +公開鍵、これら三つのファイルは全て別々のサイトから集めてくることが望ま +れます。悪意を持った第三者によるソースコードの改竄を正しく検知するため +です。上記公開鍵のフィンガープリントは + + Key fingerprint = 59 AF DC 3E A2 7D 29 56 89 FA 25 70 90 0D 7E C1 + +となります。以下に、pgp5.0 と GnuPG でフィンガープリントを出力する例を +示します。 + +% pgpk -ll 'Sendmail Signing Key/2001' +Type Bits KeyID Created Expires Algorithm Use +pub 1024 0xCC374F2D 2000-12-14 ---------- RSA Sign & Encrypt +f16 Fingerprint16 = 59 AF DC 3E A2 7D 29 56 89 FA 25 70 90 0D 7E C1 +uid Sendmail Signing Key/2001 +sig 0xCC374F2D 2000-12-14 Sendmail Signing Key/2001 + : + : +% gpg --finger 'Sendmail Signing Key/2001' +gpg: Warning: using insecure memory! +pub 1024R/CC374F2D 2000-12-14 Sendmail Signing Key/2001 + Key fingerprint = 59 AF DC 3E A2 7D 29 56 89 FA 25 70 90 0D 7E C1 + +% + +pgp 5.0 を使って署名を検証する例を以下に示します。 + +% ls +sendmail.8.12.1.tar.gz sendmail.8.12.1.tar.sig +% gzip -d sendmail.8.12.1.tar.gz +% ls +sendmail.8.12.1.tar sendmail.8.12.1.tar.sig +% pgpv sendmail.8.12.1.tar.sig +Cannot open configuration file /irt/home/yozo/.pgp/pgp.cfg +This signature applies to another message +File to check signature against [sendmail.8.12.1.tar]: + +Good signature made 2001-10-01 15:13 GMT by key: + 1024 bits, Key ID CC374F2D, Created 2000-12-14 + "Sendmail Signing Key/2001 " + +WARNING: The signing key is not trusted to belong to: +Sendmail Signing Key/2001 + +% + +以下は GnuPG を使って署名を検証する例です。 + +% gzip -dc sendmail.8.12.1.tar.gz | gpg --verify sendmail.8.12.1.tar.sig - +gpg: Signature made Tue Oct 2 00:13:16 2001 JST using RSA key ID CC374F2D +gpg: Good signature from "Sendmail Signing Key/2001 " +Could not find a valid trust path to the key. Let's see whether we +can assign some missing owner trust values. + +No path leading to one of our keys found. + +gpg: WARNING: This key is not certified with a trusted signature! +gpg: There is no indication that the signature belongs to the owner. +gpg: Fingerprint: 59 AF DC 3E A2 7D 29 56 89 FA 25 70 90 0D 7E C1 +% + +どちらの場合も「Good signature」と表示されていれば問題ありません。 + +PGP プログラムは例えば ftp://ftp.ring.gr.jp/pub/pgp/ などから入手でき +ます。また、gzip は GNU プロジェクトから配布されているファイル圧縮展開 +プログラムです。こちらも ftp://ftp.ring.gr.jp/pub/GNU/gzip/ などから入 +手できます。 + + +X. 参考資料 + +[1] sendmail, 2nd Edition + Bryan Costales and Eric Allman, + O'Reilly & Associates, January 1997 + ISBN 1-56592-222-0 + +[2] sendmail システム管理 + Bryan Costales, Eric Allman 著 + 中村 素典 監訳、鈴木 克彦 訳、オライリー・ジャパン、1997 + +[3] Sendmail Home Page + http://www.sendmail.org/ + +[4] Compiling Sendmail + http://www.sendmail.org/compiling.html + +[5] Information about the Sendmail + http://www.kyoto.wide.ad.jp/mta/sendmail.html + +[6] CERT Advisory CA-1995-08 + Sendmail v.5 Vulnerability + http://www.cert.org/advisories/CA-1995-08.html + +[7] CERT Advisory CA-1996-20 + Sendmail Vulnerabilities + http://www.cert.org/advisories/CA-1996-20.html + +[8] CERT Advisory CA-1996-24 + Sendmail Daemon Mode vulnerability + http://www.cert.org/advisories/CA-1996-24.html + +[9] CERT Advisory CA-1996-25 + Sendmail Group Permissions Vulnerability + http://www.cert.org/advisories/CA-1996-25.html + +[10] CERT Advisory CA-1997-05 + MIME Conversion Buffer Overflow in Sendmail Versions 8.8.3 and 8.8.4 + http://www.cert.org/advisories/CA-1997-05.html + +[11] The Sleepycat Software Home Page + http://www.sleepycat.com/ + +[12] Internet Software consortium - BIND + http://www.isc.org/products/BIND/ + +[13] RFC1912: Common DNS Operational and Configuration Errors + http://www.ietf.org/rfc/rfc1912.txt + ====================================================================== ご多忙の中、この文書を作成するため、多くの貴重なお時間を割いてご協力頂 いた 中村 素典 氏に心より感謝申し上げます。 @@ -996,7 +1102,7 @@ さまざまな不正アクセスに関する情報がありましたら、info@jpcert.or.jp ま でご提供くださいますようお願いします。JPCERT/CC の所定の様式 - http://www.jpcert.or.jp/form.html + http://www.jpcert.or.jp/form/ にご記載のうえ、関連するログファイルのメッセージとともに、 @@ -1035,7 +1141,7 @@ こされる結果に対して、JPCERT/CC は何ら保障を与えるものではありません。 - ---------- -1998,1999 (c) JPCERT/CC +1998-2001 (c) JPCERT/CC この文書を転載する際には、全文を転載してください。情報は更新されてい る可能性がありますので、最新情報については @@ -1052,6 +1158,9 @@ - ---------- 改訂履歴 +2001/12/27 参照 URL および文面の更新 + WIDE 版パッチに関する記述を修正 + set-user-id に関する記述を追加 2000/08/25 参照 URL の更新 1999/10/01 VII 章 - mailstats に関する間違いの記述を削除した。 (mailstats は sendmail とは独立のプログラムである) @@ -1083,10 +1192,11 @@ -----BEGIN PGP SIGNATURE----- Version: 2.6.3ia +Charset: noconv -iQCVAwUBOaXusox1ay4slNTtAQFsnwP+Pg+ElIc8aOisvbqitJMemBx7YYJZvbnb -vEwaPa/OYPM/ayvfBnoAIaAP54GUc5dbwQ/uBcXOL2+BaaejMuZ4++KfJEEjKug2 -ne78i7pzMydk1gSZt4lBud/fY3Gn6lEa3ibovwadIt0xzCN5jVnV2Gm3oNH8CYaD -AwW16sXAnvc= -=+9Jm +iQCVAwUBPCqHmIx1ay4slNTtAQEmxAQAiIvk6Lv75Y7Pt73exITtHe42Piz1a+ZP +sSnMdahVVupfclTv2A+e6RCp0Wmq6q8TKovKwI4BNTWIbuvo8df0enTxI5JaUT8j +zDGCh5nlqWCXboT1btCIpqktcHms7sbCdS5EEzs6wYyqkOX8p91w4hw+2kZjfg3p +CldvH8njORk= +=BrC7 -----END PGP SIGNATURE-----