<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta name="generator" content="HTML Tidy, see www.w3.org" />

    <title>Authentication</title>
    <link rev="made" href="mailto:rbowen@rcbowen.com" />
  </head>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->

  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
  vlink="#000080" alink="#FF0000">
    <!--#include virtual="header.html" -->

    <h1 align="center">Authentication</h1>
    <a id="__index__" name="__index__"></a> <!-- INDEX BEGIN -->
     

    <ul>
      <li><a href="#introduction">Introduction</a></li>

      <li><a href="#theprerequisites">The prerequisites</a></li>

      <li><a href="#gettingitworking">Getting it working</a></li>

      <li><a href="#lettingmorethanonepersonin">Letting more
      than one person in</a></li>

      <li><a href="#possibleproblems">Possible problems</a></li>

      <li><a href="#whatotherneatstuffcanido">What other neat
      stuff can I do?</a></li>

      <li><a href="#moreinformation">More information</a></li>
    </ul>
    <!-- INDEX END -->
    <hr />

    <table border="1">
      <tr>
        <td valign="top"><strong>Related Modules</strong><br />
         <br />
         <a href="../mod/mod_auth.html">mod_auth</a><br />
         <a href="../mod/mod_access.html">mod_access</a><br />
         </td>

        <td valign="top"><strong>Related Directives</strong><br />
         <br />
         <a href="../mod/mod_access.html#allow">Allow</a><br />
         <a
        href="../mod/mod_auth.html#authgroupfile">AuthGroupFile</a><br />
         <a href="../mod/core.html#authname">AuthName</a><br />
         <a href="../mod/core.html#authtype">AuthType</a><br />
         <a
        href="../mod/mod_auth.html#authuserfile">AuthUserFile</a><br />
         <a href="../mod/mod_access.html#deny">Deny</a><br />
         <a href="../mod/core.html#options">Options</a><br />
         <a href="../mod/core.html#require">Require</a><br />
         </td>
      </tr>
    </table>

    <h1><a id="authentication"
    name="authentication">Authentication</a></h1>

    <p>Authentication is any process by which you verify that
    someone is who they claim they are. Authorization is any
    process by which someone is allowed to be where they want to
    go, or to have information that they want to have.</p>

    <h2><a id="introduction"
    name="introduction">Introduction</a></h2>

    <p>If you have information on your web site that is sensitive
    or intended for only a small group of people, the techniques in
    this article will help you make sure that the people that see
    those pages are the people that you wanted to see them.</p>

    <p>This article covers the "standard" way of protecting parts
    of your web site that most of you are going to use.</p>

    <h2><a id="theprerequisites" name="theprerequisites">The
    prerequisites</a></h2>

    <p>The directives discussed in this article will need to go
    either in your main server configuration file (typically in a
    &lt;Directory&gt; section), or in per-directory configuration
    files (<code>.htaccess</code> files).</p>

    <p>If you plan to use <code>.htaccess</code> files, you will
    need to have a server configuration that permits putting
    authentication directives in these files. This is done with the
    <code><a
    href="../mod/core.html#allowoverride">AllowOverride</a></code>
    directive, which specifies which directives, if any, may be put
    in per-directory configuration files.</p>

    <p>Since we're talking here about authentication, you will need
    an <code>AllowOverride</code> directive like the following:</p>
<pre>
    AllowOverride AuthConfig
</pre>

    <p>Or, if you are just going to put the directives directly in
    your main server configuration file, you will of course need to
    have write permission to that file.</p>

    <p>And you'll need to know a little bit about the directory
    structure of your server, in order to know where some files are
    kept. This should not be terribly difficult, and I'll try to
    make this clear when we come to that point.</p>

    <h2><a id="gettingitworking"
    name="gettingitworking">Getting it working</a></h2>

    <p>Here's the basics of password protecting a directory on your
    server.</p>

    <p>You'll need to create a password file. This file should be
    placed somewhere not accessible from the web. This is so that
    folks cannot download the password file. For example, if your
    documents are served out of
    <code>/usr/local/apache/htdocs</code> you might want to put the
    password file(s) in <code>/usr/local/apache/passwd</code>.</p>

    <p>To create the file, use the <a
    href="../programs/htpasswd.html">htpasswd</a> utility that came
    with Apache. This be located in the <code>bin</code> directory
    of wherever you installed Apache. To create the file, type:</p>
<pre>
        htpasswd -c /usr/local/apache/passwd/password rbowen
