Apache2.0+WebDAVの設定(SuSE編)
おやじは 実際には使用してませんが、SuSE でも WebDAV が使えるかテストしてみました。基本的に設定等も
RedHat と同じで同レベルで使用できるようですが、コマンド名が微妙に異なります。(
SuSE では最後に[ 2 ]が付く)
なお、CGIやPHPといったダイナミックなリソースをコピーできない場合、
設定によってコピーできるようになる。
Apache2.0系でのmod_encoding 導入に伴う日本語の文字化け対策を こちら に対策をまとめましたので、必ず実行してください。
SuSE の Apache には DAV モジュールが用意されていますので、それを YaST で組み込むだけです。
- YaST コントロールセンタを起動し、「システム」の「/etc/sysconfig エディター」を起動する。
- 「設定のオプション」 で 「Network」 -> 「WWW」 -> 「Apache2」 と開き、「APACHE_MODULES」を選択して「設定」欄に「
dav」と「 dav_fs 」を既存のモジュールに続けて、スペース区切りで追加設定し、最後に
「完了」 ボタンを押す。
- 変更された変数が表示されるので、確認し 「了解」 ボタンを押す。
■WebDAV の設定
ここでは、WebDAV を動かすための基本的な設定をしていきます。設定内容は RedHat
のときと変わりありません。
◆基本的な設定と動作確認
Apache2.0系ではWebDAVを標準でサポートしていますので、httpd.confの設定+αで動かすことができます。
テキストエディタでhttpd.confを編集していきます。変更する場合は、失敗に備えて変更行を下の行にコピーし、元の行の先頭に「#」を付加することにより、コメント行として保存しながら作業すると良いでしょう。 (青字は削除、赤字は追加、緑字は変更したものです。)
- 事前準備 ( 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
|
- ファイルロック用のフォルダの指定および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> |
- DavLockDB /var/lock/dav/DavLock
ファイルロック用のフォルダ(前項で作成済み)の指定。WebDAVでファイル共有した場合に、同じファイルを二人が操作できないようにするためのロックファイルを拡張子を除いた形(拡張子はApacheが付与)でパスを指定する。
- Alias /doc "/usr/local/dav"
Aliasとは、「別名」のこと。/docとWebDAVアクセスで指定されたら、それは「/usr/local/dav」のことという意味であり、実際はここにアクセスにくる。
- DAVMinTimeout 600
クライアントが DAV リソースロックを要求した場合、 ロックがサーバによって自動的に解除されるまでの時間を指定。ここでは600秒とした。あまり長いとロックされっぱなしになる恐れもあるので、ほどほどに。
- DAV on
設定したコンテナ(ディレクトリ)で WebDAV HTTP メソッドが使えるようにするための設定。
- SSLRequireSSL
この設定で、SSLを使用していないリクエスト(HTTPS以外)が全て拒否される。不用意なアクセス防止のためなので、ApacheがSSL対応していない場合は指定しないこと。
- Limit ディレクティブ
SuSE は suEXEC 化されており、RedHat も同様であるが suEXEC 環境ではLimit
ディレクティブで 使用する method を明示してあげないと、403 エラーになる method があり、うまく動作しない。ここでは、「
Limit All 」として全ての method を開放「 Allow from all 」しているが、必要に応じて
method を指定しても良い。
- Apacheの再起動
設定が終了したら、WebDAV の基本動作を確認するため、Apache を再起動する。
◆基本動作確認
Windowsでは、標準でサポートされている Web フォルダ機能で WebDAV 機能を利用できます。ここでは、Windows2000
Professional ベースで示します。
-
デスクトップの「マイネットワーク」を開き、「ネットワークプレースの追加」をクリックして、「ネットワークプレースの追加ウィザード」を起動する。
-
「ネットワークプレースの場所を入力してください」に URL ( ex. http://localhost/doc/
、 http://www.aconus.com/doc/ etc. ) を入力し、次へを押す。
-
WebDAV が機能していれば、「ネットワークプレイスの追加ウィザードの終了」画面になり、ネットワークプレイスの名前
( ex. www.aconus.com上のdoc )が表示されるので、必要に応じネットワークプレイスの名前を変更し、完了を押す。
-
こ
こで作成した Web フォルダが開くので、適当なファイル ( CGI や PHP
等はエラーになりコピーできないので注意が必要)をコピー、削除したりして動作を確認する。なお、日本語対応していない段階でフォルダの新規作成をする
と、「新しいフォルダ」というフォルダ名が文字化けして削除が厄介になるので作成しないこと。
◆セキュリティの確保
このままでは、誰でも自由に共有フォルダにアクセスして書き換えや削除ができてしまうので、ユーザ認証を導入することによりセキュリティを確保します。Apache
でのユーザ認証には、ブラウザ側がサポートしていなかったという問題もあり「Basic
認証」が広く使われていますが、Basic 認証は ID とパスワードを MIME(BASE64)
エンコードして送信しているだけなので、パケットを盗聴・デコードされれば、ID
とパスワードが簡単に分かってしまいます。そこで、今回は、チャレンジ・レスポンス方式で
MD5 でハッシュして送信する「Digest 認証」で行くことにしました。この方式をとれば、毎回送信内容が変わるので盗聴されても解読は極めて困難になります。
ところが、Digest 認証はうまくいきませんでした。後述する日本語対応のための
mod_encoding に問題があるようで、新規の Web フォルダを登録できない等の問題がでます。 従って、Basic
認証とせざるを得ず、外部から使うなら SSL が必須と思います。
-
パスワードファイルの作成
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
|
-
設定の追加
設定は、先ほど作成した 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>
|
- AuthType
認証方式の指定をする。今回はベーシック認証なので、「Basic」と記述する。
- AuthName
認証画面の領域に表示される内容であり、日本語でも可。(ex. パスワードを入力してください。)
- AuthUserFile
1項で作成したパスワードファイルを指定する。
- Require
ここでは、「valid-user」としてパスワードファイルに登録したユーザ全てにアクセス許可を与えた。
パスワードファイルに登録したユーザの中でも、特定のユーザだけにアクセス許可したい場合は、以下のとおり「Require
user」に続けてユーザ名を記述すればよい。複数ユーザなら空白で区切って列記すればよい。
Require user oyaji xxxx
- 外部からのアクセス規制
DAV フォルダに外部からアクセスできないようにするには、Allow/Deny ディレクティブが使用できる。ここでは、「Allow
from 192.168.1.0/24」として家庭内からのみ許可した。
- 動作確認
ここで、設定したとおりに認証ができるかApacheを再起動して動作確認しておこう。
◆日本語ファイル名対応(mod_encodingの導入)
実はこのままでは、日本語名ファイルやフォルダが扱えません。これは、WebDAV
への送信と受信で形式が異なるために発生するとのこと。日本語ファイル名を扱えるようにするには「mod_encoding」というモジュールを使います。
mod_encodingを単純に導入すると、程度の差はありますが他のソフトの日本語環境やCGIやPHPで日本語が文字化けしてしまいます。こちらにApache2.0系での対策をまとめましたので、必ず実行してください。
- 事前準備
これからの作業は、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
|
- iconv_hookのインストール
mod_encoding のインストール前に iconv_hook ライブラリのコンパイルとインストールを行います。
# cd mod_encoding-20021209/lib
# ./configure
# make
# make install
# ldconfig
|
これで、iconv_hook ライブラリが /usr/local/lib 配下にインストールされますが、そのままではiconv_hookライブラリを認識できないので、最後にldconfigでリフレッシュしておきます。
- 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/
|
- 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のみ記述。
- 動作確認
これで、日本語ファイルが扱えるようになるので、Apacheを再起動して動作確認しよう。
Top Pageへ