WebDAVを使って、外部から自宅に安全にアクセスできるようにします。
|
|
■mod_dav と mod_dav_fs の組み込み
ここでは、すでに、OpenSSLがインストールされていて、WebDAVが使用できるようになっているものとして解説していきます。もし、WebDAV用のモジュールである
mod_dav.cと mod_dav_fs.cが組み込まれていない場合は、Apache を再コンパイルしてモジュールを組み込んでおきましょう。モジュールが組み込まれているかどうか確認するには、
httpd
-l コマンドを実行します。また、SSL を使用してWebDAV フォルダにアクセスするのならば、mod_ssl.c
も組み込まれている必要があります。外部からWebDAVアクセス時には認証が必須となりますので、mod_auth_digestモジュールも必要となります。mod_digest
とは異なるので注意してください。
# /usr/local/apache2/bin/httpd
-l
Compiled in modules:
mod_ssl.c
mod_dav.c
mod_dav_fs.c
mod_auth_digest.c
・・・ |
|
もし、必要となるモジュールが組み込まれていない場合は、以下のようにして、Apache を再コンパイルしなおしてください。
$ ./configure --with-mpm=worker
\
--enable-dav
\
--enable-ssl
\
--with-ssl=/usr/local/ssl
\
--enable-auth_digest
\
--enable-shared=yes
$ make
$ su
# make install |
|
■WebDAVの設定
httpd.conf を開いて、以下に示す行を追加しておきます。一行目のAlias では、別名定義を記述しておきます。わかりやすく言えば、http://サーバー名/test
というURLで指定した際に、ドキュメントルートの/doc の中のディレクトリにマッピングされる事になります。この時、/test
というディレクトリ自体は存在している必要はありません。
<IfModule>~からはコンテナで囲み、WevDAV の設定を行います。
DAV
On は、DAV ファイルシステムプロバイダを有効にします(
mod_dav_fs
モジュールで実装)。
SSLRequireSSL ディレクティブを指定すると、
https://
~ で始まるURL以外はアクセスを拒否するようになります。これは、誤ってhttp://~で始まるURLでアクセスできないようにする場合に効力を発揮します。
Alias /test "/home/kororo/public_html/doc"
<IfModule mod_dav.c>
DAVMinTimeout 600 //ロックの最小生存時間(秒単位)を指定
<Location
/test>
DAV
On //WebDAV
を有効にする
SSLRequireSSL
//SSL を有効にする
AuthType
Digest
AuthName "member"
AuthDigestFile /usr/local/apache2/.htdigest
</Location>
</IfModule>
DavLockDB /usr/local/apache2/var/DavLock |
|
最後の、DavLockDBでは、複数人が同時にファイルを操作できないようにロックするための指定です。注意したいのは、ロックデータベースファイルのあるディレクトリは
Apache が実行されている User と Group に書き込み権限がある必要があります。何の事をいっているかわからない方は大抵、ユーザー、グループ共に、nobody
に設定されているはずです。
# mkdir /usr/local/apache2/var
# chown apache.apache /usr/local/apache2/var |
|
また、/home/kororo/public_html/doc ディレクトリも apache ユーザーが書き込めるように適切にパーミッションを設定しておきます。/doc
ディレクトリにファイルを書き込むと、ユーザー/グループ共に、apache ユーザーの権限で書き込まれます。
# chown apache.apache
/home/kororo/public_html/doc |
|
◎認証用のディレクティブ
|
AuthType |
Basic もしくは、Digest を指定する事ができます。最初の文字が大文字である点に注意して記述してください。
|
|
AuthName |
パスワード入力画面にでてくる「領域名」(realm)に表示される文字列 |
|
AuthUserFile |
ユーザー用のパスワードファイルの場所。一般ユーザーはドキュメントルートより上位の階層にパスワードファイルを置くようにしてください。
|
|
AuthDigestFile |
システム全体に適用されるパスワードファイルの場所。ドキュメントルートとは異なる場所にパスワードファイルを保存した場合に指定します。
|
|
■DIGEST認証用のファイルを作成する[ .htaccess を用いる場合]
Digest認証用のファイルは、見られては困るものなので極力、ドキュメントルートから外れたディレクトリに保存するのが無難です。通常は、ドキュメントルートの一階層上、もしくは、ServerRoot
ディレクティブで指定したPATH内に保存しておけばいいでしょう。ここでは、ServerRootディレクトリ直下にパスワードファイルを作成してみます。-c
オプションは新規ユーザー作成時のオプションで、あらたにユーザーを追加したい場合は、-c オプションをつける必要はありません。
# cd /usr/local/apache2
# htdigest -c .htdigest "member"
kororo
Adding password for kororo in realm
member.
New password: |
|
.htdigest のファイル名は任意です。ドキュメントルート内に配置する場合は、必ず、「.ht 」で始まるファイル名を指定しましょう。"member"
は、パスワード入力ダイアログボックスに表示される名称を入力します。最後の、kororo がアクセスに使用するユーザー名です。パスワードの入力を求められたら、2度パスワードを入力します。
次に、ディレクトリごとの認証をかけるために、.htaccess を用います。認証をかけたいディレクトリの
一階層上に
.htaccess を作成し、以下のように記述しておきます。AuthType~以降はmod_auth_digest
モジュールを使用し、DIGEST認証を使ってアクセスするための指定です。HTTP認証でも可能ですが、WebDAVを使う以上、HTTP認証では危険(エンコードされたパスワードが平分で流れるため)なので極力Digest認証を使うようにしてください。
なお、SSL を使用してアクセスする場合はこの限りではありません。ユーザーごとに認証をかける場合は、AuthDigestFile
ではなく、
AuthUserFile を指定します。最後の、require valid-user
では、パスワードファイルに記述されたユーザーのみアクセスを許可する指定です。
AuthType Digest
AuthName "member"
AuthDigestFile /usr/local/apache2/.htdigest
<Limit GET PUT POST DELETE PROPFIND PROPPATCH
MKCOL COPY MOVE LOCK UNLOCK>
require
valid-user
</Limit> |
|
■Apache の起動
以上の設定を終えたら、Apache を起動させます。SSL対応で起動させるには以下のコマンドを入力します。パスワードを聞かれるので、秘密鍵を作成した際のパスワードを入力します。起動後、443番がListen
状態になっていることを確認しておきます。
# apachectl sslstart
# netstat -an | grep 443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
|
|
■クライアントからアクセスする[ Windowsクライアントの場合]
それでは、実際にWindowsクライアントからアクセスしてみましょう(Linuxクライアントからアクセスする方法は後述)。「マイネットワーク」を開いて、「ネットワークプレースを開く」をクリックします。
ネットワークプレースの場所を入力します。URLは、
https://サーバー名/エイリアス名
です。SSLを使用しているので、https となることに注意してください。「次へ」をクリックしたとき、WindowsXP
の場合はもしかしたら、Office2000 のCDを求められるかもしれませんので、そのときは、CDをいれてインストールを行ってください(なにをインストールしているのか知りませんが…)。
「セキュリティ警告」がでるので、「はい」をクリックします。
パスワードの入力を求められるので、Digest認証でパスワードを作成した際のパスワードを入力してください。
これで、正常にWebDAV でアクセスができるようになりました。きちんとファイルのコピー/削除/リネーム等が行える事を確認してください。
■クライアントからアクセスする[ Linuxクライアントの場合]
Linux クライアントからアクセスするためには、ca
daver というクライアントソフトウェアが必要となります。RedHat
の場合は、RPMパッケージが用意されているので、インストールしておいてください。apt-get でインストールしたら、依存関係で、neon
というソフトウェアまでインストールされました(^▽^;)
# apt-get install
cadaver
Committing changes...
Preparing... ############################
[100%]
1:cadaver #############################
[ 50%]
2:neon ############################### [100%]
|
|
ソースコードからインストールする場合は以下のサイトからダウンロードしてきてください。普通に、./configure→make→make
install でインストールできると思います。
◎cad
それでは、実際に接続してみましょう。ほとんどFTPの操作と同様なので解説はもはや必要ないでしょう。
$ cadaver https://linux.kororo.jp/doc
WARNING: Untrusted server certificate presented
for `linux.kororo.jp':
Issued to: kororo.jp, linux, Tokyo, Setagaya,
JP
Issued by: kororo.jp, linux, Tokyo, Setagaya,
JP
Certificate is valid from May 2 04:41:44
2004 GMT to May 2 04:41:44 2005 GMT
Do you wish to accept the certificate?
(y/n) y
Authentication required for member on server
`linux.kororo.jp':
Username: kororo //
ユーザー名の入力
Password: //パスワード入力
dav:/doc/> ls
Listing collection `/doc/': succeeded.
aaa.mp3 4188131 May 2 16:33
sin.mp3 7946028 May 2 15:22
dav:/doc/> get aaa.mp3
Downloading `/share/aaa.mp3' to aaa.mp3:
Progress: [=============================>]
100.0% of 4188131 bytes succeeded.
dav:/doc/> quit
Connection to `linux.kororo.jp' closed. |
|
■日本語ファイル名の扱い
WebDAVはデフォルトでは、日本語に対応していないため、mod_encoding というDSOモジュールを用いなければなりません。もう既に試した方はわかっているとおもいますが、このモジュールを組み込まないと、日本語ファイル名が文字化けしたり、正常に書き込めなかったりします。なので、下記のWebDAV
Resources JPからモジュールをダウンロードしてきてください。
まず、mod_encoding 20021209.tar.gz を伸張・解凍し、その中のmod_encoding.so
をmod_encoding.apache2.20020611a-2 に置き換えます。その後で、iconv_hookライブラリのコンパイルとインストールを行います。以上の操作で、/usr/local/lib
以下に、libiconv_hook.so がインストールされます。
$ tar xzvf mod_encoding-20021209.tar.gz
$ cd /usr/local/src/mod_encoding-20021209
$ cp ../mod_encoding.c.apache2.20020611a-2
mod_encoding-20021209/mod_encoding.c
cp: overwrite `mod_encoding.c'? y
$ cd lib/
$ ./configure
# make && make install |
|
次に、mod_encodingのコンパイルとインストールを行います。以上の作業を終えたらApacheを再起動すれば日本語に対応できるようになっています。
$ ./configure --enable-debug
\
--with-apxs=/usr/local/apache2/bin/apxs
\
--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/local/apache2/modules/ |
|
LoadModule encoding_module
modules/mod_encoding.so
<IfModule mod_encoding.c>
EncodingEngine on
NormalizeUsername on
SetServerEncoding UTF-8
DefaultClientEncoding UTF-8 MSSJIS EUC-JP
AddClientEncoding "cadaver/"
EUC-JP
AddClientEncoding "Microsoft .* DAV
1.1" ASCII MSSJIS UTF-8
AddClientEncoding "Microsoft .* DAV"
UTF-8 MSSJIS
AddClientEncoding "(Microsoft .* DAV
$)" UTF-8 MSSJIS
AddClientEncoding "(Microsoft .* DAV
1.1)" MSSJIS UTF-8
AddClientEncoding "Microsoft-WebDAV*"
UTF-8 MSSJIS
AddClientEncoding "RMA/*" MSSJIS
AddClientEncoding "xdwin9x/" MSSJIS
AddClientEncoding "Mozilla/" EUC-JP
</IfModule> |
|