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