KUROBOX PRO をハックして Debian にした後、Apache2・WebDAV・OpenSSL・ダイジェスト認証を使い自宅サーバーを構築したメモ。
WebDAV(Distributed Authoring and Versioning)とはネットワークによる分散環境(Distributed)下でのWebコンテンツなどの編集(Authoring)やリビジョン管理(Versioning)を行うことを目的に規定されたプロトコルです。
インストールしたソフト
emacs gcc g++ make ibc-dev libc6-dev apache2 libapache2-mod-encoding (日本語表示 for apache2) lv (日本語対応 less) alias patch ntp
インストールコマンドは次の2つです。
# apt-get install <インストールソフト名> # aptitude install <インストールソフト名>
Apache2 をインストールしたら「http://192.168.1.81」にアクセスして「Placeholder page」が表示される事を確認します。
Apache2 が起動しているかの確認。
# ps ax | grep apache2 3475 ? Ss 0:00 /usr/sbin/apache2 3479 ? S 0:00 /usr/sbin/apache2 3480 ? S 0:00 /usr/sbin/apache2 ... 3571 pts/0 S+ 0:00 grep apache2
Debian のデフォルト設定ではコンテンツの置き場所は以下のようになっています。
種類 | ディレクトリ | 所有者:グループ | ホストのアクセス制限 |
サイトのコンテンツ | /var/www/ | root:root | なし |
サイトのCGI | /usr/lib/cgi-bin/ | root:root | なし |
パッケージのドキュメント | /usr/share/doc/ | root:root | ローカルホストのみ |
ユーザのコンテンツ | /home/ユーザ名/public_html/ | user:user | なし |
Apache2のログはデフォルトでは下記の2つです。
/var/log/apache2/access.log | クライアントのアクセス情報を記録する |
/var/log/apache2/error.log | 不具合やサーバの情報を記録する |
ファイルを確認
kurobox:~# tail -3 /var/log/apache/access.log 192.168.1.1 - - [01/Jul/2007:21:15:45 +0900] ... 192.168.1.1 - - [01/Jul/2007:21:33:36 +0900] ... 192.168.1.1 - - [01/Jul/2007:21:33:42 +0900] ...
WebDAVモジュールの有効化
$emacs /etc/apache2/apache2.conf ServerRoot "/etc/apache2/" ↓ ServerRoot "/var/www" に変更。(必須ではない) LanguagePriority en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw ↓ LanguagePriority ja en da nl et fr de el it ko no pl pt pt-br ltz ca es sv tw
通常は「This module is already enabled!」と表示される。
a2enmod dav a2enmod dav_fs a2enmod encoding
etc/apache2以下に
# mkdir -p /expprt/share/home/dav # chown www-data.www-data /share/home/dav # chmod 700 /share/home/dav
Alias /dav /home/dav <Location /dav> DAV On </Location>
ロック処理は /etc/apache2/mods-enabled/dav_fs.conf に設定されているので不要
ここまで設定したらApache2を再起動します。
/etc/init.d/apache2 restart
ドラッグしてファイルがアップロードできない
# less /var/log/apache2/error.log [notice] DAV/2 configured -- resuming normal operations [error] The locks could not be queried for verification against a possible "If:" header. [error] Could not open the lock database. [error] Permission denied: Could not open property database.
インストールするバージョンによっては、WebDAVのLockファイルが作られないために、ファイルが書き込めない/消せない。 Could not open the lock database.とかエラーログに残っている。
WebDAVのロックファイルの位置は、/etc/apache2/mods-available/dav_fs.confのDavLockDBディレクティブで指定されているので、そのパスで空ファイルを作成し、所有者をapacheのユーザーに変えてあげればよい。
touch /var/lock/apache2/DAVLock chown www-data:www-data /var/lock/apache2/DAVLock
apache2.2では、apache2-ssl-certificateが標準でインストールされないので apt-get でインストールが必要。
インストール後の設定方法。
# emacs /etc/ssl/openssl.cnf [usr_cert]セクションのnsCertType=serverのコメントアウトを外す [v3_ca]セクションのnsCertType=sslCA,emailCAのコメントアウトを外す
apt-get install openssl 0% [Connecting to security.debian.org] 0% [Connecting to security.debian.org] ....進まない
IPアドレスを変更してdebianがインターネット側の名前解決できなかった。
kurobox:~# cat /etc/resolv.conf search localnet.mda.or.jp nameserver 192.168.1.1
設定したら、ネットワークを再起動します。
/etc/init.d/networking restart
Forcing reload of web server (apache2)... waiting Syntax error on line 56 of /etc/apache2/sites-enabled/httpd-ssl.conf: Invalid command 'SSLPassPhraseDialog', perhaps misspelled or defined by a module not included in the server configuration failed!
[mod_sslを有効に] # a2enmod ssl
Forcing reload of web server (apache2)... [Sat Jul 07 21:30:56 2007] [error] VirtualHost _default_:443 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
_default_ を ローカルIP に変更する必要がある
$emacs /etc/apache2/sites-available/httpd-ssl.conf (修正前)ServerName www.example.com:443 (修正後)ServerName 192.168.0.30:443 (修正前)<VirtualHost _default_:443> (修正後)<VirtualHost 192.168.0.30:443>
https://192.168.0.30/ にアクセス。セキュリティの警告ダイアログが出ればOK。
1037:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:461: 1037:error:0906A065:PEM routines:PEM_do_header:bad decrypt:pem_lib.c:425:
./demoCA の 削除が必要。削除したら再起動する。
/etc/init.d/apache2 restart
Basic 認証より安全なDigest 認証を設定します。
a2enmod auth_digest
WEBのダイジェスト認証
$emacs /etc/apache2/sites-available/httpd-ssl.conf 追加 <Directory "/var/www/members"> AuthType Digest AuthName "Members Zone" AuthDigestDomain /members/ AuthUserFile /etc/apache2/.htdigest Require user hoge </Directory>
ここまで設定したらApache2を再起動します。
/etc/init.d/apache2 reload /etc/init.d/apache2 restart
下記に存在するものが読み込まれる。
# ls /etc/apache2/sites-enabled/ 000-default httpd-ssl.conf
000-default を削除すれば、SSL だけでしかアクセスできない。
ダイジェスト認証の認証ファイル作成方法は次のとおり。
htdigest -c /etc/apache2/.htdigest "Members Zone" hoge
$emacs /etc/apache2/sites-available/httpd-ssl.conf ## ## WebDAV ## Alias /dav /share/home/dav <Location /dav> DAV On AuthType Digest AuthName "Members Zone" AuthDigestDomain /members/ AuthUserFile /etc/apache2/.htdigest </Location>
書き込みや名前の変更・削除ができない
# less /var/log/apache2/error.log [error] The locks could not be queried for verification against a possible "If:" header. [error] Could not open the lock database.
前述のとおり。
WebDAV は正しく動作するが、ログファイル error.log に以下のようなエラーログが残っている。
[error] File does not exist: /var/www/_vti_inf.html [error] File does not exist: /var/www/_vti_bin
Windows の Webフォルダでは,Digest 認証で OPTIONS メソッドが通らないことが原因らしい
OPTIONS メソッドが通らないと,Web フォルダは /_vti_bin/shtml.exe/_vti_rpc という普通は存在しないファイル (Front Page Server Extensions のファイルらしい)を探しに行く。
Digest 認証を使うときは <LimitExcept> ディレクティブで OPTIONS メソッドだけ認証を回避すればよい。
: DAV On (追加) <LimitExcept OPTIONS> Require valid-user (追加) </LimitExcept> :
ここまで設定したらApache2を再起動します。
/etc/init.d/apache2 reload /etc/init.d/apache2 restart
「&」を利用したファイル名の場合に、「&」以降のファイル名が表示されない。
【原因】Windowsの不具合。Apache2にパッチをあてて再ビルドが必要。
最新をApache HTTP Serverから取得。
詳細な手順は「Apache2 をソースからインストール」に記述しました。
apt-get remove apatch2 tar zxvf httpd-2.2.*.tar.gz cd httpd-2.2.* patch -p0 < amp_encorde.patch # ./configure --enable-auth-digest --enable-dav --enable-dav-fs \ --enable-so --enable-rewirte --enable-mod-vhost-alias
/usr/local/apache2/ にファイル群ができていますので、/etc/init.d/ に起動スクリプトを移動。
以下のように表示されてしまう。
warning: Clock skew detected. Your build may be incomplete.
時計が狂っているので、ntpインストールが必要。
apt-get install ntp /etc/init.d/ntp start
Windows XP で「入力したフォルダは有効ではないようです。」と表示されてしまう。
【原因】クライアントの Web フォルダに問題があるため、Web サーバーに接続できない。
DynDNS.orgなどの無料のダイナミックDNSを利用する。
IPアドレスの自動更新ツールは「ddclient」が利用できます。「ddclientの設定」を参照してください。
インストールが終了したら、設定が終わったら「//etc/ddclient/ddclient.conf 」を 設定しましょう。
設定後は、まずは手動でddclientを起動します。
# ddclient -daemon=0 -verbose -noquiet
SUCCESSと出たら成功です。
Debian では、下記のコマンドで「libio-socket-ssl-perl」をインストール。
# apt-get install libio-socket-ssl-perl
デーモンを再起動します。
# /etc/init.d/ddclient restart