Apache2.0+WebDAVの設定(Windows編)


Linuxと同様にWebDAVとはどんなものかを確認するため、Windows環境のApache2.0でWebDAVを試験的に動かしてみましたので、ここにまとめておきます。
WebDAVは、HTTPベースのファイル共有システムのため、FTPやSSHとはやや異なる部分があります。意識して使用すれば問題ありませんが、扱うドキュメントによっては、結果的にFTPと変わらないオペレーションになってしまうこともあります。
  • CGIやPHPといったダイナミックなリソースをコピーできない。(設定によってコピーできるようになる。)
  • 同様に、テキストもブラウザ起動されて表示されてしまうので、一旦ダウンロードして編集後に戻す必要がある。
  • Windowsでは問題にはならないが、ファイルのオーナがApacheのuser/groupになってしまう。
  • 同様にファイルのパーミッションが触れない。 等々
なお、動作確認はWindows2000 SP4 + Apache2.0.47/SSL で行っています。恐らくXPでも問題はないと思います。

しかくApache2.0 for Win32のインストール

Apacheは、インストール済みとします。新規にインストールされる場合は、SSLが不要ならこちら、SSL対応ならこちらを参考にしてインストールしてください。外部から使うことが想定されるなら、SSL対応されることを薦めます。

なお、おやじは基本的に暗号化を必要とするコンテンツへのアクセスは、誤ってHTTPでアクセスしたときには強制的にHTTPSにRedirectしていますが、WebDAVはうまくできませんでした。従って、意識的にHTTPSでアクセスせざるを得ませんでした。HTTPS以外でのアクセスを拒否し、不用意にHTTPでアクセスしないようにはできますので、後述します。

しかくApache2.0+WebDAV for Win32の設定

Apache2.0+WebDAV for Win32を動かすため、Apacheのインストールパス配下にあるhttpd.conf (ex. C:\Apache2\conf\httpd.conf) の設定を追加・変更していきます。

だいやまーく基本的な設定

Apache2.0系ではWebDAVを標準でサポートしていますので、httpd.confの設定+αで動かすことができます。
テキストエディタでhttpd.confを編集していきます。変更する場合は、失敗に備えて変更行を下の行にコピーし、元の行の先頭に「#」を付加することにより、コメント行として保存しながら作業すると良いでしょう。 (青字は削除、赤字は追加、緑字は変更したものです。)

  1. WebDAVモジュールの組み込み

    以下のとおり行頭の#を削除して、WebDAVモジュールを組み込むようにする。


    #LoadModule dav_module modules/mod_dav.so
    #LoadModule dav_fs_module modules/mod_dav_fs.so

    ↓削除

    LoadModule dav_module modules/mod_dav.so
    LoadModule dav_fs_module modules/mod_dav_fs.so

  2. ファイルロック用のフォルダの指定およびWebDAV用の共有フォルダ用の設定

    下記ディレクティブを追記し、共有フォルダを設定する。記述する場所は任意だが、分かりやすく一番最後に追記すると良い。

    DavLockDB logs/DavLock
    Alias /doc "C:/Apache2/documents"
    <IfModule mod_dav.c>
    DAVMinTimeout 600
    <Location /doc>
    DAV On
    SSLRequireSSL
    </Location>
    </IfModule>

    • DavLockDB logs/DavLock

      WebDAVでファイル共有した場合に、同じファイルを二人が操作できないようにするためのロックファイルを拡張子を除いた形(拡張子はApacheが付与)でパスを指定する。絶対パス(CドライブにApacheをインストールしたなら、C:/Apache2/logs/DavLockで等価)で指定してもよいし、相対パス(ServerRootからの相対パス)で指定しても良い。Apache2のlogsフォルダ配下に作成するなら問題ないが、場所は任意に指定できるが存在するフォルダを指定(又は設定したフォルダを作成)すること。

    • Alias /doc "C:/Apache2/documents"

      Aliasとは、「別名」のこと。/docとWebDAVアクセスで指定されたら、それはC:/Apache2/documentsのことという意味であり、実際はここにアクセスにくる。フォルダは、実際にアクセスする前にあらかじめ作成しておくこと。

    • DAVMinTimeout 600

      クライアントが DAV リソースロックを要求した場合、 ロックがサーバによって自動的に解除されるまでの時間を指定。ここでは600秒とした。あまり長いとロックされっぱなしになる恐れもあるので、ほどほどに。

    • DAV on

      設定したコンテナ(ディレクトリ)で WebDAV が使えるようにするための設定。

    • SSLRequireSSL

      この設定で、SSLを使用していないリクエスト(HTTPS以外)が全て拒否される。不用意なアクセス防止のためなので、ApacheがSSL対応していない場合は指定しないこと。


  3. Apacheの再起動

    設定が終了したら、WebDAVの基本動作を確認するため、Apacheを再起動する。

