«前の日記(2006年03月06日) 最新 次の日記(2006年03月08日)» 編集

ema log


2006年03月07日 [長年日記]

_ [Linux][apache] 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 認証では警告がでない。これは良いですね。

User AgentBasic 認証ダイアログ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 認証対応にする

_ [Linux][trac] 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 / アクセス制御とパーミッション

_ [Linux][lighttpd][trac] 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 になっているので文字化けもクソもない状態なんですけど。

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 で使用する