Sun Java System Web Server 7.0 管理ガイド

第 10 章 WebDAV を使用した Web パブリッシング

Sun Java System Web Server 7.0 は、Web ベースのコラボレーションの標準である WebDAV、つまり Web ベースの分散オーサリングおよびバージョン管理 (Web-based Distributed Authoring and Versioning) をサポートしています。WebDAV は HTTP/1.1 プロトコルの拡張機能であり、クライアントがリモート Web コンテンツのオーサリング操作を実行できるようにします。

完全な WebDAV トランザクションには、Sun Java System Web Server 7.0 など、WebDAV リソースへの要求を処理できる WebDAV 対応サーバーと、Adobe® GoLive® や Macromedia® DreamWeaver® など、WebDAV 対応の Web パブリッシング要求をサポートする WebDAV 対応クライアントが必要になります。

サーバー側では、WebDAV 要求を処理できるように Sun Java System Web Server 7.0 を有効化および構成する必要があります。

WebDAV を構成する理由としては、サーバーのパフォーマンスチューニング、セキュリティーリスクの解消、衝突の発生しないリモートオーサリングなど、いくつかの理由が考えられます。

ユーザーは構成の要件に応じて、サーバーが WebDAV リソースのロックを保持する時間の最小値、コレクションに対する PROPFIND 要求の実行範囲、要求の本文内に指定可能な XML コンテンツの最大サイズなどを変更することができます。

仮想サーバーレベルでは、ある仮想サーバーのすべてのコレクションに対するデフォルトの WebDAV 属性を構成できます。ここで構成された値は、server.xml ファイル内の DAV 要素に対応します。

WebDAV 属性はコレクションレベルでも構成可能であり、その値は、仮想サーバーレベルでそのコレクションに対して構成されたどの属性よりも優先されます。コレクションレベルで構成された属性値は、server.xml ファイル内の DAVCOLLECTION 要素に対応します。

WebDAV について

WebDAV は HTTP/1.1 プロトコルの拡張機能であり、新しい HTTP メソッドやヘッダーが追加されていますが、それらのメソッドやヘッダーは、HTML や XML だけでなく、テキスト、グラフィックス、スプレッドシート、およびその他のすべての形式を含む、あらゆるタイプの Web リソースに対してオーサリングサポートを提供します。WebDAV を使って実現可能なタスクを、いくつか次に示します。

Sun Java System Web Server 7.0 の WebDAV サポートによって提供される機能は、次のとおりです。

WebDAV の一般的な用語

この節では、WebDAV を扱う際に目にする一般的な用語について、簡単に説明します。

URI: URI (Uniform Resource Identifier) はファイル識別子の 1 つであり、省略形の URL を使用することで追加のセキュリティー層を提供します。URL の最初の部分が URL マッピングで置換されるため、ファイルの完全な物理パス名がユーザーからわからないようになります。

ソース URI: ソース URI という用語は、リソースのソースへのアクセスが可能な URI を意味します。ソース URI の概念を理解するために、次のような例を考えます。

JSP ページ foo.jsp が URI /docs/date.jsp に格納されています。このページには HTML マークアップと Java コードが含まれていますが、この Java コードは実行時に、クライアントのブラウザ上に現在日付を出力します。サーバーは、foo.jsp の GET 要求をクライアントから受信すると、そのページを送信する前に Java コードを実行します。クライアントが受信するのは、サーバー上に存在している状態の foo.jsp ではなく、動的に生成された、現在日付が表示されたページです。

たとえば、/publish/docs というソース URI を作成し、それを foo.jsp を含む /docs ディレクトリにマップした場合、/publish/docs/foo.jsp に対する要求は、/docs/foo.jsp JSP ページのソースコードに対する要求になります。この場合、サーバーは Java コードを実行せずにページを送信します。クライアントは、ディスク上に格納された状態のままの、未処理のページを受信します。

したがって、ソース URI に対する要求は、リソースのソースに対する要求になります。

コレクション: WebDAV コレクションとは、WebDAV 操作に対応したリソースまたは一連のリソースのことです。コレクションには一連の URI が含まれますが、これらはメンバー URI と呼ばれ、WebDAV に対応した各メンバーリソースを識別します。

メンバー URI: コレクション内の一連の URI のメンバーになっている URI。

