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]
それにしても次から次へとよく考えるもんだ…
http://www.smallstyle.com/20051120.html#p01
SmallStyle
[Diary] lighttpdでWebDav(2)
メモった手順で一部修正.