Apache2はWebDAVサーバとして使うことができます。
DAV(HTTP Distributed Authoring and Versioning)とは、
HTTP(HyperText Transfer Protocol)を拡張したプロトコルで、
それは言うなればサーバ→クライアントの一方向だったHTTPに、
クライアント→サーバのアップロード機能をつけるべく拡張したものです。
つまりHTTPとFTPのよいところを合成したものと言いましょうか、
もっというとWeb上で共有ファイルシステムを構築することを可能になる、
「次世代のプロトコル」として注目が集まっています。
では基本的な設定ということで、conf/httpd.confを編集します。
ServerNameとListenは少なくとも設定しないといけません。
また、Windowsでは、
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
|
の2行のコメントを解除しておく必要があります。
WebDAVディレクトリの設定ですが、ごく簡単には
Alias /davroot "/usr/local/apache2/davroot"
<Location /davroot>
DAV on
</Location>
DAVLockDB /usr/local/apache2/var/DAVLock
|
こんな感じでOKです。あとはディレクトリ
/usr/local/apache2/davroot と /usr/local/apache2/var を作り、
両方ともhttpdの実効ユーザIDで書き込み可能になるようにしておけば、
/usr/local/apache2/davroot 以下が
http://{サーバ名}:{ポート}/davroot としてWebDAVクライアントに公開されます。
●Alias設定とパーミッションの注意
余談ですが、上のようにAliasディレクティブを使うときに、
別名と本当のディレクトリパスの最後に、スラッシュ"/"をつけるとドツボにはまります。
両方ともにつけないようにします。
また、DAVLockDBで指定したファイルは最初に存在している必要はありませんが、
そのファイルが作られるディレクトリ(上の場合はvar)はApacheの実行ユーザ、
典型的にはnobodyで書き込み可能である必要があります。
でないと書き込みアクセスの際にInternal Server Errorの原因になります。
勿論、WebDAVのファイル格納ディレクトリ(上の場合はdavroot)も、
nobodyで書き込み可能でないと書き込みアクセスができません。
●WebDAVのBasic認証の設定
上の「DAV on」だけでは、アクセスに対して常に読み書きを許可するので、
セキュリティ上問題です。そこで、簡単な認証機構として、Apache上のWebDAVで
Basic認証を行う方法があります。
これは、次のように記述を追加して行います。
Alias /davroot "C:/wintools/apache/apache2/davroot"
<Location /davroot>
DAV on
AllowOverride None
Options None
AuthUserFile C:/wintools/apache/apache2/var/users.pwd
AuthGroupFile /dev/null
AuthName "Public Folder"
AuthType Basic
require valid-user
</Location>
DAVLockDB C:/wintools/apache/apache2/var/DAVLock
|
また、特定のプロトコルに対してだけ、特定のユーザでの認証を求めるには、
「require valid-user」の代わりに、
<Limit HEAD PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
require user uranodav
</Limit>
|
のようにします。
上のように指定すると、HEAD、PUT、POST…のアクセスの場合
「require user uranodav」により、クライアントにはユーザ「uranodav」
での認証が求められます。uranodavに対するパスワードの設定は、
Apacheの一般的なBasic認証に使う「htpasswd」で作ればOKです。
また「LimitExcept」を使うと、GET、HEAD、OPTIONS
「以外の」アクセスで任意のユーザによる認証が必要になるようにできます。
さらに細かいアクセス制御をするには、
「Limit」タグの中を例えば次のように設定します。
<Limit HEAD PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
satisfy any
require valid-user
deny from all
allow from 127.0.0.1 192.168.1
</Limit>
|
「allow from」を列挙することによって、アクセス可能なクライアントのIPアドレスを限定できます。
「require valid-user」はパスワード認証を行うことを示します。
「satisfy」のデフォルト値は「all」です。
この場合は、allow fromで許可されたクライアントからのみアクセスでき、
さらにユーザ認証が必要です。
そうではなく、「any」を指定すると、
allow fromで許可されたクライアントはユーザ認証不要でアクセスでき、
その他のクライアントはユーザ認証を行えばアクセスできます。
つまり、
「satisfy all」は列挙された条件に全てヒットしないとアクセスできず、
「satisfy any」は列挙された条件のうちどれか1つにヒットすればアクセスできる、
という意味になります。
WebDAVクライアントとして身近なのはWindows2000/XPの「ネットワークプレース」です。
エクスプローラから「マイ ネットワーク」→「ネットワークプレースの追加」で、WebDAVフォルダ
(Windowsでは「Webフォルダ」と呼ばれます」)に簡単にアクセスできます。
但し、WindowsXPの場合は注意が必要です。
WebDAVにアクセスする際に認証が必要な場合、
WindowsXPは「ユーザアカウント」の代わりに「ホスト名\ユーザアカウント」
の形式で認証を試みる(不具合?)ため、認証が失敗しアクセスできません。
これを解決する方法としては、3つあるとされています。
全部試したわけではありませんが、同様の現象で困ったら順番に、
または一斉に試してみるとよいと思います。
-
Webサーバ(Apache)側の認証ファイルに、「ホスト名\ユーザアカウント」
という変な名前のユーザアカウントを登録する
-
「ネットワークプレース」を新しく作る際に、WindowsXPのサービス「WebClient」
を一時的に停止しておく(私は効果未確認)
-
mod_encodingモジュールを導入する
の3つです。
1.を実施するには、WebサーバがWindowsの場合は、コマンドプロンプトで以下のようにして実行します。
htpasswd ninsho.txt localhost\uranodav
|
UNIXの場合はバックスラッシュ(円マーク)を二重にする必要があります。
上記の方法を試しまくることによって、Linux上のApacheサーバにはアクセスできるようになりました。
が、Windows上のApacheサーバに対しては、mod_encodingを導入していないためか、
認証を伴うWebDAVアクセスにまだ成功していません。(ダメじゃん)
上でWindowsXPからアクセスしようとすると、Windowsがホスト名をユーザ名に勝手につけてしまう、
という問題を回避する方法の1つが、上述の
mod_encodingモジュールを使うことです。
(mod_encodingの本来の目的はそれではないのですが)
-
上記のホームページから、
Apache 1.3用のmod_encoding-*.tar.gzと2.0用のmod_encoding.c.apache2.*
をダウンロードし、前者を展開します。
-
前者の中に含まれるmod_encoding.cを、後者のファイルで差し替えます。
-
iconv_hookライブラリをコンパイルします。
まだシステムにインストール済みでなければ、mod_encodingに同梱なので、
libディレクトリに行き、
「configure; make; make install」でインストールします。
-
次に元のディレクトリに戻り、次のようにしてコンパイルします。
./configure --with-apxs=/usr/local/apache2/bin/apxs
make
|
一旦エラーになりますが、続けて
gcc -shared -o mod_encoding.so mod_encoding.o -Wall -L/usr/local/lib -Llib -liconv_hook
cp mod_encoding.so /usr/local/apache2/modules
|
こんな感じで強引に共有ライブラリmod_encoding.soを作り、
cpコマンドでmodulesディレクトリに配置します。
-
httpd.confを編集し、次の部分を書き加えます。
LoadFile /usr/local/lib/libiconv.so
LoadModule encoding_module modules/mod_encoding.so
NormalizeUsername on
<IfModule mod_encoding.c>
EncodingEngine on
SetServerEncoding UTF-8
DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
AddClientEncoding SJIS "Microsoft .* DAV"
AddClientEncoding "cadaver/" EUC-JP
</IfModule>
|
★LoadFileの行は不要の環境もあるようです。
-
Apacheを(再)起動します。
ということで、以上でネットワークプレースはひとまずおいといて、
今度はWebDAVクライアントとして独立したツールとして、よく知られているソフトウェアをご紹介します。
Linuxではcadaverというコマンドラインツールが有名です。
これはFTPにおけるftpコマンドのような対話型のキャラクタベースのツールで、
使い方はftpとほとんど同じです。
Javaで書かれたプラットフォーム可搬のツールには、
DAV Explorerや、
SkunkDAVがあります。
どちらもバイナリ配布があるので、すぐに使い始めることができます。
また、C言語でWebDAVクライアントを開発するためのライブラリとしては、
Neonというライブラリが公開されています。
(first uploaded 2004/09/12 last updated 2004/09/19, URANO398)
|