1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
4        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5              This file is generated from xml source: DO NOT EDIT
6        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7      -->
8<title>認証、承認、アクセス制御 - Apache HTTP サーバ</title>
9<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="/style/css/prettify.css" />
12<script src="/style/scripts/prettify.min.js" type="text/javascript">
13</script>
14
15<link href="/images/favicon.ico" rel="shortcut icon" /></head>
16<body id="manual-page"><div id="page-header">
17<p class="menu"><a href="/mod/">モジュール</a> | <a href="/mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">用語</a> | <a href="/sitemap.html">サイトマップ</a></p>
18<p class="apache">Apache HTTP サーバ バージョン 2.4</p>
19<img alt="" src="/images/feather.gif" /></div>
20<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
21<div id="path">
22<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP サーバ</a> &gt; <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> &gt; <a href="../">バージョン 2.4</a> &gt; <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>認証、承認、アクセス制御</h1>
23<div class="toplang">
24<p><span>翻訳済み言語: </span><a href="/en/howto/auth.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
25<a href="/fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
26<a href="/ja/howto/auth.html" title="Japanese">&nbsp;ja&nbsp;</a> |
27<a href="/ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
28<a href="/tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
29</div>
30<div class="outofdate">この日本語訳はすでに古くなっている
31            可能性があります。
32            最近更新された内容を見るには英語版をご覧下さい。
33        </div>
34
35    <p>「認証」とは、誰かが自分は誰であるかを主張した場合に、
36    それを確認するための全過程を指します。「承認」とは、
37    誰かが行きたい場所に行けるように、あるいは欲しい情報を
38    得ることができるようにするための全過程を指します。</p>
39</div>
40<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#related">関連するモジュールとディレクティブ</a></li>
41<li><img alt="" src="/images/down.gif" /> <a href="#introduction">はじめに</a></li>
42<li><img alt="" src="/images/down.gif" /> <a href="#theprerequisites">準備</a></li>
43<li><img alt="" src="/images/down.gif" /> <a href="#gettingitworking">動作させる</a></li>
44<li><img alt="" src="/images/down.gif" /> <a href="#lettingmorethanonepersonin">
45複数の人が入れるようにする</a></li>
46<li><img alt="" src="/images/down.gif" /> <a href="#possibleproblems">起こりえる問題</a></li>
47<li><img alt="" src="/images/down.gif" /> <a href="#dbmdbd">パスワードの保存形式を変える</a></li>
48<li><img alt="" src="/images/down.gif" /> <a href="#multprovider">複数のプロバイダを使用する</a></li>
49<li><img alt="" src="/images/down.gif" /> <a href="#beyond">単純な承認のその先</a></li>
50<li><img alt="" src="/images/down.gif" /> <a href="#moreinformation">追加情報</a></li>
51</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
52<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
53<div class="section">
54<h2><a name="related" id="related">関連するモジュールとディレクティブ</a></h2>
55<p>認証と承認の処理に関連する 3 種類のモジュールがあります。
56それぞれ少なくともひとつずつ必要です。</p>
57
58<ul>
59  <li>認証のタイプ (
60      <code class="directive"><a href="/mod/core.html#authtype">AuthType</a></code> ディレクティブ参照)
61    <ul>
62      <li><code class="module"><a href="/mod/mod_auth_basic.html">mod_auth_basic</a></code></li>
63      <li><code class="module"><a href="/mod/mod_auth_digest.html">mod_auth_digest</a></code></li>
64    </ul>
65  </li>
66  <li>認証プロバイダ (
67  <code class="directive"><a href="/mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>,
68  <code class="directive"><a href="/mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> ディレクティブ参照)
69
70    <ul>
71      <li><code class="module"><a href="/mod/mod_authn_anon.html">mod_authn_anon</a></code></li>
72      <li><code class="module"><a href="/mod/mod_authn_dbd.html">mod_authn_dbd</a></code></li>
73      <li><code class="module"><a href="/mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li>
74      <li><code class="module"><a href="/mod/mod_authn_default.html">mod_authn_default</a></code></li>
75      <li><code class="module"><a href="/mod/mod_authn_file.html">mod_authn_file</a></code></li>
76      <li><code class="module"><a href="/mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>
77    </ul>
78  </li>
79  <li>承認 (
80      <code class="directive"><a href="/mod/core.html#require">Require</a></code> ディレクティブ参照)
81    <ul>
82      <li><code class="module"><a href="/mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>
83      <li><code class="module"><a href="/mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li>
84      <li><code class="module"><a href="/mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li>
85      <li><code class="module"><a href="/mod/mod_authz_default.html">mod_authz_default</a></code></li>
86      <li><code class="module"><a href="/mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li>
87      <li><code class="module"><a href="/mod/mod_authz_host.html">mod_authz_host</a></code></li>
88      <li><code class="module"><a href="/mod/mod_authz_owner.html">mod_authz_owner</a></code></li>
89      <li><code class="module"><a href="/mod/mod_authz_user.html">mod_authz_user</a></code></li>
90    </ul>
91  </li>
92</ul>
93
94  <p>これらのモジュールに加えて、<code class="module"><a href="/mod/mod_authn_core.html">mod_authn_core</a></code>
95  と <code class="module"><a href="/mod/mod_authz_core.html">mod_authz_core</a></code> があります。
96  この 2 つのモジュールは認証モジュールに共通なコアディレクティブを
97  実装しています。</p>
98
99  <p><code class="module"><a href="/mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> は認証プロバイダと承認プロバイダの
100  両方の機能を持っています。
101  <code class="module"><a href="/mod/mod_authz_host.html">mod_authz_host</a></code> はホスト名、IP アドレスや
102  リクエストの特徴に基づいたアクセス制御を行いますが、
103  認証プロバイダのシステムの一部ではありません。
104  mod_access との後方互換性のため、
105  新しいモジュールの <code class="module"><a href="/mod/mod_access_compat.html">mod_access_compat</a></code> があります。</p>
106
107  <p>様々なアクセス制御の行ない方については、
108  <a href="access.html">アクセス制御</a>の方法をご覧ください。</p>
109
110</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
111<div class="section">
112<h2><a name="introduction" id="introduction">はじめに</a></h2>
113    <p>もし機密の情報や、ごくごく少数グループの人向けの情報を
114    ウェブサイトに置くのであれば、この文書に書かれている
115    テクニックを使うことで、そのページを見ている人たちが
116    望みの人たちであることを確実にできるでしょう。</p>
117
118    <p>この文書では、多くの人が採用するであろう、
119    ウェブサイトの一部分を保護する「一般的な」
120    方法についてカバーしています。</p>
121
122    <div class="note"><h3>注意</h3>
123    <p>データが本当に機密なのであれば、認証に加えてさらに
124    <code class="module"><a href="/mod/mod_ssl.html">mod_ssl</a></code> を使うと良いでしょう。</p>
125    </div>
126</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
127<div class="section">
128<h2><a name="theprerequisites" id="theprerequisites">準備</a></h2>
129    <p>この文書で取り扱われるディレクティブは、
130    メインサーバ設定ファイル (普通は 
131    <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code>
132    セクション中) か、あるいはディレクトリ毎の設定ファイル 
133    (<code>.htaccess</code> ファイル) かで用います。</p>
134
135    <p><code>.htaccess</code> ファイルを用いるのであれば、
136    これらのファイルに認証用のディレクティブを置けるように
137    サーバの設定をしないといけないでしょう。これは
138    <code class="directive"><a href="/mod/core.html#allowoverride">AllowOverride</a></code>
139    ディレクティブで可能になります。
140    <code class="directive"><a href="/mod/core.html#allowoverride">AllowOverride</a></code>
141    ディレクティブでは、ディレクトリ毎の設定ファイル中に置くことのできる
142    ディレクティブを、もしあれば、指定します。</p>
143
144    <p>認証について話を進めているので、次のような
145    <code class="directive"><a href="/mod/core.html#allowoverride">AllowOverride</a></code>
146    ディレクティブが必要になるでしょう。</p>
147
148    <div class="example"><p><code>
149      AllowOverride AuthConfig
150    </code></p></div>
151
152    <p>そうでなく、メインサーバ設定ファイルの中に
153    直接置くのであれば、当然ながらそのファイルへの書き込み
154    権限を持っていなければならないでしょう。</p>
155
156    <p>また、どのファイルがどこに保存されているか知るために、
157    サーバのディレクトリ構造について少し知っておく
158    必要があるでしょう。
159    これはそんなに難しくないので、この文書中で
160    ディレクトリ構造について知っておく必要がある場面では、
161    明らかになるようにします。</p>
162
163    <p><code class="module"><a href="/mod/mod_authn_core.html">mod_authn_core</a></code> と <code class="module"><a href="/mod/mod_authz_core.html">mod_authz_core</a></code> 
164    の両方が httpd バイナリに静的に組み込み済みであるか、httpd.conf 
165    設定ファイルで動的にロードされるかして、httpd に組み込まれていなければ
166    なりません。これらの二つのモジュールは、設定ファイルのなかで非常に
167    重要でウェブサーバの認証と承認で使用されるコアディレクティブと
168    その機能を提供しています。</p>
169</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
170<div class="section">
171<h2><a name="gettingitworking" id="gettingitworking">動作させる</a></h2>
172    <p>では、サーバ上のあるディレクトリをパスワードで保護する
173    基本手順を示します。</p>
174
175    <p>まずはじめに、パスワードファイルを作ります。
176    どの認証プロバイダを使うかによって、パスワードファイル生成の手順は
177    大きく異なります。ここでの例では、手始めにテキストパスワードファイルを
178    使います。</p>
179
180    <p>このパスワードファイルは、ウェブからアクセスできる場所に
181    置くべきではありません。他の人がパスワードファイルを
182    ダウンロードできないようにするためです。例えば、
183    <code>/usr/local/apache/htdocs</code> でドキュメントを
184    提供しているのであれば、パスワードファイルは
185    <code>/usr/local/apache/passwd</code>
186    などに置いた方が良いでしょう。</p>
187
188    <p>ファイルを作るためには、Apache 付属の <code class="program"><a href="/programs/htpasswd.html">htpasswd</a></code> 
189    を使います。このコマンドは Apache をどこにインストールしようとも、
190    インストールディレクトリの <code>bin</code> 
191    ディレクトリ以下に置かれます。サードバーティ製のパッケージで
192    インストールした場合は、実行パスの中で見つかるでしょう。</p>
193    
194    <p>ファイルを作るには、次のようにタイプしてください。</p>
195
196    <div class="example"><p><code>
197      htpasswd -c /usr/local/apache/passwd/passwords rbowen
198    </code></p></div>
199
200    <p><code class="program"><a href="/programs/htpasswd.html">htpasswd</a></code> は、パスワードを要求し、その後
201    確認のためにもう一度入力するように要求してきます。</p>
202
203    <div class="example"><p><code>
204      # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />
205      New password: mypassword<br />
206      Re-type new password: mypassword<br />
207      Adding password for user rbowen
208    </code></p></div>
209
210    <p>もし <code class="program"><a href="/programs/htpasswd.html">htpasswd</a></code> がパスの中に入っていない場合は、
211    もちろん、実行するためにプログラムまでのフルパスを
212    タイプする必要があります。デフォルトのインストール状態であれば、
213    <code>/usr/local/apache/bin/htpasswd</code>
214    にプログラムが置かれています。</p>
215
216    <p>次に、サーバがパスワードを要求するように設定して、
217    どのユーザがアクセスを許されているかをサーバに知らせなければ
218    なりません。 <code>httpd.conf</code> を編集するか
219    <code>.htaccess</code> ファイルを使用するかで
220    設定します。例えば、ディレクトリ
221    <code>/usr/local/apache/htdocs/secret</code>
222    を保護したい場合は、
223    <code>/usr/local/apache/htdocs/secret/.htaccess</code>
224httpd.conf 中の &lt;Directory
225    /usr/local/apache/htdocs/secret&gt; セクションに
226    配置して、次のディレクティブを使うことができます。</p>
227
228    <div class="example"><p><code>
229      AuthType Basic<br />
230      AuthName "Restricted Files"<br />
231      # (Following line optional)<br />
232      AuthBasicProvider file<br />
233      AuthUserFile /usr/local/apache/passwd/passwords<br />
234      Require user rbowen
235    </code></p></div>
236
237    <p>個々のディレクティブについて見てみましょう。
238    <code class="directive"><a href="/mod/core.html#authtype">AuthType</a></code>
239    ディレクティブはどういう認証方法でユーザの認証を行うかを
240    選択します。最も一般的な方法は <code>Basic</code>
241    で、これは <code class="module"><a href="/mod/mod_auth_basic.html">mod_auth_basic</a></code>
242    で実装されています。しかしながら、
243    これは気を付けるべき重要なポイントなのですが、
244    Basic 認証はクライアントからサーバへ、
245    パスワードを暗号化せずに送ります。ですからこの方法は、
246    <code class="module"><a href="/mod/mod_ssl.html">mod_ssl</a></code> と組み合わせない状態では、
247    特に機密性の高いデータに対しては用いるべきでは
248    ありません。 Apache ではもう一つ別の認証方法:
249    <code>AuthType Digest</code> をサポートしています。
250    この方法は <code class="module"><a href="/mod/mod_auth_digest.html">mod_auth_digest</a></code>
251    で実装されていて、もっと安全です。
252    最近のクライアントは Digest
253    認証をサポートしているようです。</p>
254
255    <p><code class="directive"><a href="/mod/core.html#authname">AuthName</a></code>
256    ディレクティブでは、認証に使う <dfn>Realm</dfn> (訳注: 領域)
257    を設定します。Realm は大きく分けて二つの機能を提供します。
258    一つ目は、クライアントがパスワードダイアログボックスの
259    一部としてユーザにこの情報をよく提示する、というものです。
260    二つ目には、クライアントが与えられた認証領域に対してどのパスワードを
261    送信すれば良いのかを決定するために使われる、という機能です。</p>
262
263    <p>例えば、<code>"Restricted Files"</code> 領域中で
264    一度認証されれば、同一サーバ上で <code>"Restricted Files"</code>
265    Realm としてマークされたどんな領域でも、クライアントは
266    自動的に同じパスワードを使おうと試みます。
267    このおかげで、複数の制限領域に同じ realm を共有させて、
268    ユーザがパスワードを何度も要求される事態を
269    防ぐことができます。もちろん、セキュリティ上の理由から、
270    サーバのホスト名が変わればいつでも必ず、
271    クライアントは再びパスワードを尋ねる必要があります。</p>
272
273    <p><code class="directive"><a href="/mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>
274    はデフォルト値が <code>file</code> なので、今回の場合は無くても構いません。
275    <code class="module"><a href="/mod/mod_authn_dbm.html">mod_authn_dbm</a></code> や <code class="module"><a href="/mod/mod_authn_dbd.html">mod_authn_dbd</a></code>
276    といった他のモジュールを使う場合には必要になります。
277    </p>
278
279    <p><code class="directive"><a href="/mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
280    ディレクティブは <code class="program"><a href="/programs/htpasswd.html">htpasswd</a></code> で作った
281    パスワードファイルへのパスを設定します。
282    ユーザ数が多い場合は、リクエスト毎のユーザの認証のための
283    プレーンテキストの探索が非常に遅くなることがあります。
284    Apache ではユーザ情報を高速なデータベースファイルに
285    保管することもできます。
286    <code class="module"><a href="/mod/mod_authn_dbm.html">mod_authn_dbm</a></code> モジュールが
287    <code class="directive"><a href="/mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>
288    ディレクティブを提供します。これらのファイルは <code class="program"><a href="/programs/dbmmanage.html">dbmmanage</a></code>
289    プログラムで作成したり操作したりできます。
290    <a href="http://modules.apache.org/">Apache 
291    モジュールデータベース</a>中にあるサードパーティー製の
292    モジュールで、その他多くのタイプの認証オプションが
293    利用可能です。</p>
294
295    <p>最後に、<code class="directive"><a href="/mod/core.html#require">Require</a></code>
296    ディレクティブが、サーバのこの領域にアクセスできるユーザを
297    指定することによって、プロセスの承認部分を提供します。
298    次のセクションでは、<code class="directive"><a href="/mod/core.html#require">Require</a></code>
299    ディレクティブの様々な用法について述べます。</p>
300</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
301<div class="section">
302<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">
303複数の人が入れるようにする</a></h2>
304    <p>上記のディレクティブは、ただ一人 (具体的にはユーザ名
305    <code>rbowen</code> の誰か) がディレクトリに
306    入れるようにします。多くの場合は、複数の人が
307    入れるようにしたいでしょう。ここで
308    <code class="directive"><a href="/mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>
309    の登場です。</p>
310
311    <p>もし複数の人が入れるようにしたいのであれば、
312    グループに属するユーザの一覧の入っている、グループ名のついた
313    グループファイルを作る必要があります。このファイルの
314    書式はきわめて単純で、お好みのエディタで生成できます。
315    ファイルの中身は次のようなものです。</p>
316
317   <div class="example"><p><code>
318     GroupName: rbowen dpitts sungo rshersey
319   </code></p></div>
320
321    <p>一行にスペース区切りで、グループに所属するメンバーの
322    一覧をならべるだけです。</p>
323
324    <p>既に存在するパスワードファイルにユーザを加える場合は、
325    次のようにタイプしてください。</p>
326
327    <div class="example"><p><code>
328      htpasswd /usr/local/apache/passwd/passwords dpitts
329    </code></p></div>
330
331    <p>以前と同じ応答が返されますが、新しいファイルを
332    作るのではなく、既にあるファイルに追加されています。
333    (新しいパスワードファイルを作るには <code>-c</code>
334    を使います。)</p>
335
336    <p>ここで次のようにして <code>.htaccess</code> ファイルを
337    修正する必要があります。</p>
338
339    <div class="example"><p><code>
340      AuthType Basic<br />
341      AuthName "By Invitation Only"<br />
342      # Optional line:<br />
343      AuthBasicProvider file<br />
344      AuthUserFile /usr/local/apache/passwd/passwords<br />
345      AuthGroupFile /usr/local/apache/passwd/groups<br />
346      Require group GroupName
347    </code></p></div>
348
349    <p>これで、グループ <code>GroupName</code> にリストされていて、
350    <code>password</code> ファイルにエントリがある人は、
351    正しいパスワードをタイプすれば入ることができるでしょう。</p>
352
353    <p>もっと特定せずに複数のユーザが入れるようにする、
354    もう一つの方法があります。グループファイルを作るのではなく、
355    次のディレクティブを使えばできます。</p>
356
357    <div class="example"><p><code>
358      Require valid-user
359    </code></p></div>
360
361    <p><code>require user rbowen</code> 行でなく、上記を使うと、
362    パスワードファイルにリストされている人であれば誰でも
363    許可されます。
364    単にパスワードファイルをグループ毎に分けておくことで、
365    グループのような振る舞いをさせることもできます。
366    このアプローチの利点は、Apache は二つではなく、
367    ただ一つのファイルだけを検査すればよいという点です。
368    欠点は、たくさんのパスワードファイルを管理して、その中から
369    <code class="directive"><a href="/mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
370    ディレクティブに正しいファイルを参照させなければならない点です。</p>
371</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
372<div class="section">
373<h2><a name="possibleproblems" id="possibleproblems">起こりえる問題</a></h2>
374    <p>Basic 認証が指定されている場合は、
375    サーバにドキュメントをリクエストする度に
376    ユーザ名とパスワードを検査しなければなりません。
377    これは同じページ、ページにある全ての画像を
378    リロードする場合であっても該当します
379     (もし画像も保護されたディレクトリから来るのであれば) 。
380    予想される通り、これは動作を多少遅くします。
381    遅くなる程度はパスワードファイルの大きさと比例しますが、
382    これは、ファイルを開いてあなたの名前を発見するまで
383    ユーザ名のリストを読まなければならないからです。
384    そして、ページがロードされる度にこれを行わなければ
385    なりません。</p>
386
387    <p>結論としては、一つのパスワードファイルに置くことのできる
388    ユーザ数には実質的な限界があります。
389    この限界はサーバマシンの性能に依存して変わりますが、
390    数百のエントリを越えたあたりから速度低下が見られると予期されています。
391    その時は他の認証方法を考慮に入れた方が良いでしょう。</p>
392</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
393<div class="section">
394<h2><a name="dbmdbd" id="dbmdbd">パスワードの保存形式を変える</a></h2>
395
396    <p>プレーンテキストでパスワードを保存する方法には上記の問題があり、
397    データベースのような別の場所にパスワードを保存したいと思う
398    かもしれません。</p>
399
400    <p><code class="module"><a href="/mod/mod_authn_dbm.html">mod_authn_dbm</a></code> と <code class="module"><a href="/mod/mod_authn_dbd.html">mod_authn_dbd</a></code>
401    を使うと、それができるようになります。
402    <code class="directive"><a href="/mod/mod_auth_basic.html#authbasicsource">AuthBasicSource</a></code>
403    で file の代わりに、<code>dbm</code> あるいは <code>dbd</code>
404    を格納形式として選べます。</p>
405
406    <p>テキストファイルの代わりに dbm ファイルを選択する場合は、たとえば次のようにします。</p>
407
408    <div class="example"><p><code>
409    &lt;Directory /www/docs/private&gt;<br />
410    AuthName "Private"<br />
411    AuthType Basic<br />
412    AuthBasicProvider dbm<br />
413    AuthDBMUserFile /www/passwords/passwd.dbm<br />
414    Require valid-user<br />
415    &lt;/Directory&gt;
416    </code></p></div>
417
418    <p>この他のオプションも存在します。詳細に関しては
419    <code class="module"><a href="/mod/mod_authn_dbm.html">mod_authn_dbm</a></code> のドキュメントをご覧ください。</p>
420</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
421<div class="section">
422<h2><a name="multprovider" id="multprovider">複数のプロバイダを使用する</a></h2>
423
424    <p>認証承認アーキテクチャに基づいている新しいプロバイダを使うと、
425    認証承認の方法をひとつに縛る必要がなくなります。
426    いくつものプロバイダを組み合わせて、自分の望みの挙動にできます。
427    次の例では file 認証プロバイダと ldap 認証プロバイダを
428    組み合わせています。</p>
429
430    <div class="example"><p><code>
431    &lt;Directory /www/docs/private&gt;<br />
432    AuthName "Private"<br />
433    AuthType Basic<br />
434    AuthBasicProvider file ldap<br />
435    AuthUserFile /usr/local/apache/passwd/passwords<br />
436    AuthLDAPURL ldap://ldaphost/o=yourorg<br />
437    Require valid-user
438    </code></p></div>
439
440    <p>この例では、まず file プロバイダがユーザ認証を試みます。
441    認証できなかった場合には、ldap プロバイダが呼び出されます。
442    組織で複数の認証格納方法を使っている際などに、
443    この方法を使って認証のスコープを拡大できます。
444    もうひとつのシナリオは、ひとつの認証タイプと異なる承認を
445    組み合わせる方法でしょう。たとえば、パスワードファイルで認証して、
446    ldap ディレクトリで承認を行うといった場合です。</p>
447
448    <p>認証プロバイダを複数実装できるように、承認方法も複数使用できます。
449    この例では file グループ承認と ldap グループ承認を使っています。</p>
450
451    <div class="example"><p><code>
452    &lt;Directory /www/docs/private&gt;<br />
453    AuthName "Private"<br />
454    AuthType Basic<br />
455    AuthBasicProvider file<br />
456    AuthUserFile /usr/local/apache/passwd/passwords<br />
457    AuthLDAPURL ldap://ldaphost/o=yourorg
458    AuthGroupFile /usr/local/apache/passwd/groups<br />
459    Require group GroupName<br />
460    Require ldap-group cn=mygroup,o=yourorg
461    </code></p></div>
462
463    <p>承認をより細かく制御したい場合は、
464    <code class="directive"><a href="/mod/mod_authz_core.html#&lt;satisfyall&gt;">&lt;SatisfyAll&gt;</a></code> と
465    <code class="directive"><a href="/mod/mod_authz_core.html#&lt;satisfyone&gt;">&lt;SatisfyOne&gt;</a></code> 
466    ディレクティブを使って AND/OR ロジックで指定し、設定ファイルで
467    承認の処理順番の制御ができるようになっています。
468    これらのディレクティブをどのように使えるか、網羅した例をご覧ください。</p>
469
470</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
471<div class="section">
472<h2><a name="beyond" id="beyond">単純な承認のその先</a></h2>
473
474    <p>承認の方法は、ひとつのデータソースを見て一回だけチェックするのと比べて、
475    ずっと多彩な適用方法ができます。
476    承認処理の適用順序や制御、選択ができるようになりました。</p>
477
478    <h3><a name="authandororder" id="authandororder">AND/OR ロジックの適用と順序付け</a></h3>
479        <p>承認がどのような順序で適用されているか、また、それをどのように制御するかは、
480        これまで混乱を招いていました。
481        Apache 2.2 ではプロバイダベースの認証メカニズムが導入され、
482        承認処理から認証処理とサポート機能とが切り分けられました。
483        これによるひとつの効果として、
484        認証モジュールのロード順やモジュール自体の順序に依存することなく、
485        指定した順番で認証プロバイダが呼び出せるよう、
486	設定できるようになりました。
487        このプロバイダメカニズムは承認処理でも導入されています。
488        つまり、<code class="directive"><a href="/mod/mod_authz_core.html#require">Require</a></code>
489        ディレクティブは単にどの承認手法が使われるかを指定するだけではなく、
490        それらの呼び出し順序も指定できるようになりました。
491        複数の承認手法があるとき、その呼び出し順は、設定ファイルの
492        <code class="directive"><a href="/mod/mod_authz_core.html#require">Require</a></code> ディレクティブ中で
493        現れた順序と同じになります。</p>
494
495        <p>追加で導入された
496        <code class="directive"><a href="/mod/mod_authz_core.html#&lt;satisfyall&gt;">&lt;SatisfyAll&gt;</a></code>,
497        <code class="directive"><a href="/mod/mod_authz_core.html#&lt;satisfyone&gt;">&lt;SatisfyOne&gt;</a></code>
498        ディレクティブを使って、承認手法がいつ呼び出され、アクセスが許可された際に
499        どの手続きが適用されるか指定することができます。
500        たとえば、次の承認ブロックのロジックを見てみましょう:</p>
501
502        <div class="example"><p><code>
503          # if ((user == "John") ||<br />
504          # &nbsp;&nbsp; ((Group == "admin")<br />
505          # &nbsp; &nbsp; &amp;&amp; (ldap-group &lt;ldap-object&gt; contains auth'ed_user)<br />
506          # &nbsp; &nbsp; &amp;&amp; ((ldap-attribute dept == "sales")<br />
507          # &nbsp; &nbsp; &nbsp; &nbsp; || (file-group contains auth'ed_user))))<br />
508          # then<br />
509          # &nbsp; auth_granted<br />
510          # else<br />
511          # &nbsp; auth_denied<br />
512          #<br />
513          &lt;Directory /www/mydocs&gt;<br />
514          <span class="indent">
515            Authname ...<br />
516            AuthBasicProvider ...<br />
517            ...<br />
518            Require user John<br />
519            &lt;SatisfyAll&gt;<br />
520            <span class="indent">
521              Require Group admins<br />
522              Require ldap-group cn=mygroup,o=foo<br />
523              &lt;SatisfyOne&gt;<br />
524              <span class="indent">
525                Require ldap-attribute dept="sales"<br />
526                Require file-group<br />
527              </span>
528              &lt;/SatisfyOne&gt;<br />
529            </span>
530            &lt;/SatisfyAll&gt;<br />
531          </span>
532          &lt;/Directory&gt;
533        </code></p></div>
534
535        <p>デフォルトでは <code class="directive"><a href="/mod/mod_authz_core.html#require">Require</a></code>
536        ディレクティブは OR 操作として扱われます。つまり、もし指定した承認手法の
537        ひとつでも合格すれば、承認されます。
538        <code class="directive"><a href="/mod/mod_authz_core.html#require">Require</a></code> ディレクティブのセットを
539        ひとつの <code class="directive"><a href="/mod/mod_authz_core.html#&lt;satisfyall&gt;">&lt;SatisfyAll&gt;</a></code>
540        ブロックで囲むとAND 操作となり、全ての承認手法で合格しなければ許可されません。</p>
541
542    
543
544    <h3><a name="reqaccessctrl" id="reqaccessctrl">アクセス制御における Require と Reject の使い方</a></h3>
545        <p>ユーザ名とパスワードによる認証は全体の一部分でしかありません。
546        誰がアクセスしてきたかといった情報以外の条件を使いたい、
547	とよく思うことでしょう。
548        たとえば、どこからアクセスしてきているか、といった具合です。</p>
549    
550        <p>承認プロバイダ <code class="directive"><a href="/mod/mod_authz_host.html#all">all</a></code>,
551        <code class="directive"><a href="/mod/mod_authz_host.html#env">env</a></code>, 
552        <code class="directive"><a href="/mod/mod_authz_host.html#host">host</a></code>,
553        <code class="directive"><a href="/mod/mod_authz_host.html#ip">ip</a></code>
554        を使うと、リクエストを送信してきているマシンのホスト名や IP アドレス
555        といった、ホストベースでのアクセス制御ができます。</p>
556    
557        <p>これらプロバイダの扱いは
558        <code class="directive"><a href="/mod/mod_authz_core.html#require">Require</a></code> や
559        <code class="directive"><a href="/mod/mod_authz_core.html#reject">Reject</a></code> で
560        指定されます。これらのディレクティブは承認プロバイダを登録し、
561        リクエスト処理の承認段階で呼び出されます。たとえば:</p>
562    
563        <div class="example"><p><code>
564          Require ip <var>address</var>
565        </code></p></div>
566    
567        <p>ここで、<var>address</var> は IP アドレス (あるいは IP アドレスの
568        一部) か : </p>
569    
570        <div class="example"><p><code>
571          Require host <var>domain_name</var>
572        </code></p></div>
573    
574        <p>ここで <var>domain_name</var> は FQDN (あるいはドメイン名の一部)
575        で、必要であれば複数のアドレスやドメイン名を書くことができます。</p>
576    
577        <p>たとえば、スパムメッセージを送信してくる誰かを拒否したい場合、
578        次のようになります : </p>
579    
580        <div class="example"><p><code>
581          Reject ip 10.252.46.165
582        </code></p></div>
583    
584        <p>このディレクティブが有効な範囲のコンテンツに対しては、
585        そのアドレスからアクセスしてきても見ることができません。
586        もしマシン名がわかっていて IP アドレスよりもそちらで
587        指定したいのであれば、そのマシン名が使えます。</p>
588    
589        <div class="example"><p><code>
590          Reject host <var>host.example.com</var>
591        </code></p></div>
592    
593        <p>また、特定のドメインからのアクセス全てをブロックしたい場合は、
594        IP アドレスの一部や、ドメイン名が指定できます :</p>
595    
596        <div class="example"><p><code>
597          &lt;SatisfyAll&gt;<br />
598          <span class="indent">
599            Reject ip <var>192.168.205</var><br />
600            Reject host <var>phishers.example.com</var> <var>moreidiots.example</var><br />           Reject host ke<br />
601          </span>
602          &lt;/SatisfyAll&gt;
603        </code></p></div>
604    
605        <p><code class="directive"><a href="/mod/mod_authz_host.html#reject">Reject</a></code> ディレクティブを
606        <code class="directive"><a href="/mod/mod_authz_core.html#&lt;satisfyall&gt;">&lt;SatisfyAll&gt;</a></code> ブロックの中で使うと、
607        許可したいグループにのみアクセスができるように確認できます。</p>
608    
609        <p>上記の例では <code class="directive"><a href="/mod/mod_authz_core.html#&lt;satisfyall&gt;">&lt;SatisfyAll&gt;</a></code>
610        を使って、アクセスに合格する前段階で、全ての 
611        <code class="directive"><a href="/mod/mod_authz_host.html#reject">Reject</a></code> ディレクティブが
612        満たされていることを確認しています。</p>
613    
614    
615
616    <h3><a name="filesystem" id="filesystem">アクセス制御の後方互換性</a></h3>
617        <p>認証プロバイダベースの機構があるため、以前使用されていたディレクティブ
618        <code class="directive"><a href="/mod/mod_access_compat.html#order">Order</a></code>,
619        <code class="directive"><a href="/mod/mod_access_compat.html#allow">Allow</a></code>,
620        <code class="directive"><a href="/mod/mod_access_compat.html#deny">Deny</a></code>,
621        <code class="directive"><a href="/mod/mod_access_compat.html#satisfy">Satisfy</a></code>
622        は必要なくなりました。
623        とはいうものの、古い設定ファイルでの後方互換性を提供するため、
624        これらのディレクティブは <code class="module"><a href="/mod/mod_access_compat.html">mod_access_compat</a></code> モジュールに移されました。</p>
625
626        <p>これらのディレクティブの抱えていた問題のひとつに、承認の設定行とアクセス制御の設定行の
627        関係がとてもあいまいだったことが挙げられます。
628        <code class="directive"><a href="/mod/mod_access_compat.html#satisfy">Satisfy</a></code> ディレクティブは
629        リクエスト処理中でそれ自身を呼び出すことによって、これらの 2 つの処理段階を結びつけようとします。
630        現在は、これらのディレクティブは <code class="module"><a href="/mod/mod_access_compat.html">mod_access_compat</a></code> に移動し、
631        新しい認証ディレクティブと古いアクセス制御ディレクティブを混ぜて使うことは
632        難しくなっています。この問題のため、<code class="module"><a href="/mod/mod_authz_default.html">mod_authz_default</a></code> モジュールを
633        ロードすることがとても重要で、必須になっています。
634        <code class="module"><a href="/mod/mod_authz_default.html">mod_authz_default</a></code> モジュールの主な目的は、どの承認プロバイダで
635        処理されなかった承認リクエストを受けることにあります。
636        しかし、古いアクセス制御ディレクティブが用いられた場合には、
637        アクセス制御と承認を結びつけて、すべての処理段階の出力結果を見てアクセスに合格するかを決めています。
638        ですから、古いディレクティブがうまく動作しない場合は、
639        <code class="module"><a href="/mod/mod_authz_default.html">mod_authz_default</a></code> がロードされていないからかもしれない、
640        と疑ってみてください。</p>
641
642    
643
644</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
645<div class="section">
646<h2><a name="moreinformation" id="moreinformation">追加情報</a></h2>
647    <p>これら全てがどのように動作するかについて
648    もっと多くの情報が書かれている <code class="module"><a href="/mod/mod_auth_basic.html">mod_auth_basic</a></code> と
649    <code class="module"><a href="/mod/mod_authz_host.html">mod_authz_host</a></code>
650    の文書も読むとよいでしょう。
651    <code class="directive"><a href="/mod/mod_authn_core.html#&lt;authnprovideralias&gt;">&lt;AuthnProviderAlias&gt;</a></code>
652    ディレクティブを使うと、特定の認証設定が簡単に書けるようになります。</p>
653
654    <p><a href="access.html">アクセス制御</a>の方法も、
655    関連するトピックがたくさん記載されていますので、ご覧ください。</p>
656
657</div></div>
658<div class="bottomlang">
659<p><span>翻訳済み言語: </span><a href="/en/howto/auth.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
660<a href="/fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
661<a href="/ja/howto/auth.html" title="Japanese">&nbsp;ja&nbsp;</a> |
662<a href="/ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
663<a href="/tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
664</div><div class="top"><a href="#page-header"><img src="/images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
665<script type="text/javascript"><!--//--><![CDATA[//><!--
666var comments_shortname = 'httpd';
667var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/auth.html';
668(function(w, d) {
669    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
670        d.write('<div id="comments_thread"><\/div>');
671        var s = d.createElement('script');
672        s.type = 'text/javascript';
673        s.async = true;
674        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
675        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
676    }
677    else { 
678        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
679    }
680})(window, document);
681//--><!]]></script></div><div id="footer">
682<p class="apache">Copyright 2014 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p>
683<p class="menu"><a href="/mod/">モジュール</a> | <a href="/mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">用語</a> | <a href="/sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
684if (typeof(prettyPrint) !== 'undefined') {
685    prettyPrint();
686}
687//--><!]]></script>
688</body></html>