Apache での認証に Django のユーザデータベースを使う
| revision-up-to: | 7127 (0.97pre SVN) |
|---|
Apache を使っていると,同期を保ちながら複数の認証データベースを維持するとい う問題によくぶつかります.そこで, Django の 認証システム に対して直接 Apache から認証をかけるよう設定できます.例えば以下のような処理を実現できま す:
- 認証ユーザだけを対象に,静的ファイル/メディアファイルを Apache から 直接提供できます.
- 特定のパーミッションを持つ Django ユーザだけに Subversion リポジト リへのアクセスを許すよう認証をかけられます.
- mod_dav で作成した WebDAV 共有への接続を特定ユーザに許可できます.
Apache の設定
Django の認証データベースを Apache 設定ファイルからチェックするには mod_python の標準の Auth* および Require ディレクティブと共に, PythonAuthenHandler ディレクティブを使います:
<Location /example/>
AuthType Basic
AuthName "example.com"
Require valid-user
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAuthenHandler django.contrib.auth.handlers.modpython
</Location>
Apache 2.2 で認証ハンドラを使う場合
Apache 2.2 を使っている場合には、あと 2 ステップほど作業が必要です。
まず、 mod_auth_basic と mod_authz_user をきちんとロードさせね ばなりません。これらのモジュールは、 Apache のコンパイル時に静的に組み 込まれているか、 LoadModule を使って動的に組み込みます (この囲みの 末尾に例があります) 。
また、 Apache が他の認証用モジュールを使おうとしないように、設定のため のディレクティブを挿入しておく必要があります。ロードした認証モジュール によって、以下のいずれか、または複数のディレクティブが必要です:
AuthBasicAuthoritative Off AuthDefaultAuthoritative Off AuthzLDAPAuthoritative Off AuthzDBMAuthoritative Off AuthzDefaultAuthoritative Off AuthzGroupFileAuthoritative Off AuthzOwnerAuthoritative Off AuthzUserAuthoritative Off
Apache 2.2 での設定全体を、2.0 との違いを太字にして示します:
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authz_user_module modules/mod_authz_user.so
...
<Location /example/>
AuthType Basic
AuthName "example.com"
AuthBasicAuthoritative Off
Require valid-user
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAuthenHandler django.contrib.auth.handlers.modpython
</Location>
デフォルトでは,認証ハンドラは staff のマークのついたメンバだけに /example/ へのアクセスを制限します.この挙動を変更したければ, 以下の PythonOption ディレクティブを使います:
PythonOption 説明 DjangoRequireStaffStatus on に設定すると, "staff" ユーザ (is_staff フラグの立っているユーザ) だけにアクセスを許可します.
デフォルトは on です.
DjangoRequireSuperuserStatus on に設定すると,スーパユーザ (is_superuser フラグの立っている ユーザ) だけにアクセスを許可します.
デフォルトは off です.
DjangoPermissionName アクセスに必要なパーミッションの名前 です.詳しくは カスタムのパーミッション を参照 してください.
デフォルトでは特定のパーミッションを 必要としません.
場合によって, SetEnv が mod_python の設定としてうまく働かない場合があ ります.この原因はよくわかっていません. mod_python が DJANGO_SETTINGS_MODULE をうまく認識できない場合, SetEnv の代りに PythonOption を使ってみて下さい.以下の二つのディレクティブは同じ意味で す:
SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonOption DJANGO_SETTINGS_MODULE mysite.settings