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="<-" alt="<-" src="/images/left.gif" /></a></div> 21<div id="path"> 22<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="../">バージョン 2.4</a> > <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"> en </a> | 25<a href="/fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | 26<a href="/ja/howto/auth.html" title="Japanese"> ja </a> | 27<a href="/ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | 28<a href="/tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </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"><Directory></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> 224 か httpd.conf 中の <Directory 225 /usr/local/apache/htdocs/secret> セクションに 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 <Directory /www/docs/private><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 </Directory> 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 <Directory /www/docs/private><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 <Directory /www/docs/private><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#<satisfyall>"><SatisfyAll></a></code> と 465 <code class="directive"><a href="/mod/mod_authz_core.html#<satisfyone>"><SatisfyOne></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#<satisfyall>"><SatisfyAll></a></code>, 497 <code class="directive"><a href="/mod/mod_authz_core.html#<satisfyone>"><SatisfyOne></a></code> 498 ディレクティブを使って、承認手法がいつ呼び出され、アクセスが許可された際に 499 どの手続きが適用されるか指定することができます。 500 たとえば、次の承認ブロックのロジックを見てみましょう:</p> 501 502 <div class="example"><p><code> 503 # if ((user == "John") ||<br /> 504 # ((Group == "admin")<br /> 505 # && (ldap-group <ldap-object> contains auth'ed_user)<br /> 506 # && ((ldap-attribute dept == "sales")<br /> 507 # || (file-group contains auth'ed_user))))<br /> 508 # then<br /> 509 # auth_granted<br /> 510 # else<br /> 511 # auth_denied<br /> 512 #<br /> 513 <Directory /www/mydocs><br /> 514 <span class="indent"> 515 Authname ...<br /> 516 AuthBasicProvider ...<br /> 517 ...<br /> 518 Require user John<br /> 519 <SatisfyAll><br /> 520 <span class="indent"> 521 Require Group admins<br /> 522 Require ldap-group cn=mygroup,o=foo<br /> 523 <SatisfyOne><br /> 524 <span class="indent"> 525 Require ldap-attribute dept="sales"<br /> 526 Require file-group<br /> 527 </span> 528 </SatisfyOne><br /> 529 </span> 530 </SatisfyAll><br /> 531 </span> 532 </Directory> 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#<satisfyall>"><SatisfyAll></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 <SatisfyAll><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 </SatisfyAll> 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#<satisfyall>"><SatisfyAll></a></code> ブロックの中で使うと、 607 許可したいグループにのみアクセスができるように確認できます。</p> 608 609 <p>上記の例では <code class="directive"><a href="/mod/mod_authz_core.html#<satisfyall>"><SatisfyAll></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#<authnprovideralias>"><AuthnProviderAlias></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"> en </a> | 660<a href="/fr/howto/auth.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | 661<a href="/ja/howto/auth.html" title="Japanese"> ja </a> | 662<a href="/ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | 663<a href="/tr/howto/auth.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </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&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>