</pre>

    <p><code>htpasswd</code> will ask you for the password, and
    then ask you to type it again to confirm it:</p>
<pre>
        # htpasswd -c /usr/local/apache/passwd/passwords rbowen
        New password: mypassword
        Re-type new password: mypassword
        Adding password for user rbowen
</pre>

    <p>If <code>htpasswd</code> is not in your path, of course
    you'll have to type the full path to the file to get it to run.
    On my server, it's located at
    <code>/usr/local/apache/bin/htpasswd</code></p>

    <p>Next, you'll need to configure the server to request a
    password and tell the server which users are allowed access.
    You can do this either by editing the <code>httpd.conf</code>
    file or using an <code>.htaccess</code> file. For example, if
    you wish to protect the directory
    <code>/usr/local/apache/htdocs/secret</code>, you can use the
    following directives, either placed in the file
    <code>/usr/local/apache/htdocs/secret/.htaccess</code>, or
    placed in httpd.conf inside a &lt;Directory
    /usr/local/apache/apache/htdocs/secret&gt; section.</p>
<pre>
        AuthType Basic
        AuthName "Restricted Files"
        AuthUserFile /usr/local/apache/passwd/passwords
        require user rbowen
</pre>

    <p>Let's examine each of those directives individually. The <a
    href="../mod/core.html#authtype">AuthType</a> directive selects
    that method that is used to authenticate the user. The most
    common method is <code>Basic</code>, and this is the method
    implemented by <a href="../mod/mod_auth.html">mod_auth</a>. It
    is important to be aware, however, that Basic authentication
    sends the password from the client to the browser unencrypted.
    This method should therefore not be used for highly sensitive
    data. Apache supports one other authentication method:
    <code>AuthType Digest</code>. This method is implemented by <a
    href="../mod/mod_auth_digest.html">mod_auth_digest</a> and is
    much more secure. Only the most recent versions of clients are
    known to support Digest authentication.</p>

    <p>The <a href="../mod/core.html#authname">AuthName</a>
    directive sets the <em>Realm</em> to be used in the
    authentication. The realm serves two major functions. First,
    the client often presents this information to the user as part
    of the password dialog box. Second, it is used by the client to
    determine what password to send for a given authenticated area.
    So, for example, once a client has authenticated in the
    <code>"Restricted Files"</code> area, it will automatically
    retry the same password for any area on the same server that is
    marked with the <code>"Restricted Files"</code> Realm.
    Therefore, you can prevent a user from being prompted more than
    once for a password by letting multiple restricted areas share
    the same realm. Of course, for security reasons, the client
    will always need to ask again for the password whenever the
    hostname of the server changes.</p>

    <p>The <a
    href="../mod/mod_auth.html#authuserfile">AuthUserFile</a>
    directive sets the path to the password file that we just
    created with <code>htpasswd</code>. If you have a large number
    of users, it can be quite slow to search through a plain text
    file to authenticate the user on each request. Apache also has
    the ability to store user information in fast database files.
    The <a href="../mod/mod_auth_dbm.html">mod_auth_dbm</a> module
    provides the <a
    href="../mod/mod_auth_dbm.html#authdbmuserfile">AuthDBMUserFile</a>
    directive. These files can be created and
    manipulated with the <a
    href="../programs/dbmmanage.html">dbmmanage</a> program. Many
    other types of authentication options are available from third
    party modules in the <a
    href="http://modules.apache.org/">Apache Modules
    Database</a>.</p>

    <p>Finally, the <a href="../mod/core.html#require">require</a>
    directive provides the authorization part of the process by
    setting the user that is allowed to access this region of the
    server. In the next section, we discuss various ways to use the
    <code>require</code> directive.</p>

    <h2><a id="lettingmorethanonepersonin"
    name="lettingmorethanonepersonin">Letting more than one
    person in</a></h2>

    <p>The directives above only let one person (specifically
    someone with a username of <code>rbowen</code>) into the
    directory. In most cases, you'll want to let more than one
    person in. This is where the <a
    href="../mod/mod_auth.html#authgroupfile">AuthGroupFile</a>
    comes in.</p>

    <p>If you want to let more than one person in, you'll need to
    create a group file that associates group names with a list of
    users in that group. The format of this file is pretty simple,
    and you can create it with your favorite editor. The contents
    of the file will look like this:</p>
<pre>
        GroupName: rbowen dpitts sungo rshersey
