このセクションでは、共有ホスティング環境での JRun アプリケーション サーバの保護に関する問題について説明します。
各 JRun サーバは、JRun サーバ起動時、サーバ独自の Java Virtual Machine (JVM) にロードされます。その JVM は、JRun サーバがコンパイルして、実行するサーブレット、EJB、および JSP のみを実行します。これにより、各 JRun サーバがほかの JRun サーバの動作に影響を与えることがなくなり、JRun サーバが保護されます。その結果、default JRun サーバとその JVM が応答を停止しても、ほかのすべての JRun サーバとその JVM は問題なく動作します。
次は、JVM およびサーブレット エンジンの特性の一部を示した概要で、JRun サーバがそれらの関連 JVM とどのように対話するかについて説明します。
サーブレット/JSP ホスティングを提供する場合は、Java アプリケーション環境に対して厳密なセキュリティ マネージャおよびポリシー ファイルを設定することでメリットが得られます。これにより、JVM のシャットダウンやシステム ファイルへの書き込みなど、望ましくない結果を生じるサーブレットまたは JSP を顧客が実行できないようにすることができます。
メモ ただし、ファイアウォール、OS レベルのセキュリティ、およびその他の従来の方法 などのセキュリティ方法に代わるものはありません。 |
このセクションでは、Java セキュリティ マネージャを使用して、代表的な ISP アーキテクチャに対して JRun インストールを設定する方法を説明します。ただし、このトピックは内容が膨大で複雑なため、ほかの参考資料も参照する必要があります。
Java 言語で構築されたセキュリティ マネージャを使用して、ユーザがアクセスするクラスおよびメソッドを制御できます。これを行うには、java.policy ファイルを作成し、そのポリシー ファイルを JRun サーバの Java 引数で指定します。
policy.url
を追加します。Java
Arguments
プロパティを変更します。既定の java.policy ファイルは、<jdk>¥jre¥lib¥security にあります。新規のポリシー ファイルを作成し、目的の場所にそのファイルを格納します。ただし、この場合は、java.security ファイル内に新規の場所を指定する必要があります。既定の場所を使用する場合も、java.security ファイル内でその場所を明示的に示す必要があります。後で、Java 引数として java.security ファイルの場所を JMC 内で指定します。
既定のポリシー ファイルでは、Java 拡張ディレクトリからロードされたすべてのクラスに対してすべてのアクセス権が与えられます。システム以外のクラスには、リストされているシステム プロパティに対する読み取り権が与えられ、1024 より大きいポート番号を持つソケットを使用して応答できます。その他のクラスはすべて、スレッドの stop
メソッドを呼び出すことができます。
ポリシー ファイルは、手作業で編集するか、Sun の JDK に含まれている policytool
アプリケーションを使って編集できます。policytool
使用方法の詳細は、Sun の Java マニュアルを参照してください。
このセクションに記載するサンプル ポリシー ファイルには、ISP に適している設定値が一部含まれています。サンプルでは、顧客がサーブレットと JSP の処理に default JRun サーバを使用することを前提としています。
このポリシー ファイルは、JRun の基本機能に必要な権限を提供します。この権限には、JSP の処理、サーブレットの動的な再ロード、システムおよび JRun プロパティの読み取り、ログへの書き込み、サーブレット/JSP での sendRedirect
および RequestDispatcher
の使用があります。ただし、複数ユーザのためのポリシー、JDBC ドライバを使用するデータベースへの接続に対するアクセス権、JNI のためのネイティブ ライブラリのロードなど、より複雑な設定には対応していません。
このファイルを使用するには、自分のファイル システムと JRun インストールに一致するように、すべてのディレクトリとポートを変更します。このファイルは、admin JRun サーバ (8000)、default JRun サーバ (8100)、および proxyport
(55555) については既定のポートを想定していますが、設定に適合するようにポートを変更できます。
java.policy ファイルのカスタマイズ、独自の java.policy ファイルの作成、および Java セキュリティ アーキテクチャの知識に関する追加情報については、Java のマニュアルを参照してください。
JRE が新規のセキュリティ ファイルを認識する前に、JRE の <java_home>/jre/lib/security/java.security ファイル内に、java.policy ファイルの policy.url
を追加する必要があります。たとえば、ファイルに 次の3 行を追加します。
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy policy.url.3=file:/D:/path/to/your_jrun.policy
既定の java.policy ファイルを変更し、それを既定の場所に配置しておいた場合は、java.security ファイル内に新しい場所を指定する必要はありません。
新規のポリシー ファイルを参照する java.security ファイルを JVM が読み込めるように、JVM への引数として java.security.manager
を追加する必要があります。
JRun サーバにはそれぞれ独自の Java 引数セットがあり、JVM の初期設定時に JVM に渡されます。この設定値は、JRun サーバの local.properties ファイル内に user.javaargs
として格納されています。このセクションでは、JMC を使用して user.javaargs
プロパティの設定を変更する方法について説明します。
[Java の設定] パネルが表示されます。
Java 設定値の編集ウィンドウが表示されます。
-Djava.security.manager
user.javaargs
プロパティは、JRun サーバの local.properties ファイルに保存されています。JRun サーバの local.properties ファイルを読み取り専用にすることによって、ユーザがポリシー ファイルを制御できないようにすることができます。この方法を使用すると、ユーザに JMC へのアクセス権を与える一方で、それらの設定値をユーザが変更できないようにすることが可能です。ページのサンプル ポリシー ファイルでは、JMC を介して JRun のプロパティ ファイルを変更する権限は設定されていません。ユーザ独自の JRun サーバの設定値をユーザが変更できるようにするには、JMC へのアクセス権をユーザに与え、プロパティ ファイルのディレクトリ内のファイルへの書き込み権限を追加します。
JMC ユーザの詳細は、"JMC ユーザの管理"を参照してください。
分散環境でセキュリティを実装する場合には検討事項がいくつかありますが、このセクションでは、ユーザが実行できる次の JRun 固有のアクションについて説明します。
JRun をインストールすると、default および admin の 2 つの JRun サーバと、これらのサーバに接続された 2 つの all-Java JWS が作成されます。既定では、これらの Web サーバはそれぞれ ポート 8000 と8100 で応答します。ほとんどの ISP では受信ポート アクセスをファイアウォールで制限していますが、使用しないサービスはオフにする必要があります。このセクションでは、JRun サーバの JWS をオフにする方法について説明します。
メモ admin サーバの JWS をオフにすると、JMC を開くことができなくなります。JRun のリモート管理を行うには、admin JRun サーバをより強力な外部 Web サーバに 接続する必要があります。 リモート管理の詳細は、"外部 Web サーバを介した JMC へのリモート アクセス"を参照してください。 |
web
を削除することによって、servlet.services
プロパティからweb
サービスを削除します。次に例を示します。# was:servlet.services=jndi,jdbc,web,mail,url,{servlet.webapps},jcp servlet.services=jndi,jdbc,mail,url,{servlet.webapps},jcp
JRun を実行するマシンと Web サーバを実行するもう 1 台のマシン間の接続を作成したら、承認されていないユーザが JRun サーバにアクセスできないようにする必要があります。これを行うために、JRun には、JRun コネクタ用のホストベース認証が用意されています。これにより、IP アドレスの定義済みセットのホストだけが、JRun サーバに要求を送信できるようになります。
JRun 管理コンソール (JMC) の [外部 Web サーバ] パネルを使用すると、特定の JRun サーバと通信可能な IP アドレスを指定できます。現在、外部 Web サーバと JRun サーバの間のトラフィックを保護するための SSL やその他の暗号化テクノロジを使用することはできません。
メモ 既定の設定では、JRun サーバは「すべての」 IP アドレスからの要求を受け付けます。 |
メモ 外部 Web サーバに JRun サーバを接続する際に、コネクタ ウィザードをまだ 実行していない場合は、コネクタ ウィザードを実行するように要求されます。 |
[外部 Web サーバ] パネルが表示されます。
外部 Web サーバの編集ウィンドウが表示されます。
*
」を入力すると、すべての Web サーバが JRun に要求を送信できるようになります。セキュリティ上の理由から、JRun に付属およびインストールされている既定のサーブレットを無効にできます。これらのサーブレットには次のものがあります。
これらのサーブレットは、すべての JRun サーバにインストールされ、アクティブになっています。既定値 "True" を使用して、これらのサーブレットに対して新しい初期化パラメータ “enabled” を指定できます。 このパラメータを False に設定すると、サーブレット初期化時に UnavailableException が返されます。これによって、サーブレットの起動が阻止されます。ブラウザでは、このサーブレットにユーザがアクセスしようとすると、内部サーバ エラー(500) が表示されます。
"enabled" パラメータを False に設定するには次の方法があります。
allaire.jrun.servlets.MetricsServlet.class=allaire.jrun.servlets. MetricsServlet allaire.jrun.servlets.MetricsServlet.enabled=false
プロパティ ファイル内でサーブレットの初期化パラメータのエイリアスを作成し、 設定するための構文は次のとおりです。
[alias].class=[class] [alias].[initParam1]=[value1]次に例を示します。
file.class=allaire.jrun.file.FileServlet file.enabled=falseすでにエイリアスが作成されている JRunStats の場合は、次の行のみを追加して ください。
JRunStats.enabled=falsePropertyScript
ツールを使用すると、JRun プロパティ ファイルをプログラムで
変更できます。詳細は、30 ページの「JRun プロパティのカスタマイズ」を参照
してください。
<servlet> <servlet-name>allaire.jrun.servlets.MetricsServlet</servlet-name> <servlet-class>allaire.jrun.servlets.MetricsServlet</servlet-class> <init-param> <param-name>enabled</param-name> <param-value>false</param-value> </init-param> </servlet>
JRun は、文字列/サーブレットが含まれている URI を JRun invoker サーブレットに関連付ける、暗黙的なサーブレット マッピング機能を備えています。invoker サーブレットを使用すると、サーブレットのクラス ファイルを、Web アプリケーションのクラスパス内の任意のディレクトリにコピーし、サーブレットを登録せずに参照できます。未登録のサーブレットを参照するには、フォーム内で URL を使用します。
http://local_host/app1/servlet/サーブレットのクラス名
セキュリティおよびパフォーマンス上の理由から、必ず、すべてのサーブレットについて明示的なマッピングを定義してください。invoker サーブレットに全面的に依存しないでください。運用アプリケーションでは、次のマッピングを global.properties ファイルからコメント化してください。
webapp.servlet-mapping./servlet=invoker