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


Linuxと同様にWebDAVとはどんなものかを確認するため、Windows環境のApache2.0でWebDAVを試験的に動かしてみましたので、ここにまとめておきます。
WebDAVは、HTTPベースのファイル共有システムのため、FTPやSSHとはやや異なる部分があります。意識して使用すれば問題ありませんが、扱うドキュメントによっては、結果的にFTPと変わらないオペレーションになってしまうこともあります。
なお、動作確認は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>

  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>

  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へ