</pre>

    <p>That's just a list of the members of the group in a long
    line separated by spaces.</p>

    <p>To add a user to your already existing password file,
    type:</p>
<pre>
        htpasswd /usr/local/apache/passwd/password dpitts
</pre>

    <p>You'll get the same response as before, but it will be
    appended to the existing file, rather than creating a new file.
    (It's the <code>-c</code> that makes it create a new password
    file.</p>

    <p>Now, you need to modify your <code>.htaccess</code> file to
    look like the following:</p>
<pre>
        AuthType Basic
        AuthName "By Invitation Only"
        AuthUserFile /usr/local/apache/passwd/passwords
        AuthGroupFile /usr/local/apache/passwd/groups
        require group GroupName
</pre>

    <p>Now, anyone that is listed in the group
    <code>GroupName</code>, and has an entry in the
    <code>password</code> file, will be let in, if they type the
    correct password.</p>

    <p>There's another way to let multiple users in that is less
    specific. Rather than creating a group file, you can just use
    the following directive:</p>
<pre>
        require valid-user
</pre>

    <p>Using that rather than the <code>require user rbowen</code>
    line will allow anyone in that is listed in the password file,
    and who correctly enters their password. You can even emulate
    the group behavior here, by just keeping a separate password
    file for each group. The advantage of this approach is that
    Apache only has to check one file, rather than two. The
    disadvantage is that you have to maintain a bunch of password
    files, and remember to reference th right one in the
    <code>AuthUserFile</code> directive.</p>

    <h2><a id="possibleproblems" name="possibleproblems">Possible
    problems</a></h2>

    <p>Because of the way that Basic authentication is specified,
    your username and password must be verified every time you
    request a document from the server. This is even if you're
    reloading the same page, and for every image on the page (if
    they come from a protected directory). As you can imagine, this
    slows things down a little. The amount that it slows things
    down is proportional to the size of the password file, because
    it has to open up that file, and go down the list of users
    until it gets to your name. And it has to do this every time a
    page is loaded.</p>

    <p>A consequence of this is that there's a practical limit to
    how many users you can put in one password file. This limit
    will vary depending on the performance of your particular
    server machine, but you can expect to see slowdowns once you
    get above a few hundred entries, and may wish to consider a
    different authentication method at that time.</p>

    <h2><a id="whatotherneatstuffcanido"
    name="whatotherneatstuffcanido">What other neat stuff can
    I do?</a></h2>

    <p>Authentication by username and password is only part of the
    story. Frequently you want to let people in based on something
    other than who they are. Something such as where they are
    coming from.</p>

    <p>The <code>allow</code> and <code>deny</code> directives let
    you allow and deny access based on the host name, or host
    address, of the machine requesting a document. The
    <code>order</code> directive goes hand-in-hand with these two,
    and tells Apache in which order to apply the filters.</p>

    <p>The usage of these directives is:</p>
<pre>
        allow from address
</pre>

    <p>where <em>address</em> is an IP address (or a partial IP
    address) or a fully qualified domain name (or a partial domain
    name); you may provide multiple addresses or domain names, if
    desired.</p>

    <p>For example, if you have someone spamming your message
    board, and you want to keep them out, you could do the
    following:</p>
<pre>
        deny from 205.252.46.165
</pre>

    <p>Visitors coming from that address will not be able to see
    the content covered by this directive. If, instead, you have a
    machine name, rather than an IP address, you can use that.</p>
<pre>
        deny from host.example.com
</pre>

    <p>And, if you'd like to block access from an entire domain,
    you can specify just part of an address or domain name:</p>
<pre>
        deny from 192.101.205
        deny from cyberthugs.com moreidiots.com
        deny from ke
</pre>

    <p>Using <code>order</code> will let you be sure that you are
    actually restricting things to the group that you want to let
    in, by combining a <code>deny</code> and an <code>allow</code>
    directive:</p>
<pre>
        order deny,allow
        deny from all
        allow from dev.example.com
</pre>

    <p>Listing just the <code>allow</code> directive would not do
    what you want, because it will let folks from that host in, in
    addition to letting everyone in. What you want is to let
    <em>only</em> those folks in.</p>

    <h2><a id="moreinformation" name="moreinformation">More
    information</a></h2>

    <p>You should also read the documentation for <code><a
    href="../mod/mod_auth.html">mod_auth</a></code> and <code><a
    href="../mod/mod_access.html">mod_access</a></code> which
    contain some more information about how this all works.</p>
  </body>
</html>