内部メンバー URI: コレクションの URI の直接の相対パスになっているようなメンバー URI。たとえば、URL http://info.sun.com/resources/info のリソースが WebDAV に対応しており、URL http://info.sun.com/resources/ のリソースも WebDAV に対応している場合、URL http://info.sun.com/resources/ のリソースはコレクションであり、http://info.sun.com/resources/info を内部メンバーとして含みます。

プロパティー: リソースについての記述情報を含む名前と値のペア。プロパティーは、リソースの検索や管理を効率的に行うために使用されます。たとえば、「creationdate」プロパティーを使えば、すべてのリソースのインデックス作成をリソースの作成日付に基づいて行えますし、「author」プロパティーを使えば、それを作成者名に基づいて行えます。

ライブプロパティー:サーバーによって管理されるプロパティー。たとえば、getcontentlength ライブプロパティーはその値として、GET 要求によって返されるエンティティーの長さを持ちますが、この値はサーバーによって自動計算されます。ライブプロパティーには次のものがあります。

デッドプロパティー:サーバーによって管理されないプロパティー。デッドプロパティーの場合、サーバーはその値を記録するだけです。その整合性を維持する責任はクライアントにあります。

Sun Java System Web Server がサポートするライブプロパティーは、次のとおりです。


注 –

Sun Java System Web Server がサポートするライブプロパティー executable を使えば、クライアントがリソースに関連付けられたファイルアクセス権を変更できます。

executable ライブプロパティーに対する PROPPATCH 要求の例を、次に示します。

PROPPATCH /test/index.html HTTP/1.1

Host: sun

Content-type: text/xml

Content-length: XXXX

<?xml version="1.0"?>

<A:propertyupdate xmlns:A="DAV:" xmlns:B="http://apache.org/dav/props/">

<A:set>

<A:prop>

<B:executable>T</B:executable>

</A:prop>

</A:set>

</A:propertyupdate>


ロック: リソースをロックする機能は、あるユーザーが編集しているリソースを別のユーザーが変更しないことを保証する機構を提供します。ロックを使えば上書きの衝突を回避でき、「失われた更新」の問題を解決できます。

Sun Java System Web Server がサポートするロックは 2 種類あります。共有と排他です。

新しい HTTP ヘッダー: WebDAV は HTTP/1.1 プロトコルを拡張することで機能します。クライアントが WebDAV リソースに対する要求を伝えるための HTTP ヘッダーが、新たに定義されています。それらのヘッダーを次に示します。

新しい HTTP メソッド: WebDAV では、WebDAV 対応サーバーに要求の処理方法を指示する新しい HTTP メソッドが、いくつか導入されました。GETPUTDELETE などの既存の HTTP メソッドに加えてそれらのメソッドを使用することで、WebDAV トランザクションが実行されます。新しい HTTP メソッドの簡単な説明を、次に示します。

インスタンスレベルで WebDAV を有効にする

管理サーバーを使えば、WebDAV をサーバー全体で有効にすることができます。そのようにした場合、WebDAV プラグインを読み込むための次の指令が、magnus.conf file に追加されます。

Init fn="load-modules" shlib="/s1ws6.1/lib/libdavplugin.so" funcs="init-dav,ntrans-dav,pcheck-dav,service-dav"
shlib_flags="(global|now)"
Init fn="init-dav" LateInit=yes

init-dav Init 関数は、WebDAV サブシステムを初期化して登録します。

WebDAV を有効にするには、CLI で次のコマンドを実行します。


wadm> enable-webdav --user=admin --password-file=admin.pwd 
--host=serverhost --port=8989 --config=test

CLI リファレンスの enable-webdav(1) を参照してください。

WebDAV コレクションの管理

WebDAV コレクションの有効化

WebDAV コレクションを有効にするには、次のコマンドを実行します。


wadm> enable-dav-collection --user=admin --password-file=admin.pwd 
--host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1

CLI リファレンスの enable-dav-collection(1) を参照してください。

WebDAV コレクションの無効化

WebDAV コレクションを無効にするには、次のコマンドを実行します。


wadm> disable-dav-collection --user=admin --password-file=admin.pwd 
--host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1

CLI リファレンスの disable-dav-collection(1) を参照してください。

WebDAV コレクションの追加

WebDAV コレクションを追加するには、次のコマンドを実行します。


