2013-09-16

Ubuntu12.04環境のApache2.2にWebDAVのインストール

Digest認証に続いて、WebDAVのインストールと設定を行った。設定までのメモ。

WebDAV(Web-based Distributed Authoring and Versioning)とは

WebDAVはHTTP1.1の拡張プロトコルで、Webサーバー上のコンテンツを管理できるよう、リモートファイルのアップデートや削除といった操作が行える。WebDAVに対応したWebサーバーなら、コンテンツのアップロードや更新に、FTPやSCPのような従来のプロトコルを使うことなく実行できる。 ApacheはWebサーバーとしてのHTTPのサポートに加え、分散ファイルシステムのためのWebDAVもサポートしている。

WebDAVの特徴

  • 必要とするTCP/IPポートなどのネットワーク構成がシンプルであること
  • SSLを使ったセキュリティの向上が容易であること
  • 特定のOSやサーバーの実装に依存しないこと
  • 様々な認証プロバイダ(LDAPやRDBMS)を利用できること

必要なモジュールの確認をする

(1) mod_dav.so (2) mod_dav_fs.so

$sudo apache2ctl -M | grep dav

→ 両方とも見つからない

インストールをする前に、組み込まれていないだけでインストールされていないかを確認する

$ll /usr/lib/apache2/modules | grep dav
mod_dav.so
mod_dav_fs.so
mod_dav_lock.so

→ 両方見つかった

davモジュールとdav_fsモジュールの有効化

$ sudo a2enmod dav
Enabling module dav.
To activate the new configuration, you need to run:
  service apache2 restart
$ sudo a2enmod dav_fs
Considering dependency dav for dav_fs:
Module dav already enabled
Enabling module dav_fs.
To activate the new configuration, you need to run:
  service apache2 restart

→ まとめて有効化してもよかったかな?

apache再起動

$ sudo service apache2 restart
* Restarting web server apache2 ...

モジュールが組み込まれているか確認

$ sudo apache2ctl -M | grep dav
 dav_module (shared)
 dav_fs_module (shared)
Syntax OK

→ OK

WebDAVで共有するディレクトリを用意する

「/var/www/webdav/」を利用することにする。

sudo mkdir /var/www/webdav/

httpdデーモン権限で書き込みができるように、権限の変更をする

→ ...の前にapache実行ユーザーの設定をしていなかったので、先に行う

apache実行ユーザーとグループの作成

sudo groupadd apache
sudo useradd -g apche apache

apacheの実行ユーザーとグループの設定

$sudo -H vim /ets/apache2/apache2.conf
※ UserディレクティブとGroupディレクティブを以下のように書き換える
# These need to be set in /etc/apache2/envvars
#User ${APACHE_RUN_USER}
#Group ${APACHE_RUN_GROUP}
User apache
Group apache

【再】httpdデーモン権限で書き込みができるように、権限の変更をする

$ sudo chown apache.apache /var/www/webdav/
$ ll /var/www/webdav/
合計 8
drwxr-xr-x 2 apache apache 4096  916 11:05 ./
drwxr-xr-x 3 root   root   4096  916 11:05 ../

ロックファイルの作成

WebDAVの排他制御のために利用する。具体的には、あるユーザーがファイルを操作している間に別のユーザーがファイルを更新できないようにする、などのためである。 → これは、バイナリからインストールした場合には作らなくて良い(?)らしいのでとりあえずパス

apache2.confの設定

$sudo -H vim /etc/apache2/apache2.conf
※ 以## 下の内容を追記する
# WebDAVの設定
LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so
LoadModule dav_fs_module /usr/lib/apache2/modules/mod_dav_fs.so
# ロックファイル
<IfModule mod_dav_fs.c>
  DAVLockDB ${APACHE_LOCK_DIR}/DAVLock
</IfModule>

Alias /webdav "/var/www/webdav"
<Location /webdav>
  DAV on
  AuthType Basic
  AuthName "WebDAV Server"
  AuthUserFile "/etc/apache2/htpasswd"
  Require valid-user
</Location>

apache2.confファイルの文法チェック

$ sudo apachectl -t
[Mon Sep 16 11:51:09 2013] [warn] module dav_module is already loaded, skipping
[Mon Sep 16 11:51:09 2013] [warn] module dav_fs_module is already loaded, skipping
Syntax OK

→ モジュールは呼び出さなくて良いみたいだったのでこの箇所をコメントアウト

$ sudo apachectl -t
Syntax OK

→ OK、警告が消えた

apache再起動

$ sudo service apache2 restart
* Restarting web server apache2 ...

ブラウザで確認

2013-09-16-02-01.png
2013-09-16-02-01.png
→ ロックファイルあたりがちゃんと聞いてるかどうかは不安だが、できたよう

ファイルのダウンロード・アップロードができるか確認

Finder > 移動 > サーバへ接続 サーバーアドレス欄に「http://192.168.56.101/webdav/」と入力

2013-09-16-02-02.png
2013-09-16-02-02.png

前回設定したダイジェスト認証でのユーザーとパスワードを入力する

2013-09-16-02-03.png
2013-09-16-02-03.png

ドラッグアンドドロップでダウンロードできた。 アップロードは....権限不足のためかできない。エラーが発生する。

アップロードができるよう、ディレクトリの権限を変更する

$sudo chmod 777 /var/www/webdav

→ 公開ディレクトリの権限変えてもダメ。さきほどと同じエラーが発生する

Apacheのエラーログを見てみる

$ cat /var/log/apache2/error.log
[Mon Sep 16 12:34:07 2013] [error] [client 192.168.56.1] Could not open the lock database.  [500, #400]
[Mon Sep 16 12:34:07 2013] [error] [client 192.168.56.1] (13)Permission denied: Could not open property database.  [500, #1]
[Mon Sep 16 12:34:11 2013] [error] [client 192.168.56.1] The locks could not be queried for verification against a possible "If:" header.  [500,

→ 上述のエラーが吐かれまくっている。やっぱりロックファイルまわりが怪しいようだ。

ロックファイルの権限を変更する

Permission deniedと書かれているのでおそらく権限まわりのエラーだと予測

sudo touch /var/lock/apache2/DAVLock
sudo chown apache.apache /var/lock/apache2/DAVLock

apache再起動

$ sudo service apache2 restart
* Restarting web server apache2 ...

→ アップロードできたー。とりあえずここまで。

※ 参考

  • 『サーバ構築の実際がわかる Apache[実践]運用/管理』