2006/03/07 (火)
Basic 認証 → Digest 認証
apache 1.3 では experimental な module らしいのですが mod_digest_auth を入れて Digest 認証を利用するようにしました。
$ apt-get source apache $ cd ~/rpm/SOURCES/ $ tar xzvf apache-1.3.33.tar.gz $ cd apache-1.3.33/src/modules/experimental $ /usr/sbin/apxs -c -D DEV_RANDOM mod_auth_digest.c # sudo /usr/sbin/apxs -i mod_auth_digest.so
などとして、モジュールをコンパイル、インストール。んでもって、httpd.conf に以下を付加。
LoadModule digest_auth_module modules/mod_auth_digest.so AddModule mod_auth_digest.c
続いて、認証に使う Digest ファイルを apache 付属の htdigest コマンドで作成する。
$ htdigest -c /foo/bar/hoge.digest tDiary hogehoge Adding password for munehisa in realm tDiary. New password: Re-type new password:
realm (レルム)ってのは領域って意味だそうです。.htaccess の AuthName とあわせておくらしい。 最後に .htaccess を編集して Basic 認証から Digest 認証に切り替える。
<Files "foo.bar"> AuthName tDiary AuthType Digest AuthDigestFile /foo/bar/hoge.digest Require user hogehoge </Files>
などとしてやった。要するに以下の書き換え。
- AuthType Basic → AuthType Digest
- AuthUserFile foo → AuthDigestFile bar
これで、認証時に生パスワードが流れることがなくなったはず。
Firefox では認証ダイアログに差はないのだが、IE 7 Beta では Basic 認証は警告がつき、Digest 認証では警告がでない。これは良いですね。IE 6 だと Basic 認証では何もでずに、Digest 認証だと「セキュアです」と出てきます。どっちがありがたいかは一目瞭然。細かい事ですがセキュアな方向に Microsoft が向かっているというのが体現されています。Firefox も見習うべきだと思うんだ。
| User Agent | Basic 認証ダイアログ | Digest 認証ダイアログ |
| Firefox 1.5 | ||
| IE 7 Beta | ||
| IE 6 |
ちなみに、警告メッセージは以下の通りで
Warning: This server is requesting that your username and password be sent in an insecure manner (basic authentication without a secure connection)
「セキュアじゃない方法でユーザ名とパスワードを送ってるよ」とだけ簡潔な説明。SSL 越しの Basic 認証とかできた気がするので、それだとどうなるんだろう。
- References
- WebDAV時代のセキュリティ対策[後編](2/3) [@IT]
- Apacheでユーザー認証を行うには(Digest認証編) [@IT]
- apache を Digest 認証対応にする
Trac でのユーザ認証
Trac にはロールベースのユーザ管理が実装されていて、そのユーザ認証に HTTP サーバの認証を利用している。
- Trac 側では trac-admin コマンドで Permission を管理する
- httpd 側では各個の認証を管理する(htpasswd なり htdigest なり)
httpd の認証では apache の設定ファイルに以下のように、login への認証をつければ良いようだ。
<Location "/kamui/login"> AuthName kamui AuthType Digest AuthDigestFile foobar Require valid-user </Location>
そして、作ったユーザに Permission を設定してやる。標準でインストールした段階では anonymous しか存在せず、その Permission を表示してみると
$ trac-admin ./ permission list User Action -------------------------- anonymous BROWSER_VIEW anonymous CHANGESET_VIEW anonymous FILE_VIEW anonymous LOG_VIEW anonymous MILESTONE_VIEW anonymous REPORT_SQL_VIEW anonymous REPORT_VIEW anonymous ROADMAP_VIEW anonymous SEARCH_VIEW anonymous TICKET_CREATE anonymous TICKET_MODIFY anonymous TICKET_VIEW anonymous TIMELINE_VIEW anonymous WIKI_CREATE anonymous WIKI_MODIFY anonymous WIKI_VIEW Available actions: BROWSER_VIEW, CHANGESET_VIEW, CONFIG_VIEW, FILE_VIEW, LOG_VIEW, MILESTONE_ADMIN, MILESTONE_CREATE, MILESTONE_DELETE, MILESTONE_MODIFY, MILESTONE_VIEW, REPORT_ADMIN, REPORT_CREATE, REPORT_DELETE, REPORT_MODIFY, REPORT_SQL_VIEW, REPORT_VIEW, ROADMAP_ADMIN, ROADMAP_VIEW, SEARCH_VIEW, TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE, TICKET_MODIFY, TICKET_VIEW, TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, WIKI_CREATE, WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW
のようになる。Available actions に上がっているのが個々の権限で、WIKI_ADMIN や TRAC_ADMIN など XXX_ADMIN はそれに属するすべての権限を持つようになる。特に TRAC_ADMIN の場合、すべての権限を持つこととなる。デフォルトの anonymous の場合、Wiki や Ticket は登録・編集できるが、その他の部分については閲覧しかできないことがわかる。
管理の方法ですが、たとえばユーザ bob にレポートの削除権限を与える場合
$ trac-admin /path/to/projenv permission add bob REPORT_DELETE
とするようだ。グループ単位での管理や「認証を通過したすべてのユーザ」といった便利な機能もあるようです。詳しくはマニュアル参照のこと。
ネットワーク越しの Subversion についてはまださわってないのでまた今度。
- References
- Trac Permissions / アクセス制御とパーミッション
Trac-ja 0.9.4 with Lighttpd + FastCGI on Vinelinux 3.2
研究室では Lighttpd + FastCGI でも動かしてみています。以下のような trac.conf を書いて、lighttpd.conf から include しています。auth や include についてはそれぞれのマニュアルを参照のこと。
fastcgi.server = (
"/trac" => (
"trac" => (
"socket" => "/tmp/trac-fastcgi.sock",
"bin-path" => "/usr/share/trac/cgi-bin/trac.fcgi",
"check-local" => "disable",
"bin-environment" => (
"TRAC_ENV" => "/path/to/env",
"LC_TIME" => "ja_JP.utf8"
)
)
)
)
auth.require += (
"/trac/login" => (
"method" => "digest",
"realm" => "trac",
"require" => "valid-user"
)
)
ただ、問題があって、日付が文字化けしてしまいます。何を設定すれば良いんだろう・・・ema.fsr.jp の Apache 1.3 では英語表記 YY/MM/DD になっているので文字化けもクソもない状態なんですけど。<a href="http://tach.arege.net/trac/wiki/TracJa">TracJa</a> によると<q>LC_TIME にマルチバイト文字が含まれるロケールを使用すると、タイムラインやマイルストーンでの日付入力がエラーになる。 (<a href="http://projects.edgewall.com/trac/ticket/2182">本家チケット 2182</a> にパッチがあります)</q>とのこと。
該当するパッチを適応して、設定を書いてやれば確かに回避できました。
Lighttpd 良さそうなんですが、ここのサーバは変なことしているので(ex. SuExec、ema.fsr.jp と ema.fsr.jp/~munehisa/diary が同じになる)移行するとなると手こずりそうです。いっそのことサーバ全体をディストリビューション変えて1から設定し直したいなぁ。
- References
- Configuration File [lighttpd.net]
- Using Authentication [lighttpd.net]
- Trac with FastCGI / Trac を FastCGI で使用する