wadm> create-dav-collection --user=admin --password-file=admin.pwd 
--host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 
--source-uri=/dav_config1

CLI リファレンスの create-dav-collection(1) を参照してください。

WebDAV コレクションの一覧表示

すべての WebDAV コレクションを一覧表示するには、次のコマンドを実行します。


wadm> list-dav-collections --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1 --vs=config1_vs_1

CLI リファレンスの list-dav-collections(1) を参照してください。

WebDAV コレクションの削除

WebDAV コレクションを削除するには、次のコマンドを実行します。


wadm> delete-dav-collection --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1

CLI リファレンスの delete-dav-collection(1) を参照してください。

WebDAV プロパティーの構成

WebDAV プロパティーの設定

サーバーレベルの WebDAV プロパティーを設定するには、次のコマンドを実行します。


wadm> set-webdav-prop --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1 acl-max-entries=120

CLI リファレンスの set-webdav-prop(1) を参照してください。

WebDAV プロパティーの表示

サーバーレベルの WebDAV プロパティーを表示するには、次のコマンドを実行します。


wadm> get-webdav-prop --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1

CLI リファレンスの get-webdav-prop(1) を参照してください。

WebDAV コレクションのプロパティーの設定

WebDAV コレクションのプロパティーを設定するには、次のコマンドを実行します。


wadm> set-dav-collection-prop --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 min-lock-timeout=1

CLI リファレンスの set-dav-collection-prop(1) を参照してください。

WebDAV コレクションのプロパティーの表示

WebDAV コレクションのプロパティーを表示するには、次のコマンドを実行します。


wadm> get-dav-collection-prop --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 -config=config1 --vs=config1_vs_1 --uri=/dav_config1

CLI リファレンスの get-dav-collection-prop(1) を参照してください。

WebDAV パラメータの変更

一般的な WebDAV プロパティーのいくつかを、次の表に示します。

表 10–1 WebDAV パラメータ

パラメータ

説明

ロックデータベースのパス

ロックデータベースが維持されるディレクトリを指定します。 

最小ロックタイムアウト

ロックの最短の寿命を秒単位で指定します。値 -1 は、ロックが決して期限切れにならないことを意味します。この値は、ある要素のロックが自動的に解除されるまでの時間を示します。

最大要求サイズ

XML 要求本文の最大サイズを指定します。サービス拒否攻撃に備えてこの値を構成すべきです。デフォルト値は 8192 (8K) です。

最大拡張プロパティー Depth

最大拡張プロパティー Depth 要求の実行範囲を指定します。0 の場合、指定されたリソースのみが処理対象になります。これがデフォルト値です。1 の場合、指定されたリソースとその次のレベルが処理対象になります。infinity の場合、指定されたリソースとそれに含まれるすべてのリソースが処理対象になります。また、このパラメータのサイズを制限することで、過剰なメモリー消費を防止するようにしてください。

デフォルトの所有者 

コレクションのデフォルトの所有者。 

URI 

WebDAV が有効になっている既存のルート URI。 

最大 PROPFIND Depth 

コレクションに送信される PROPFIND 要求の実行範囲の最大値。 

ロックデータベースの更新間隔 

WebDAV ロックデータベースがディスクとの同期を取る間隔。WebDAV ロック情報のキャッシュを無効にするには、0 を使用します。 

認証データベース 

使用する ACL 認証データベース。 

認証方法 

使用する認証方法。デフォルトの認証方法は「基本」です。 

認証確認テキスト 

認証要求時にクライアントに表示される確認テキスト。 

DAV ACL データベース

 

最大エントリ数 

単一のリソースで許可される ACE の最大数。0–2147.0483647.0。制限なしの場合は —1 を指定します。 

最大サイズ 

1 つのコレクションに対する WebDAV ACL データベースのメモリー表現の最大サイズ。0–2147.0483647.0。制限なしの場合は —1 を指定します。 

更新間隔 

WebDAV ACL データベースがディスクとの同期を取る間隔。0.001–3600 秒。WebDAV ACL リストのキャッシュを無効にする場合は、0 を指定します。 

DAV プロパティーデータベース

 

最大サイズ 

WebDAV プロパティーデータベースファイルの最大サイズ。0–2147.0483647.0。制限なしの場合は —1 を指定します。 

更新間隔 

