$Id: readme,v 1.8.2.11 2000/12/12 21:01:41 craigmcc Exp $ リリースノート: ======================= TOMCAT バージョン 3.2.1 ======================= 0. 目次: 1. はじめに 2. Tomact のインストールと実行 3. Tomcat を使用したアプリケーションの開発 4. Tomcat: 過去、現在、そして未来 5. このリリースの新機能 6. 既知のバグと問題点 7. 3.2.1 におけるセキュリティの脆弱性の対処 ============================================================================= 1. はじめに Tomcat は、Servletコンテナと JavaServer Pages(tm)の実装の一つです。単 独で動作させたり、以下のような有名な Web サーバと一緒に動作させること ができます。 - Apache, バージョン 1.3 以降 - Microsoft Internet Information Server, バージョン 4.0 以降 - Microsoft Personal Web Server, バージョン 4.0 以降 - Netscape Enterprise Server, バージョン 3.0 以降 使用許諾契約書(トップディレクトリにある LICENSE ファイルです)を読んでく ださい。これはこのリリースに含まれるすべてのソフトウェアに適用されます。 Tomcat バージョン 3.2.1 は、セキュリティ関連の更新です。この後の第7章 に変更の詳細があります。他のTomcat 3.2 に存在する問題点は、3.2.1 でも 存在します。それらはその後のメンテナンスアップデート(3.2.2 など)で対処 します。 ============================================================================= 2. Tomcat のインストールと実行 Tomcat には、JRE 1.1 以降に準拠している Java Runtime Environment が必 要です。これには Java2 プラットフォームシステムも含まれます。アプリケー ションを開発しようとする場合には、Java Development Kit 1.1 以降の環境 に含まれるような Java コンパイラが必要です。これには Java2 に準拠した JDK も含まれます。 Tomcat のインストールと実行についての詳しい情報は、Tomcat の配布物を解 凍したディレクトリの下にある "doc/uguide/tomcat_ug.html" をブラウザで ご覧ください。 (訳注: 日本語版は、"doc-jp/uguide/tomcat_ug.html"です。) ============================================================================= 3. Tomcat を使用したアプリケーションの開発 Tomcat を使用したServletや JSP ベースのアプリケーションを開発する際の 補足情報は、アプリケーション開発者用のガイドに記されています。Tomcat の配布物を解凍したディレクトリの下にある "doc/appdev/index.html" をブ ラウザでご覧ください。 (訳注: 日本語版は、"doc-ja/appdev/index.html"です。) ============================================================================= 4. TOMCAT: 過去、現在、そして未来 - バージョン 3.0 (1999年12月リリース)が Tomcat の最初のリリースでした。 Java ServletとJSPの仕様の実装に加え、最小限の Apache コネクタを持っ ていました。 - Tomcat 3.1 (2000年4月リリース) で、Apache との接続を改善し、Netscape と IIS Webサーバのコネクタをサポートしました。また、WAR ファイルのサポー ト、Servletの自動再読込、そして JSP ページを事前にコンパイルしておくた めのコマンドラインツール(jspc)を追加しました。最後に、バージョン 3.1で は、コードの再構成にも焦点を当てています。(モジュール化、クリーンアッ プ、コード構成の見直し、使用されていないコードの削除、J2EE仕様のコード の分離) - Tomcat 3.2 は、まずパフォーマンスのチューンアップをおこないましたが、 他にもいくつかの新しい機能を追加しています。(次の章を見てください。) - Tomcat 4.0 は、Tomcat 3.xとは独立して開発しています。Catalina アーキ テクチャに基づいており、Tomcat 3.x のアーキテクチャとはかなり違ってい ます。さらに、Tomcat 4.0 は Servlet 2.3 と JSP 1.2 仕様のリファレンス 実装を目指しています。 ============================================================================= 5. このリリースでの新機能 Tomcat 3.2.1 は Tomcat 3.2 (final) コードベースを基にした、メンテナンス・ バグフィックスリリースです。以下の変更が含まれています。 - WEB-INF ディレクトリ下にある JSP ページ(/WEB-INF/dummy.jsp)へのリクエ ストが許可されないようになりました。以前は、静的なファイルへのリクエス トのみが不許可になっていました。 - デバッグのために、JDBC レルムリクエストインターセプタは、起こったすべて の JDBC 例外の記述をログに記録するようになりました。 ============================================================================= 6. 既知のバグと問題点 6.1 Windows 環境下での Document Root としての絶対パスの使用 TOMCAT_HOME/conf/server.xml ファイル内で、docRoot 属性に相対パス名か絶対 パス名を宣言することができます。Windows システムで絶対パス名を使用したい 場合には、このプラットフォームでの Java の絶対パス名の定義に従って、ドラ イブ文字を含めなければなりません。 良い例: c:\mydirectory\mydocroot 良い例: c:/mydirectory/mydocroot 悪い例: \mydirectory\mydocroot 悪い例: /mydirectory/mydocroot Unix 環境下では、絶対パスはスラッシュ('/')文字で始まらなければなりません。 6.2 コンテナ管理によるセキュリティ Tomcat 3.2 は、Servlet API仕様書 バージョン2.2 の11章で述べているコン テナ管理によるセキュリティを実装しています。この実装に関しては、以下の 記述に目を通してください。 - BASIC認証とフォームベースの認証は正常に動作するはずです。これに関する バグを見つけたら に報告してください。 テストアプリケーションは下のURLで定義される保護領域を持っています。 http://localhost:8080/examples/jsp/security/protected これは $TOMCAT_HOME/conf/tomcat-users.xml で適切な権限を与えるように定 義されているユーザであれば、誰でもアクセスできます。デフォルトではフォー ムベースの認証が使われています。 しかし、試してみたいと思う人のために Basic認証の設定もコメントアウトした状態で書かれています。 警告: Basic 認証は、インターネットやその他の安全でないネットワーク間で 使用する一般的なセキュリティとしては適していません。なぜならば、リクエ スト毎にユーザ名とパスワードはエンコードされても暗号化されずに送信され るからです。 - DIGEST 認証や HTTPS クライアント認証(例. SSL)はこのリリースではサポー トされていません。 6.3 Welcome ファイルにおける RequestDispatcher.include() の使用 [Bug Report #160] 下記のやり方が間違った内容のレスポンスを生じさせます: - ドキュメントルート以下にサブディレクトリをつくっている。 (例 "subdir/"). - URL でこのサブディレクトリをリクエストした時に表示 するように設定した welcome ファイルが、このサブデ ィレクトリにある。(例 "index.html") - RequestDispatcher で "/subdir" もしくは "/subdir/" をリクエストし、その中で include() を呼びだす。 "/subdir" もしくは "/subdir/" を で指定した時も、同じ問 題が起こる可能性があります。 回避方法は、RequestDispatcher に "/subdir/index.html" のように、あなた が表示したいファイルの完全な相対コンテキストパスを記述することです。 6.4 Servletの自動リロード Tomcat 3.2 は、( WEB-INF/classes ディレクトリや WEB-INF/lib ディレクト リにある JAR ファイルからロードされた)Servletクラスに対してリクエスト が来た時に、そのクラスが変更されていた場合には、自動的にリロードを行う 機能を含んでいます。この機能は実験的なものであり、完全に機能しないかも 知れません。特にリクエストするServlet以外のクラスを変更しても、クラス をリロードしません。 --これらのクラスの変更を反映させるためには、 Tomcatを再起動する必要があります。 "conf/server.xml" ファイルの 要素に reloadable="true"の属性 を加えることで、リロードを有効にすることができます。ただし、自動リロー ド機能は製品版アプリケーションにはお勧めできないことに注意してください。 なぜならば、これは実験的なものであり、リクエストごとに必要なチェックを 実行するために余計なオーバーヘッドがかかるからです。 6.5 getServletPath, getPathInfo, getPathTranslated から返される文字列 Servlet 2.2 仕様の正誤表より - 2000年4月27日 には HttpServletRequest のメソッドである getServletPath, getPathInfo, そして getPathTranslated はデコードされた文字列を返すべきだと指定しています。この解決は Tomcat 3.2 では実装されていません。Tomcat 3.2 では、これらのメソッドはエンコー ドされた文字列を返します。 6.6 Windows 95/98 での "Out of environment space" エラーの防止 このエラーは、デフォルトの環境変数用の容量が Tomcat を実行するために不 十分な場合によく起こります。ここでは、それを防止するいくつかの方法をい くつか書いておきます。 A. Tomcatを実行するために、MS-DOSプロンプトを使っている場合は、プログ ラム -> MS-DOS プロンプトを実行してください。タイトルバーの左にあ る MS-DOS アイコンを右クリックして、メニューの一番下にあるプロパティ を選択してください。MS-DOS プロンプトのプロパティダイアログで、メ モリータブを選択します。"Initial environment:"フィールドの中に、十 分な大きい数字を入力します。よくわからない場合は、3072 くらいで十 分です。OK をクリックして MS-DOS プロンプトウィンドウを閉じてくだ さい。プログラム -> MS-DOS プロンプトを再び実行して、Tomcat をイン ストールしたディレクトリに移動してください。まだ設定していな い場合は、JAVA_HOME 環境変数を設定してください。これで、"Out of environment space" エラーなしに、"bin\startup" と "bin\shutdown" で、Tomcat の実行と停止ができるはずです。 B. startup.batのようなバッチファイルをダブルクリックすることでTomcat を実行したい場合は、Windows Explorer でお望みのバッチファイルを右 クリックしてからプロパティを選択して、MS-DOS プロンプトのプロパティ ダイアログを開いてください。メモリータブを選んで、"Initial environment:" を上で書いたように設定します。プログラムタブの "Close on exit" も選択したいかもしれません。その後に、OK をクリック してください。これらの設定がおこなわれたショートカットが同じディレ クトリに同じ名前のバッチファイルとして作られるでしょう。これで、 "Out of environment space" エラーなしに、ショートカットやバッチファ イルをダブルクリックすることができるはずです。startup.bat と shutdown.bat をこの方式で実行したい場合には、それぞれのファイルについ て上記の設定を行う必要があります。さらにJAVA_HOMEも設定する必要があり ます。これは、autoexec.bat か startup.bat と shudown.bat ファイル自身に、"SET JAVA_HOME=JDK のパス" を追加すれ ばできます。 6.7 すべてのOS上でURLの大文字・小文字を区別するようになりました。 Tomcat 3.2 から、すべてのOS上でURLの大文字・小文字を区別するようになり ました。これは、大文字・小文字を区別しないファイルシステムを使っている WindowsなどのOSを含んでいます。 "non-portable"なWebアプリケーション、つまり大文字・小文字が一致してい ないアプリケーションは、大文字・小文字を区別しないOS上の Tomcat 3.1で は動作しますが、Tomcat 3.2では移植性に問題があることが明らかになるでしょ う。 これにより、一見正しく見えるURLが、実際には正しくないということが起こ り得ます。Windows Explorer では、MS-DOS 8.3フォーマットに従ったディレ クトリ名は、"フォーマットされた"名前を使用して表示されるかもしれません。 たとえば、"MYDIR"という名のディレクトリを、"Mydir"と表示するかもしれま せん。しかし、"http://localhost/mysite/Mydir/index.jsp" のようなURLで は、"File Not Found" を返すでしょう。なぜならば、正しいURLは "http://localhost/mysite/MYDIR/index.jsp" だからです。"not found"とな るような不思議なURLを見つけたら、大文字・小文字の間違いを確認してくだ さい。Windows Explorer のプロパティダイアログか、MS-DOS ウィンドウで、 ファイルとディレクトリ名の実際の大文字・小文字を確認してください。 IISのような大文字・小文字を区別しないWebサーバと組み合わせて、静的なコ ンテンツを提供するためTomcat を使用している場合には、さらに問題が起こ る可能性があります。Webサーバは、URLの大文字・小文字が間違っているよう な静的なページを提供することができます。しかし、その静的なページが Tomcat が提供するリソースへの相対リンクを含んでいる場合には、リンクを クリックした時に、Tomcatで大文字・小文字が間違っているために、リソース が見つからないというエラーが発生するでしょう。 6.8 生成されたWebコネクタ用の設定ファイル 起動時に、定義されたコンテクストを反映するために Tomcat は普通 "tomcat-apache.conf" のような設定ファイルを生成します。しかし、生成さ れたファイルは、Webアプリケーション配置記述ファイル(web.xml)内部のすべ ての設定を反映するわけではありません。Webサーバの設定ファイルの中に、 直接関連する設定をする必要があります。 これは Tomcat 3.2 のWebコネクタの設計の限界ですが、Tomcat 4.0では MOD_WARP コネクタを導入して対策する予定です。 6.9 フォームベースのログインの限界 で指定したページがセキュリティ制 限によって保護された領域にある場合には、Tomcat 3.2 はそれらを表示でき ません。この問題の影響としては、フォームベースのログインを使用している ときに、Webアプリケーションのすべてを保護するために "/*" というURLパター ンが使用できないことが挙げられます。 解決策としては、フォームログインページとエラーページをWebアプリケーショ ンのルートディレクトリに置き、他のすべてのページを、一つまたは複数のサ ブディレクトリ内に置き、そしてセキュリティ制限をサブディレクトリを保護 するように設定することです。 6.10 ドキュメントベースパスの限界 Tomcat 3.2 は、 ディレクティブ内では、以下のような SMB パスを サポートすることができません。 しかし、この方法はTomcat 3.1はサポートしていましたし、Tomcat 4.0もサポー トしています。回避方法は、"\\machine\share"にネットワークドライブを割 り当ててから、以下のようにコンテキストを定義することです。 "r:"が、shareを指すネットワークドライブです。 6.11 設定ミスによって無限ループを起こす可能性 リクエストを処理する有効なコンテキストがないような設定ミス(ルートコン テキストを削除して、そしてそのコンテキストが処理するべきリクエストを試 みた場合など)を Tomcat 3.2 でおこなった場合には、Tomcat は 404エラーを 返す代わりに無限ループに起こすでしょう。 回避方法: 無限ループに陥っている Tomcat プロセスを kill してから、ルー トコンテキストを適切に設定するように server.xml ファイルを訂正してくだ さい。 =============================================================================== 7. 3.2.1で解決されたセキュリティの脆弱性 7.1 /WEB-INF と /META-INF ディレクトリにあるリソースの保護 Servlet仕様は、 Webアプリケーションアーカイブの /WEB-INF と /META-INF ディレクトリにあるリソースを、Servletコンテナが直接クライアントに提供 することを禁じています。Tomcat 3.2 では、このことは次のような URLが、 展開記述子ではなく、エラーページを返すことを意味していました。 http://localhost:8080/examples/WEB-INF/web.xml しかし、Tomcat 3.2には、以下のような URL をクライアントが要求した場合 に、この情報を表示する脆弱性が存在しました。 http://localhost:8080/examples//WEB-INF/web.xml ("WEB-INF" の前に、2重にスラッシュがあることに注意してください) この脆 弱性は、Tomcat 3.2.1で修正しました。 7.2 ソースコードを表示する脆弱性 Tomcat 3.2 と共に配布されていたサンプルアプリケーションには、JSP ページ の例としてソースコードを表示するメカニズムが含まれていました。このメカニ ズムを、WEB-INF と META-INF ディレクトリ内の重要な情報の表示の制限をすり 抜けるために使うことができました。この脆弱性は取り除きました。 [訳注: これは河内 崇が翻訳しました。日本語訳に対するコメントがあれば、 jajakarta-report@nekoyanagi.com に送ってください。]