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


おやじは 実際には使用してませんが、SuSE でも WebDAV が使えるかテストしてみました。基本的に設定等も RedHat と同じで同レベルで使用できるようですが、コマンド名が微妙に異なります。( SuSE では最後に[ 2 ]が付く) 
なお、CGIやPHPといったダイナミックなリソースをコピーできない場合、設定によってコピーできるようになる

Apache2.0系でのmod_encoding 導入に伴う日本語の文字化け対策を こちら に対策をまとめましたので、必ず実行してください。

DAV のインストール

SuSE の Apache には DAV モジュールが用意されていますので、それを YaST で組み込むだけです。

  1. YaST コントロールセンタを起動し、「システム」の「/etc/sysconfig エディター」を起動する。

  2. 「設定のオプション」 で 「Network」 -> 「WWW」 -> 「Apache2」 と開き、「APACHE_MODULES」を選択して「設定」欄に「 dav」と「 dav_fs 」を既存のモジュールに続けて、スペース区切りで追加設定し、最後に 「完了」 ボタンを押す。

  3. 変更された変数が表示されるので、確認し 「了解」 ボタンを押す。

■WebDAV の設定

ここでは、WebDAV を動かすための基本的な設定をしていきます。設定内容は RedHat のときと変わりありません。

◆基本的な設定と動作確認

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

  1. 事前準備 ( WebDAV 用のディレクトリの作成)

    ここで、WebDAV 用の共有ディレクトリ ( ex. /usr/local/dav ) とロックファイルを置くディレクトリ ( ex. /var/lock/dav ) を作成する。
    なお、これらのディレクトリは、いずれも Apache の実行ユーザ権限 ( uid.conf の User/Group ディレクティブでの指定値。 SuSE の場合は、 wwwrun/www 。)でなければならない。

    # mkdir /usr/local/dav
    # chown wwwrun:www /usr/local/dav
    # mkdir /var/lock/dav
    # chown wwwrun:www /var/lock/dav


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

    下記ディレクティブを追記し、共有フォルダを設定する。記述する場所としては、おやじは、 /etc/apache2/my_conf ディレクトリ配下に DAV 関係の設定をまとめたファイルとして dav.conf という名称で作成した。 Apache の基本設定で、/etc/apache2/my_conf 配下の *.conf ファイルは httpd.conf から、/etc/apache2/sysconfig/include.conf 経由で Include されるよう、YaST の「/etc/sysconfig エディター」で設定してあるので、このファイルを作成するだけでよい。

    DavLockDB /var/lock/dav/DavLock
    Alias /doc "/usr/local/dav"
    <IfModule mod_dav.c>
        DAVMinTimeout 600
        <Location /doc>
            DAV On
            SSLRequireSSL
          <Limit All>
              Allow from all
          </Limit>
        </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 が機能していれば、「ネットワークプレイスの追加ウィザードの終了」画面になり、ネットワークプレイスの名前 ( ex. www.aconus.com上のdoc )が表示されるので、必要に応じネットワークプレイスの名前を変更し、完了を押す。

  4. こ こで作成した Web フォルダが開くので、適当なファイル ( CGI や PHP 等はエラーになりコピーできないので注意が必要)をコピー、削除したりして動作を確認する。なお、日本語対応していない段階でフォルダの新規作成をする と、「新しいフォルダ」というフォルダ名が文字化けして削除が厄介になるので作成しないこと。

◆セキュリティの確保

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

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

    Apache をインストール時に同時にインストールされる htpasswd2 (htpasswd ではないので要注意) コマンドでパスワードファイルを作成する。コマンドプロンプトで、

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

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

    # htpasswd2 -c /etc/apache2/.htpasswd oyaji
    Automatically using MD5 format.
    New password: *****
    Re-type new password: *****
    Adding passwd for user oyaji


  2. 設定の追加

    設定は、先ほど作成した dav.conf に下記を書き加える。

    DavLockDB /var/lock/dav/DavLock
    Alias /doc "/usr/local/dav"
    <IfModule mod_dav.c>
        DAVMinTimeout 600
        <Location /doc>
            DAV On
            SSLRequireSSL

            AuthType        Basic
            AuthName       "DAV専用です。"
            AuthUserFile    "/etc/apache2/.htpasswd"
            Require valid-user

            Order deny,allow
            Deny from all
            Allow from 192.168.1.0/24

        </Location>
        <Limit All>
           Allow from all
        </Limit>
    </IfModule>


  3. 動作確認

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

◆日本語ファイル名対応(mod_encodingの導入)

実はこのままでは、日本語名ファイルやフォルダが扱えません。これは、WebDAV への送信と受信で形式が異なるために発生するとのこと。日本語ファイル名を扱えるようにするには「mod_encoding」というモジュールを使います。

mod_encodingを単純に導入すると、程度の差はありますが他のソフトの日本語環境やCGIやPHPで日本語が文字化けしてしまいます。こちらにApache2.0系での対策をまとめましたので、必ず実行してください。

  1. 事前準備

    これからの作業は、apache2-devel がインストールされていないとできません。YaST で検索してインストールしておいてください。
    mod_encoding は、WebDAV Resources JP の Download からダウンロードできますが、Apache2.0 用はApache1.3 用の mod_encoding.c の差し替えファイルの形で提供されていますので、以下の2つのファイルを同じディレクトリにダウンロードします。

    • mod_encoding-20021209.tar.gz
    • mod_encoding.c.apache2.20020611a-2

    ダウンロードしたmod_encoding-20021209.tar.gz を展開して mod_encoding.c.apache2.20020611a-2 を mod_encoding.c として差し替えます。

    # tar zxfv mod_encoding-20021209.tar.gz
    # cp mod_encoding.c.apache2.20020611a-2 mod_encoding-20021209/mod_encoding.c


  2. iconv_hookのインストール

    mod_encoding のインストール前に iconv_hook ライブラリのコンパイルとインストールを行います。

    # cd mod_encoding-20021209/lib
    # ./configure
    # make
    # make install
    # ldconfig


    これで、iconv_hook ライブラリが /usr/local/lib 配下にインストールされますが、そのままではiconv_hookライブラリを認識できないので、最後にldconfigでリフレッシュしておきます。

  3. mod_encodingのインストール

    これが、難関。WebDAV Resources JP にトラブル対策が出ているが、RedHat ではこれだけでは駄目でしたが、SuSE ではデフォルトで、ld.so.conf (共有ライブラリの場所を書いたファイル)に iconv_hookライブラリがインストールされる /usr/local/lib が登録されているので、コマンド名とmodule を置くディレクトリぐらいを注意すればインストールできます。
    なお、make 時に warning がたくさんでますが、エラーでなければ下記のとおり進めて大丈夫です。mod_encoding-20021209のディレクトリに戻り、インストールを行います。

    # cd ../
    # ./configure --with-apxs=/usr/sbin/apxs2-prefork \
    --with-iconv-hook=/usr/local/include
    # make
    # gcc -shared -o mod_encoding.so mod_encoding.o \
    -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook
    # cp mod_encoding.so /usr/lib/apache2-prefork/


  4. mod_encoding 関係の設定

    mod_encoding 関係の設定を追加します。

    • mod_encoding モジュールの組み込み

      mod_encoding モジュールが組み込まれるように、こちらと同じ方法で、「APACHE_MODULES」を選択して「設定」欄に「 encoding 」と追加登録する。

    • dav.conf の設定

      以下の内容を 今回追加した dav.conf に追加する。

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

      • 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のみ記述。

  5. 動作確認

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


Top Pageへ