WebDAV プロパティーデータベースがディスクとの同期を取る間隔。0.01–3600 秒。WebDAV プロパティーのキャッシュを無効にする場合は、0 を指定します。 

サーバーレベルでの WebDAV の無効化

サーバーレベルで WebDAV を無効にするには、次のコマンドを実行します。


wadm> disable-webdav --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1

CLI リファレンスの disable-webdav(1) を参照してください。

WebDAV 認証データベースの管理

管理コンソールで WebDAV 認証データベースの設定を編集するには、選択された構成から「WebDAV 」タブをクリックします。次の表に、そのページ内の各フィールドの簡単な説明を示します。

表 10–2 WebDAV 認証データベースのプロパティー

プロパティー

説明

認証データベース

認証データベース」では、サーバーがユーザーの認証に使用するデータベースを選択できます。

デフォルトは keyfile です

認証方法

  • 基本 — HTTP メソッドを使用してクライアントから認証情報を取得します。ユーザー名とパスワードがネットワーク上で暗号化されるのは、サーバーで SSL が有効になっている場合だけです。

  • SSL — クライアント証明書を使用してユーザーの認証を行います。このメソッドを使用するには、サーバーの SSL を有効にする必要があります。暗号化が有効になっていれば、基本と SSL の方法を組み合わせることができます。

  • ダイジェスト — ユーザー名とパスワードを平文として送信することなしにユーザー名とパスワードに基づく認証をブラウザが行うための手段を提供する認証機構を使用します。ブラウザは MD5 アルゴリズムを使用して、ユーザーのパスワードと Web Server によって提供される情報の一部を使用するダイジェスト値を作成します。「ダイジェスト」を使用するには、背後の auth-db もダイジェストをサポートしている必要があります。これは、ダイジェスト認証プラグインがインストールされている場合にのみ、digestfile を使用したファイル auth-db、LDAP auth-db のいずれかを意味します

  • その他 — アクセス制御 API を使って作成されたカスタム方法を使用します。

認証確認テキスト

認証確認テキスト」オプションでは、認証ダイアログボックス内に表示されるメッセージテキストを入力できます。このテキストを使用して、ユーザーが入力する必要のある項目について説明することができます。ブラウザによっては、最初の 40 文字程度しか表示されません。

Web ブラウザは通常、ユーザー名とパスワードをキャッシュし、それらをプロンプトのテキストと関連付けます。ユーザーが、サーバーの同じ確認テキストを持つファイルやディレクトリにアクセスしても、ユーザー名とパスワードを再度入力する必要はありません。特定のファイルやディレクトリでユーザーに再度認証させたい場合は、そのリソースの ACL の確認テキストを変更すればよいだけです。 

WebDAV 対応サーバーでのソース URI と Translate:f ヘッダーの使用

WebDAV メソッドはリソースまたはコレクションのソースを処理します。GET や PUT などの HTTP メソッドは WebDAV プロトコルによってオーバーロードされるため、これらのメソッドを含む要求は、リソースのソースへの要求、リソースのコンテンツ (出力) への要求のいずれかになります。

Microsoft やその他の多くの WebDAV ベンダーは、要求と一緒に Translate:f ヘッダーを送信し、その要求がソースに対するものであることをサーバーに知らせるようにすることで、この問題を解決しました。広く利用されている WebDAV クライアントである Microsoft WebFolders との相互運用性を確保するため、Sun Java System Web Server 7.0 は、Translate:f ヘッダーをリソースのソースへの要求として認識します。Translate:f ヘッダーを送信しないクライアントに対応するため、Sun Java System Web Server はソース URI を定義します。

WebDAV に対応したコレクションの場合、URI を要求するとリソースのコンテンツ (出力) が取得され、ソース URI を要求するとリソースのソースが取得されます。Translate:f ヘッダーを含む URI への要求は、ソース URI への要求として扱われます。

デフォルトでは、サーバーインスタンスに固有の ACL ファイル内にある、次の宣言を含む dav-src ACL によって、リソースのソースへのアクセスのすべてが拒否されることに注意してください。

deny (all) user = "anyone";

ソースへのアクセスをあるユーザーに許可するには、ソース URI へのアクセス権限を追加してください。

リソースのロックとロック解除

