<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>認証、承認、アクセス制御 - Apache HTTP サーバ</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p>
<p class="apache">Apache HTTP サーバ バージョン 2.2</p>
<img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<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.2</a> &gt; <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>認証、承認、アクセス制御</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../ja/howto/auth.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
<div class="outofdate">This translation may be out of date. Check the
            English version for recent changes.</div>

    <p>「認証」とは、誰かが自分は誰であるかを主張した場合に、
    それを確認するための全過程を指します。「承認」とは、
    誰かが行きたい場所に行けるように、あるいは欲しい情報を
    得ることができるようにするための全過程を指します。</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">関連するモジュールとディレクティブ</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#introduction">はじめに</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">準備</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">動作させる</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin">
複数の人が入れるようにする</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">起こりえる問題</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#whatotherneatstuffcanido">もっと巧みに制御できない
?</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">追加情報</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="related" id="related">関連するモジュールとディレクティブ</a></h2>
    <table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/core.html#require">Require</a></code></li></ul></td></tr></table>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="introduction" id="introduction">はじめに</a></h2>
    <p>もし機密の情報や、ごくごく少数グループの人向けの情報を
    ウェブサイトに置くのであれば、この文書に書かれている
    テクニックを使うことで、そのページを見ている人たちが
    望みの人たちであることを確実にできるでしょう。</p>

    <p>この文書では、多くの人が採用するであろう、
    ウェブサイトの一部分を保護する「一般的な」
    方法についてカバーしています。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="theprerequisites" id="theprerequisites">準備</a></h2>
    <p>この文書で取り扱われるディレクティブは、
    メインサーバ設定ファイル (普通は 
    <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
    セクション中) か、あるいはディレクトリ毎の設定ファイル 
    (<code>.htaccess</code> ファイル) かで用います。</p>

    <p><code>.htaccess</code> ファイルを用いるのであれば、
    これらのファイルに認証用のディレクティブを置けるように
    サーバの設定をしないといけないでしょう。これは
    <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
    ディレクティブで可能になります。
    <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
    ディレクティブでは、ディレクトリ毎の設定ファイル中に置くことのできる
    ディレクティブを、もしあれば、指定します。</p>

    <p>認証について話を進めているので、次のような
    <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
    ディレクティブが必要になるでしょう。</p>

    <div class="example"><p><code>
      AllowOverride AuthConfig
    </code></p></div>

    <p>そうでなく、メインサーバ設定ファイルの中に
    直接置くのであれば、当然ながらそのファイルへの書き込み
    権限を持っていなければならないでしょう。</p>

    <p>また、どのファイルがどこに保存されているか知るために、
    サーバのディレクトリ構造について少し知っておく
    必要があるでしょう。
    これはそんなに難しくないので、この文書中で
    ディレクトリ構造について知っておく必要がある場面では、
    明らかになるようにします。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="gettingitworking" id="gettingitworking">動作させる</a></h2>
    <p>では、サーバ上のあるディレクトリをパスワードで保護する
    基本手順を示します。</p>

    <p>パスワードファイルを作る必要があります。
    このファイルは、ウェブからアクセスできる場所に
    置くべきではありません。他の人がパスワードファイルを
    ダウンロードできないようにするためです。例えば、
    <code>/usr/local/apache/htdocs</code> でドキュメントを
    提供しているのであれば、パスワードファイルは
    <code>/usr/local/apache/passwd</code>
    などに置いた方が良いでしょう。</p>

    <p>ファイルを作るためには、Apache 付属の <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> 
    を使います。このコマンドは Apache をどこにインストールしようとも、
    インストールディレクトリの <code>bin</code> 
    ディレクトリ以下に置かれます。ファイルを作るには、次のように
    タイプしてください。</p>

    <div class="example"><p><code>
      htpasswd -c /usr/local/apache/passwd/passwords rbowen
    </code></p></div>

    <p><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> は、パスワードを要求し、その後
    確認のためにもう一度入力するように要求してきます。</p>

    <div class="example"><p><code>
      # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />
      New password: mypassword<br />
      Re-type new password: mypassword<br />
      Adding password for user rbowen
    </code></p></div>

    <p>もし <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> がパスの中に入っていない場合は、
    もちろん、実行するためにプログラムまでのフルパスを
    タイプする必要があります。私のサーバであれば、
    <code>/usr/local/apache/bin/htpasswd</code>
    にプログラムが置かれています。</p>

    <p>次に、サーバがパスワードを要求するように設定して、
    どのユーザがアクセスを許されているかをサーバに知らせなければ
    なりません。 <code>httpd.conf</code> を編集するか
    <code>.htaccess</code> ファイルを使用するかで
    設定します。例えば、ディレクトリ
    <code>/usr/local/apache/htdocs/secret</code>
    を保護したい場合は、
    <code>/usr/local/apache/htdocs/secret/.htaccess</code>
    か httpd.conf 中の &lt;Directory
    /usr/local/apache/apache/htdocs/secret&gt; セクションに
    配置して、次のディレクティブを使うことができます。</p>

    <div class="example"><p><code>
      AuthType Basic<br />
      AuthName "Restricted Files"<br />
      AuthUserFile /usr/local/apache/passwd/passwords<br />
      Require user rbowen
    </code></p></div>

    <p>個々のディレクティブについて見てみましょう。
    <code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code>
    ディレクティブはどういう認証方法でユーザの認証を行うかを
    選択します。最も一般的な方法は <code>Basic</code>
    で、これは <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>
    で実装されています。しかしながら、
    これは気を付けるべき重要なポイントなのですが、
    Basic 認証はクライアントからサーバへ、
    パスワードを暗号化せずに送ります。ですから、
    この方法は特に機密性の高いデータに対しては用いるべきでは
    ありません。 Apache ではもう一つ別の認証方法:
    <code>AuthType Digest</code> をサポートしています。
    この方法は <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code>
    で実装されていて、もっと安全です。
    ごくごく最近のクライアントしか Digest
    認証をサポートしていないようです。</p>

    <p><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code>
    ディレクティブでは、認証に使う <dfn>Realm</dfn> (訳注: 領域)
    を設定します。Realm は大きく分けて二つの機能を提供します。
    一つ目は、クライアントがパスワードダイアログボックスの
    一部としてユーザにこの情報をよく提示する、というものです。
    二つ目には、クライアントが与えられた認証領域に対してどのパスワードを
    送信すれば良いのかを決定するために使われる、という機能です。</p>

    <p>例えば、<code>"Restricted Files"</code> 領域中で
    一度認証されれば、同一サーバ上で <code>"Restricted Files"</code>
    Realm としてマークされたどんな領域でも、クライアントは
    自動的に同じパスワードを使おうと試みます。
    このおかげで、複数の制限領域に同じ realm を共有させて、
    ユーザがパスワードを何度も要求される事態を
    防ぐことができます。もちろん、セキュリティ上の理由から、
    サーバのホスト名が変わればいつでも必ず、
    クライアントは再びパスワードを尋ねる必要があります。</p>

    <p><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
    ディレクティブは <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> で作った
    パスワードファイルへのパスを設定します。
    ユーザ数が多い場合は、リクエスト毎のユーザの認証のための
    プレーンテキストの探索が非常に遅くなることがあります。
    Apache ではユーザ情報を高速なデータベースファイルに
    保管することもできます。
    <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> モジュールが
    <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>
    ディレクティブを提供します。これらのファイルは <code class="program"><a href="../programs/dbmmanage.html">dbmmanage</a></code>
    プログラムで作成したり操作したりできます。
    <a href="http://modules.apache.org/">Apache 
    モジュールデータベース</a>中にあるサードパーティー製の
    モジュールで、その他多くのタイプの認証オプションが
    利用可能です。</p>

    <p>最後に、<code class="directive"><a href="../mod/core.html#require">Require</a></code>
    ディレクティブが、サーバのこの領域にアクセスできるユーザを
    指定することによって、プロセスの承認部分を提供します。
    次のセクションでは、<code class="directive"><a href="../mod/core.html#require">Require</a></code>
    ディレクティブの様々な用法について述べます。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">
