Before Up Next

Apache2.0+WebDAVの設定(Red Hat Linux9.0)


インストールはなかなかうまくいかなかった。単純にインストールしただけでは、以下のような問題点がある。

  1. 日本語のファイル名を使用できない
  2. apacheを実行しているユーザでのアクセスになるのでディレクトリの所有者の作成したファイルにアクセスできない。
    また,作成したファイルのオーナがApacheのuser/groupになってしまうのでディレクトリの所有者がアクセスできないことになる。
    WebDAV専用のディレクトリである場合問題にならないが、WebDAV以外でも使用するのであれば厄介である。

パソコンおやじのサイト内の以下を参考にした。
このサイトの内容もほとんどコピーです。
Apache2.0+WebDAVの設定(Linux編)
Apache2.0系でのmod_encoding 導入に伴う日本語の文字化け対策

Apache2.0/DAVのインストール

Apache2をRedHatのパッケージからインストールしたので特に注意することはないが、新規にソースからインストールされる場合は、日本語フォルダやファイル名に対応するため後でDSOモジュールとしてmod_encodingを組み込むので、./configure時に「--enable-so」オプションを付けてコンパイルする。SSLについても上記サイトを参照すれば良いと思う。

Apache2.0+WebDAVの設定

Apache2のhttpd.conf の設定を追加・変更した。

  1. 基本的な設定と動作確認

    httpd.confを編集していきます。
    Red hatのパッケージでインストールしたので場所は、/etc/httpd/conf/httpd.conf。
    実際の変更内容は、httpd.confを参照。

    1. WebDAVモジュールの組み込みの確認
      ・以下の通りDAV関連モジュールがコメントアウトされていないことを確認する。
      LoadModule dav_module modules/mod_dav.so
      LoadModule dav_fs_module modules/mod_dav_fs.so
    2. 事前準備(WebDAV用のディレクトリの作成)
      ここで、WebDAV用の共有ディレクトリ(/var/www/dav)とロックファイルを置くディレクトリ(/var/lock/dav)を作成する。これらのディレクトリは、いずれもApacheの実行ユーザ権限(httpd.confのUser/Groupディレクティブでの指定値。RPMから入れたのならapache/apache)でなければならないと書いてあったのでそのようにしたが、共有ディレクトリは違う権限でも良いかもしれない。
       # mkdir /usr/local/apache2/dav
       # chown nobody.nobody /usr/local/apache2/dav
       # mkdir /var/lock/dav
       # chown nobody.nobody /var/lock/dav
    3. ファイルロック用のフォルダの指定およびWebDAV用の共有フォルダ用の設定
      下記ディレクティブを追記し、共有フォルダを設定する。
      実際の変更内容は、httpd.confを参照。
      • DavLockDB /var/lock/dav/lockdb
        ファイルロック用のフォルダ(前項で作成済み)の指定。
        WebDAVでファイル共有した場合に、同じファイルを二人が操作できないようにするためのロックファイルを拡張子を除いた形(拡張子はApacheが付与)でパスを指定する。
      • DAVMinTimeout 600
        クライアントが DAV リソースロックを要求した場合、ロックがサーバによって自動的に解除されるまでの時間を指定。ここでは600秒とした。
      • Alias /davroot "/var/wwww/dav"
        Aliasとは、「別名」のこと。/davrootとWebDAVアクセスで指定されたら、それは「/var/www/dav」のことという意味であり、実際はここにアクセスにくる。
      • DAV on
        設定したコンテナ(ディレクトリ)で WebDAV HTTP メソッドが使えるようにするための設定。
      • SSLRequireSSL
        この設定で、SSLを使用していないリクエスト(HTTPS以外)が全て拒否される。不用意なアクセス防止のためなので、ApacheがSSL対応していない場合は指定しないこと。
    4. Apacheの再起動
      設定が終了したら、WebDAVの基本動作を確認するため、Apacheを再起動する。
  2. 基本動作確認

    Windowsでは、標準でサポートされているWebフォルダ機能でWebDAV機能を利用できるが、Windows XP では、ユーザ名の前にサーバ名が付与された認証画面が出て先に進めない。対策としては、「ネットワークプレースの追加」をするときだけ、「WebClient 」サービスを停止してから追加作業を行えば問題は発生しない。その後、「WebClient 」サービスを起動しなおす。

    http://support.microsoft.com/default.aspx?scid=kb;ja;825382 参照。

    また、ネットワークプレースを入力する際最後に"?"を付加するだけでもうまくいく。

    1. デスクトップの「マイネットワーク」を開き、「ネットワークプレースの追加」をクリックして、「ネットワークプレースの追加ウィザード」を起動する。
    2. 「ネットワークプレースの場所を入力してください」にURL(http://home.canda.jp/dav/)を入力し、次へを押す。
    3. WebDAVが機能していれば、「ネットワークプレイスの追加ウィザードの終了」画面になり、ネットワークプレイスの名前(home.canda.jp上のdav)が表示されるので、必要に応じネットワークプレイスの名前を変更し、完了を押す。
    4. ここで作成したWebフォルダが開くので、適当なファイル(CGIやPHP等はエラーになりコピーできないので注意が必要)をコピー、削除したりして動作を確認する。なお、日本語対応していない段階でフォルダの新規作成をすると、「新しいフォルダ」というフォルダ名が文字化けして削除が厄介になるので作成しないこと。
  3. セキュリティの確保

    ユーザ認証を導入することによりセキュリティを確保する。「Basic認証」はIDとパスワードを MIME(BASE64)エンコードして送信しているだけなので、チャレンジ・レスポンス方式でMD5でハッシュして送信する。「Digest認証」の方がベターだが日本語対応のためのmod_encodingに問題があるようで、Digest認証はうまくいかないようなのでBasic認証とせざるを得ず、外部から使うならSSLが必須と思います。
    1. パスワードファイルの作成
      Apacheのbinフォルダ内にあるhtpasswdコマンドでパスワードファイルを作成する。コマンドプロンプトで、
      htpasswd -c ファイル名 ユーザ名
      と入力すると、パスワードを2回聞かれるので入力する。パスワードファイルはドキュメントルート以外に置き、フォルダはあらかじめ作成しておかないとエラーとなる。-cオプションは、初回にファイルがないときだけ指定すればよく、二人目からは不要である。パスワード変更は、上書きされるので二人目以降同様、-cオプションなしで入力すればよい。
      # cd /usr/local/apache2/bin
      # htpasswd -c /usr/local/apache2/conf/.htpasswd canda
      Automatically using MD5 format.
      New password:*****
      Re-type new password:
      Adding passwd for user canda
    2. 設定の追加
      設定は、httpd.confに追加したDAV関係のところに下記を書き加える。
      • AuthType
        認証方式の指定をする。今回はベーシック認証なので、「Basic」と記述する。
      • AuthName
        認証画面の領域に表示される内容であり、日本語でも可。(ex."WebDAV Security)
      • AuthUserFile
        1項で作成したパスワードファイルを指定する。
      • Require
        「valid-user」とするとパスワードファイルに登録したユーザ全てにアクセス許可を与える。
        特定のユーザだけにアクセス許可する場合は、以下のとおり「Require user」に続けてユーザ名を記述する。複数ユーザなら空白で区切って列記する。
        Require user canda xxxx
      • 外部からのアクセス規制
        DAVフォルダに外部からアクセスできないようにするには、Allow/Denyディレクティブが使用できる。
        Allow from 192.168.0.0/24
    3. 動作確認
      設定したとおりに認証ができるかApacheを再起動して動作確認する。
  4. 日本語ファイル名対応(mod_encodingの導入)

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

    mod_encodingを単純に導入すると、程度の差はありますが他のソフトの日本語環境やCGIやPHPで日本語が文字化ける。上記Apache2.0系でのmod_encoding 導入に伴う日本語の文字化け対策にApache2.0系での対策をまとめてあるので、まずこれを実行する。


    1. 事前準備
      mod_encodingは、WebDAV Resources JPのDownloadからダウンロードできるが、以下の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として差し替える。
      # wget http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz
      # wget http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616
      # 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

      これで、iconv_hookライブラリが/usr/local/lib配下にインストールされる。
    3. mod_encodingのインストール
      WebDAV Resources JPにトラブル対策が出ているが、RedHatではこれだけでは駄目で、最終的には以下のとおりでインストールできる。
      まず、インストールが終了して最終的にApacheを起動したときに、「Cannot load /usr/local/apache2/modules/mod_encoding.so into server: libiconv_hook.so.1: cannot open shared object file: No such file or directory 」と怒られるので、下記でld.so.conf(共有ライブラリの場所を書いたファイル)に/usr/local/libを追記して、iconv_hookライブラリを認識できるようにします。
      実際には、「/etc/ld.so.cache」というファイルの情報を基に共有ライブラリを読み込むようになっているので、ldconfigでリフレッシュしておきます。
      # vi /etc/ld.so.conf
      /usr/local/lib

      [Esc]、[:]、[w]、[q]で保存。


      # ldconfig

      後は、WebDAV Resources JPのトラブル対策やREADME.JPを参考にインストールする。
      なお、make時にwarningがたくさんでますが、エラーでなければ下記のとおり進めて大丈夫。
      # cd ../
      # ./configure --with-apxs=/usr/sbin/apxs \
      --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 /etc/httpd/modules/mod_encoding.so

    4. 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のみ記述。
    5. 動作確認
      これで、日本語ファイルが扱えるようになる。

Top Pageへ