=================================================== Apache での認証に Django のユーザデータベースを使う =================================================== :revision-up-to: 17812 (1.4) .. warning:: .. Support for mod_python has been deprecated within Django. At that time, this method of authentication will no longer be provided by Django. The community is welcome to offer its own alternate solutions using WSGI middleware or other approaches. mod_python のサポートは、 Django で廃止予定です。廃止された時点で、 認証用のメソッドは Django で提供されなくなります。コミュニティーとして は、 WSGI ミドルウェアやその他のアプローチを使用した代替案を提案して います。 Apache を使っていると、同期を保ちながら複数の認証データベースを維持するとい う問題によくぶつかります。 Apache の認証を Django の :doc:`認証システム ` で行えば、以下のような処理を実現できます: * 認証ユーザだけを対象に、静的ファイル/メディアファイルを Apache から 直接提供できます。 * 特定のパーミッションを持つ Django ユーザだけに Subversion_ リポジト リへのアクセスを許すよう認証をかけられます。 * mod_dav_ で作成した WebDAV 共有への接続を特定ユーザに許可できます。 .. _Subversion: http://subversion.tigris.org/ .. _mod_dav: http://httpd.apache.org/docs/2.0/mod/mod_dav.html 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