複数の人が入れるようにする</a></h2>
    <p>上記のディレクティブは、ただ一人 (具体的にはユーザ名
    <code>rbowen</code> の誰か) がディレクトリに
    入れるようにします。多くの場合は、複数の人が
    入れるようにしたいでしょう。ここで
    <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>
    の登場です。</p>

    <p>もし複数の人が入れるようにしたいのであれば、
    グループに属するユーザの一覧の入っている、グループ名のついた
    グループファイルを作る必要があります。このファイルの
    書式はきわめて単純で、お好みのエディタで生成できます。
    ファイルの中身は次のようなものです。</p>

   <div class="example"><p><code>
     GroupName: rbowen dpitts sungo rshersey
   </code></p></div>

    <p>一行にスペース区切りで、グループに所属するメンバーの
    一覧をならべるだけです。</p>

    <p>既に存在するパスワードファイルにユーザを加える場合は、
    次のようにタイプしてください。</p>

    <div class="example"><p><code>
      htpasswd /usr/local/apache/passwd/passwords dpitts
    </code></p></div>

    <p>以前と同じ応答が返されますが、新しいファイルを
    作るのではなく、既にあるファイルに追加されています。
    (新しいパスワードファイルを作るには <code>-c</code>
    を使います。)</p>

    <p>ここで次のようにして <code>.htaccess</code> ファイルを
    修正する必要があります。</p>

    <div class="example"><p><code>
      AuthType Basic<br />
      AuthName "By Invitation Only"<br />
      AuthUserFile /usr/local/apache/passwd/passwords<br />
      AuthGroupFile /usr/local/apache/passwd/groups<br />
      Require group GroupName
    </code></p></div>

    <p>これで、グループ <code>GroupName</code> にリストされていて、
    <code>password</code> ファイルにエントリがある人は、
    正しいパスワードをタイプすれば入ることができるでしょう。</p>

    <p>もっと特定せずに複数のユーザが入れるようにする、
    もう一つの方法があります。グループファイルを作るのではなく、
    次のディレクティブを使えばできます。</p>

    <div class="example"><p><code>
      Require valid-user
    </code></p></div>

    <p><code>require user rbowen</code> 行でなく、上記を使うと、
    パスワードファイルにリストされている人であれば誰でも
    許可されます。
    単にパスワードファイルをグループ毎に分けておくことで、
    グループのような振る舞いをさせることもできます。
    このアプローチの利点は、Apache は二つではなく、
    ただ一つのファイルだけを検査すればよいという点です。
    欠点は、たくさんのパスワードファイルを管理して、その中から
    <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
    ディレクティブに正しいファイルを参照させなければならない点です。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="possibleproblems" id="possibleproblems">起こりえる問題</a></h2>
    <p>Basic 認証が指定されている場合は、
    サーバにドキュメントをリクエストする度に
    ユーザ名とパスワードを検査しなければなりません。
    これは同じページ、ページにある全ての画像を
    リロードする場合であっても該当します
     (もし画像も保護されたディレクトリから来るのであれば) 。
    予想される通り、これは動作を多少遅くします。
    遅くなる程度はパスワードファイルの大きさと比例しますが、
    これは、ファイルを開いてあなたの名前を発見するまで
    ユーザ名のリストを読まなければならないからです。
    そして、ページがロードされる度にこれを行わなければ
    なりません。</p>

    <p>結論としては、一つのパスワードファイルに置くことのできる
    ユーザ数には実質的な限界があります。
    この限界はサーバマシンの性能に依存して変わりますが、
    数百のエントリを越えたあたりから速度低下が見られると予期されています。
    その時は他の認証方法を考慮に入れた方が良いでしょう。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="whatotherneatstuffcanido" id="whatotherneatstuffcanido">もっと巧みに制御できない