Sun Java System Web Server では、サーバー管理者は、リソースをロックすることでそのリソースへのアクセスを直列化できます。ある特定のリソースにアクセスするユーザーは、ロックを使用することで、別のユーザーがその同じリソースを変更することがない、という安心感が得られます。こうして、サーバー上のリソースを複数のユーザーが共有する場合に生じる「失われた更新」の問題が解決されます。サーバーによって維持されるロックデータベースは、発行され、クライアントによって使用されるロックトークンを追跡します。

Sun Java System Web Server がサポートする opaquelocktoken URI スキーマは、すべての時間にわたってすべてのリソース間で一意になるように設計されています。これには、ISO-1157.08 で説明されている汎用一意識別子 (UUID) 機構が使用されています。

Sun Java System Web Server は次の 2 種類のロック機構を認識します。

排他ロック

排他ロックとは、リソースへのアクセスを単一ユーザーにのみ許可するロックのことです。ほかのユーザーがその同じリソースにアクセスできるのは、そのリソースの排他ロックが解除された後です。

排他ロックは、リソースをロックする機構としては、厳格でコストがかかりすぎる場合があると言われています。たとえば、プログラムがクラッシュしたりロック所有者がリソースのロック解除を忘れたりした場合、ロックタイムアウトや管理者の介入がないと排他ロックを解除できません。

共有ロック

共有ロックを使えば、あるリソースのロックを複数のユーザーが取得できます。したがって、適切なアクセス権を持つユーザーであれば、誰でもロックを取得できます。

共有ロックを使用する場合、複数のロック所有者は、何らかの通信手段を使って作業の調整を行えます。共有ロックの目的は、共同作業者に、ほかのどのユーザーがリソースを操作する可能性があるかを知らせることです。

最小ロックタイムアウト

ロックを制御するには、server.xml ファイル内の DAV または DAVCOLLECTION オブジェクトの minlocktimeout 属性の値を構成します。minlocktimeout 属性は、ロックの最小の寿命を秒単位で指定します。この値は、ある要素のロックが自動的に解除されるまでの時間を示します。

これは省略可能な属性です。値を -1 に設定すると、ロックが決して期限切れにならなくなります。値を 0 に設定すると、要求に指定された Timeout ヘッダーのタイムアウトで、コレクション内のすべてのリソースをロックできるようになります。

Timeout ヘッダーが指定されていないと、無限大のタイムアウトでリソースがロックされます。要求の Timeout ヘッダーが値 Infinite に設定されていると、やはり無限大のタイムアウトでリソースがロックされます。

WebDAV リソースの要求に含まれる Timeout ヘッダー値が、server.xml に指定された minlocktimeout 値に等しいかそれより大きい場合、その要求に指定された期間の間、リソースがロックされます。

これに対し、要求の Timeout ヘッダー値が server.xml に指定された minlocktimeout 値より小さい場合には、その server.xml に指定された minlocktimeout 値でリソースがロックされます。

次の表に、Sun Java System Web Server がロック要求を処理する方法を示します。

表 10–3 Sun Java System Web Server がロック要求を処理する方法

要求の Timeout ヘッダーの設定値 

リソースのロック方法 

Infinite

タイムアウトが -1 (無限大) に設定されてロックされます 

なし 

タイムアウトが -1 (無限大) に設定されてロックされます 

Second-xxx

  • xxxserver.xml に設定された minlocktimeout 値に等しいかそれより大きい場合、xxx 値でロックされます

    または、

  • xxxserver.xml に設定された minlocktimeout 値よりも小さい場合、その server.xml に指定された minlocktimeout 値でロックされます。


注 –

CLI の使用

CLI 経由でロックの期限切れを設定するには、次のコマンドを実行します。


wadm> expire-lock  --user=admin --password-file=admin.pwd 
--host=serverhost--port=8989 --config=config1 --vs=config1 
--collection-uri=/dav1 --lock-uri=/dav1/file.html
--opaque-token=opaquelocktoken

CLI リファレンスの expire-lock(1) を参照してください。

上の例の opaque-token は、期限切れに設定するロックの ID を指定しています。

CLI 経由で既存のロックを表示するには、次のコマンドを実行します。


wadm> list-locks --user=admin --password-file=admin.pwd --host=serverhost
--port=8989 --config=config1 --vs config1 --collection-uri=/dav1

CLI リファレンスの list-locks(1) を参照してください。