だいやまーく基本動作確認

Windowsでは標準でサポートされている、Webフォルダ機能でWebDAV機能を利用できます。ここでは、Windows2000 Professionalベースで示します。

なお、Windows XP では、下記のままでは 2項のところで ユーザ名の前にサーバ名が付与された認証画面が出て先に進みません。対策としては、「ネットワークプレースの追加」をするときだけ、「 WebClient 」サービスを停止してから追加作業を行えば問題は発生しません。その後、「 WebClient 」サービスを起動しなおして置いてください。 http://support.microsoft.com/default.aspx?scid=kb;ja;825382 参照。

  1. デスクトップの「マイネットワーク」を開き、「ネットワークプレースの追加」をクリックして、「ネットワークプレースの追加ウィザード」を起動する。

  2. 「ネットワークプレースの場所を入力してください」にURL(ex. http://localhost/doc , http://www.aconus.com/doc etc.)を入力し、次へを押す。

  3. WebDAVが機能していれば、「ネットワークプレイスの追加ウィザードの終了」画面になり、ネットワークプレイスの名前(www.aconus.com上のdoc)が表示されるので、必要に応じネットワークプレイスの名前を変更し、完了を押す。

  4. ここで作成したWebフォルダが開くので、適当なファイル(CGIやPHP等はエラーになりコピーできないので注意が必要)をコピー、削除したりして動作を確認する。

だいやまーくセキュリティの確保

このままでは、誰でも自由に共有フォルダにアクセスして書き換えや削除ができてしまうので、ユーザ認証を導入することによりセキュリティを確保します。Apacheでのユーザ認証には、ブラウザ側がサポートしていなかったという問題もあり「Basic認証」が広く使われていますが、Basic認証はID とパスワードを MIME(BASE64)エンコードして送信しているだけなので、パケットを盗聴・デコードされれば、ID とパスワードが簡単に分かってしまいます。そこで、今回は、チャレンジ・レスポンス方式でMD5でハッシュして送信する「Digest認証」で行くことにしました。この方式をとれば、毎回送信内容が変わるので盗聴されても解読は極めて困難になります。
ところが、Digest認証はうまくいきませんでした。もちろん、普通にブラウザでのアクセスでは問題なくDigest認証できるのですが、いろいろ試しましたが、新規のWebフォルダを登録できません。Linuxでは特に問題はなく、SSL版、本家のMSIバイナリとも駄目なのでWindowsへの移植で問題があるのかもしれません。
従って、Basic認証とせざるを得ず、外部からはSSLが必須と思います。

  1. パスワードファイルの作成

    Apacheのbinフォルダ内にあるhtpasswdコマンドでパスワードファイルを作成する。コマンドプロンプトで、

    htpasswd -c ファイル名 ユーザ名

    と入力すると、パスワードを2回聞かれるので入力する。パスワードファイルはドキュメントルート以外に置き、フォルダはあらかじめ作成しておかないとエラーとなる。-cオプションは、初回にファイルがないときだけ指定すればよく、二人目からは不要である。パスワード変更は、上書きされるので二人目以降同様、-cオプションなしで入力すればよい。


    C:\> cd C:\apache2\bin
    C:\apache2\bin> htpasswd -c C:\apache2\conf\.htpasswd oyaji
    Automatically using MD5 format.
    New password: *****
    Re-type new password: *****
    Adding passwd for user oyaji

  2. 設定の追加

    設定は、httpd.confに追加したDAV関係のところに下記を書き加える。

    DavLockDB logs/DavLock
    Alias /doc "C:/Apache2/documents"
    <IfModule mod_dav.c>
    DAVMinTimeout 600
    <Location /doc>
    DAV On
    SSLRequireSSL

    AuthType Basic
    AuthName "DAV"
    AuthUserFile "C:/apache2/conf/.htpasswd"
    Require valid-user

    Order deny,allow
    Deny from all
    Allow from 192.168.0.0/23

    </Location>
    </IfModule>

    • AuthType

      認証方式の指定をする。今回はベーシック認証なので、「Basic」と記述する。

    • AuthName

      認証画面の領域に表示される内容であり、日本語でも可。(ex. パスワードを入力してください。)

    • AuthUserFile

      1項で作成したパスワードファイルを指定する。

    • Require

      ここでは、「valid-user」としてパスワードファイルに登録したユーザ全てにアクセス許可を与えた。
      パスワードファイルに登録したユーザの中でも、特定のユーザだけにアクセス許可したい場合は、以下のとおり「Require user」に続けてユーザ名を記述すればよい。複数ユーザなら空白で区切って列記すればよい。

      Require user oyaji xxxx

    • 外部からのアクセス規制

      DAVフォルダに外部からアクセスできないようにするには、Allow/Denyディレクティブが使用できる。ここでは、「Allow from 192.168.0.0/23」として家庭内の「192.168.0.0/24と192.168.1.0/24」を許可した。

  3. 動作確認

    ここで、設定したとおりに認証ができるかApacheを再起動して動作確認しておこう。

だいやまーく日本語ファイル名対応(mod_encodingの導入)

実はこのままでは、日本語名ファイルやフォルダは、表示はできるがコピーや作成がエラーになりできません。これは、WebDAVへの送信と受信で形式が異なるために発生するとのこと。日本語ファイル名を扱えるようにするには「mod_encoding」というモジュールを使います。今まで、Windows版についてはほとんど情報がありませんでしたが、WebDAV Resources JPのDownloadから2.0.48用がダウンロードできるようになりましたので、以下に導入方法を示します。

  1. mod_encodingのダウンロードとインストール

    mod_encodingは、WebDAV Resources JPのDownloadからApache2.0.48用をダウンロードします。おやじがダウンロードしたのは、以下のファイルです。

    • mod_encoding-20031209-win32-apache2.zip

    ダウンロードしたファイルを適当なディレクトリで解凍すると、mod_encoding.soとREADME.txtができますので、mod_encoding.soをApacheのmodulesディレクトリ(ex. C:\Apache2\modules)にコピーします。

  2. httpd.confの設定

    mod_encoding関係の設定を、httpd.confに追加します。

    LoadModule encoding_module modules/mod_encoding.so

    <IfModule mod_encoding.c>
    EncodingEngine on
    NormalizeUsername on
    SetServerEncoding UTF-8
    DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
    AddClientEncoding "cadaver/" EUC-JP
    </IfModule>

    • LoadModule encoding_module modules/mod_encoding.so

      mod_encodingモジュールをロードする。

    • EncodingEngine on

      モジュールを有効にする。

    • NormalizeUsername on

      Windows XPでユーザー認証を実施した場合、ユーザ名が「サーバのIPアドレス\ユーザ名」という形式になってしまうという問題への対策。

    • SetServerEncoding UTF-8

      サーバー側でファイル名に利用されるエンコーディングを指定する。UTF-8以外は不可。

    • DefaultClientEncoding JA-AUTO-SJIS-MS SJIS

      自動判定機能を提供する特殊なコンバータを指定するもので、UTF-8/JIS/MSSJIS/SJIS/EUC-JP を処理することができるようになる。

    • AddClientEncoding "cadaver/" EUC-JP

      各種エージェントから期待されるエンコーディングを指定する。基本的にIEのWebフォルダしか使用しないので、README.JPにあったcadaverのみ記述。

  3. 動作確認

    これで、日本語ファイルが扱えるようになるので、Apacheを再起動して動作確認しよう。



Top Pageへ

AltStyle によって変換されたページ (->オリジナル) /