?</a></h2>
    <p>ユーザ名とパスワードによる認証は認証の一つの方法に過ぎません。
    しばしば誰であるかということとは違う何かに基づいて、
    入れるようにしたくなることもあるでしょう。
    例えばその人がどこから来ているかといったことです。</p>

    <p><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> と
    <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code>
    ディレクティブを使って、ドキュメントを要求してきたマシンの
    ホスト名やホストアドレスに基づいて許可不許可を制御できます。
    <code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code>
    ディレクティブはこの二つと連携して動作し、Apache 
    にどの順番でフィルタを適用するかを知らせます。</p>

    <p>これらのディレクティブの使い方は次のようになります。</p>

    <div class="example"><p><code>
      Allow from <var>address</var>
    </code></p></div>

    <p>ここで、<var>address</var> は IP アドレス
    (または IP アドレスの一部)、あるいは完全修飾ドメイン名
    (またはドメイン名の一部) です。
    必要であれば複数のアドレスやドメイン名を指定できます。</p>

    <p>例えば、もし誰かが掲示板を攻撃していて、
    その人を閉め出したいのであれば、
    次のようにすることができます。</p>

    <div class="example"><p><code>
      Deny from 205.252.46.165
    </code></p></div>

    <p>このアドレスから来る人は、このディレクティブの範囲内の
    コンテンツを見ることができません。もし IP
    アドレスの代わりにマシン名があれば、それを使えます。</p>

    <div class="example"><p><code>
      Deny from <var>host.example.com</var>
    </code></p></div>

    <p>ドメイン全体からのアクセスを防ぎたければ、
    単にアドレスやドメイン名の一部を指定することができます。</p>

    <div class="example"><p><code>
      Deny from <var>192.101.205</var><br />
      Deny from <var>cyberthugs.com</var> <var>moreidiots.com</var><br />
      Deny from ke
    </code></p></div>

    <p><code class="directive"><a href="../mod/mod_authz_host.html#order">Order</a></code> を使うことで、
    <code class="directive"><a href="../mod/mod_authz_host.html#deny">Deny</a></code> と
    <code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code> の組み合わせで
    入っても良いグループが本当に確実に限定できているようにできます。</p>

    <div class="example"><p><code>
      Order deny,allow<br />
      Deny from all<br />
      Allow from <var>dev.example.com</var>
    </code></p></div>

    <p><code class="directive"><a href="../mod/mod_authz_host.html#allow">Allow</a></code>
    ディレクティブを単純に列挙するのでは望みの動作をしないでしょう。
    なぜなら、全ての人が入れるということに加えて、
    指定したホストからの人が入れるようにするからです。
    やりたいことは、指定した人たち<em>だけ</em>が入れるように
    することです。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="moreinformation" id="moreinformation">追加情報</a></h2>
    <p>これら全てがどのように動作するかについて
    もっと多くの情報が書かれている <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> と
    <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>
    の文書も読むとよいでしょう。</p>
</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../ja/howto/auth.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2008 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div>
</body></html>