Debian を用いた自宅サーバー構築

KUROBOX PRO をハックして Debian にした後、Apache2・WebDAV・OpenSSL・ダイジェスト認証を使い自宅サーバーを構築したメモ。

WebDAV(Distributed Authoring and Versioning)とはネットワークによる分散環境(Distributed)下でのWebコンテンツなどの編集(Authoring)やリビジョン管理(Versioning)を行うことを目的に規定されたプロトコルです。


Debian で サーバー構築

インストールしたソフト

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

SSL接続

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

Digest認証

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

SSL + Digest 認証 で WebDAV を利用する

$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 サーバーに接続できない。

ダイナミックDNS(DDNS)の自動更新

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

参考文献


Valid XHTML 1.1! Valid CSS! 初版更新日 2007/11/26   最新更新日 2008/04/06