SmallStyle


2005-11-19

_ lighttpdでWebDav

lighttpdでWebDavを利用するときのメモ.WebDavは"Web-based Distributed Authoring and Versioning"の略で,Webサーバ上のファイルやフォルダを管理できる仕様.Apacheを利用したガイドはいろいろあるけどlighttpdで実現する場合にはどんなものかと思って試してみた.

注意点としては,インターネットを経由してファイルを共有する場合は,必ずSSLによる暗号化が必要になってくる.誰でもアクセスできるのも考え物なので,ユーザ認証も必須機能でしょう.

lighttpdではSSLもWebDavも標準でサポートしているので,設定は非常に簡単.ただlighttpdではSSL通信と非SSL通信を同時にサポートすることはできないみたいなので,SSL通信用と非SSL通信用の2種類のデーモンを動かすようにする.

とりあえずlighttpdの導入.debianだと展開したソース上で,

# dpkg-buildpakage

で,.debファイルが作成されるので,作成されたパッケージをインストールすればよし.ちなみに,

deb http://debian.bougyman.com unstable main

を,apt-lineにつっこんでおけばaptでインストールも可能.すでにapacheなどのWebサーバが動いている場合はポートがかぶってしまうので,適当なポート番号を指定して,その他必要な部分を修正して起動してみる.うまく動けばインストール成功.

本題はここから.SSL用に起動スクリプトや設定ファイルなどを作成.

# ln -s /usr/sbin/lighttpd /usr/sbin/lighttpd-ssl
# cp /etc/rc.d/lighttpd /etc/rc.d/lighttpd-ssl
# cp /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd-ssl.conf

コピーした/etc/init.d/lighttpd-sslを編集.

DAEMON=/usr/sbin/lighttpd-ssl
OPTS="-f /etc/lighttpd/lighttpd-ssl.conf"
NAME=lighttpd-ssl
DESC=lighttpd-ssl

設定ファイルを編集.

server.document-root = "/var/www/ssl/"
server.errorlog = "/var/log/lighttpd/error-ssl.log"
accesslog.filename = "/var/log/lighttpd/access-ssl.log"
server.pid-file = "/var/run/lighttpd-ssl.pid"
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/server.pem"

サーバ証明書の作成.

openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes

ここまできたらあとはSSL用のデーモンを起動するだけ.

# /etc/init.d/lighttpd-ssl start

特に問題なく起動できればhttpsでアクセスできるか確認してみる.SSL用と非SSL用のデーモンを同時に起動してどちらもアクセス可能かも確認.確認できたら次はユーザ認証とWebDavの設定.

まず認証については,lighttpdはBasic認証とDigest認証をサポートしている.Basic認証で利用されるパスワードは,暗号化されずにネットーワークを流れ,セキュリティ的に低いものとなります.Digest認証はパスワードの暗号化がされますが,サーバとブラウザの双方が対応している必要があります.代表的なブラウザであるInternet ExplorerやFirefoxなどは対応しているので,特に理由がなければDigest認証を選択する.

まずはパスワードファイルを作成.

$ htdigest -c .htdigest "WebDav" username
Adding password for user in realm WebDav.
New password:
Re-type new password:

パスワードを2回聞かれるので同じパスワードを入力.lighttpdの設定ファイルを編集し,ユーザ認証を設定.server.modulesでmod_authを有効にして,以下を設定.

#### auth module
## read authentification.txt for more info
auth.backend                = "htdigest"

## for htdigest
auth.backend.htdigest.userfile = "/home/hoge/.htdigest"

auth.require = ( "/" =>
   (
      "method"  => "digest",
      "realm"   => "WebDav",
      "require" => "valid-user"
   ),
)

realmはhtdigestファイルを作成したときに指定したもの(ここではWebDav)を記述する.lighttpdのプロセスをいったん再起動して,さっき表示に成功したページに再読み込みしてみる.ユーザ認証のポップアップが表示され,作成したユーザ名とパスワードを入力すると,ページが表示される.残りはWebDavの設定.例としてドキュメントルート下の/dav以下をWebDavとして公開する場合は,設定ファイルに下記のように記述.

$HTTP["url"] =~ "^/dav($|/)" {
   webdav.activate = "enable"
   webdav.is-readonly = "enable"
}

この設定で,/dav以下がWebDavとして公開される.webdav.is-readonlyを"enable"にしているため読み込み専用.ここまできたらひととおりの設定は完了.lighttpdのプロセスを再起動して,IEを起動.メニューからファイル(F)->開く(O)で,https...で始まるWebDavのURLを入力.Webフォルダとして開くにチェックを入れてOKをクリックする.するとネットワークパスワードの入力を促すウィンドウが表示される.先ほど設定したユーザ名とパスワードを入力すると,/dav上のファイルが表示されるはず.webdav.is-readonlyをコメントアウトすればファイルのアップロードも当然できます.日本語ファイル名も大丈夫そうな感じ.XPの場合,マイネットワークの「ネットワークプレースを追加する」からでもアクセス可能なのを確認しました.

_ リファラ spam

もう意味がわからないなぁ….これまではどちらかというとあやしいキーワードがリファラ中に含まれていたのですが,今回のは bbs.php .アクセスすると海外のあやしいサイトに飛ばされます.とりあえず spam 系の User Agent はたいてい "Mozilla/4.76 [en] (Win98; U)" なので,この User Agent は拒否することに方針変換.無駄にキーワードではじくよりもこっちのほうが負荷も低くていいだろう.

RewriteCond %{HTTP_USER_AGENT} Mozilla/4.76\ \[en\]\ \(Win98;\ U\)
RewriteRule ^(.+) - [F,L]

それにしても次から次へとよく考えるもんだ…

本日のツッコミ(全1件) [ツッコミを入れる]
_ TrackBack (2005-11-20 18:19)

http://www.smallstyle.com/20051120.html#p01
SmallStyle
[Diary] lighttpdでWebDav(2)
メモった手順で一部修正.


about me

いろいろと興味を持ったことを書いてます.ちょっとしたことは hb(@smallstyle) on Twitter で書いてます.

Archive

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|12|