home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 November / CMCD1104.ISO / Software / Complet / Apache / apache_2.0.52-win32-x86-no_ssl.msi / Data.Cab / F278243_mod_auth_ldap.xml < prev    next >
Extensible Markup Language  |  2004-05-21  |  34KB  |  851 lines

  1. <?xml version="1.0"?>
  2. <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
  3. <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
  4. <!-- $Revision: 1.6.2.12 $ -->
  5.  
  6. <!--
  7.  Copyright 2002-2004 The Apache Software Foundation
  8.  
  9.  Licensed under the Apache License, Version 2.0 (the "License");
  10.  you may not use this file except in compliance with the License.
  11.  You may obtain a copy of the License at
  12.  
  13.      http://www.apache.org/licenses/LICENSE-2.0
  14.  
  15.  Unless required by applicable law or agreed to in writing, software
  16.  distributed under the License is distributed on an "AS IS" BASIS,
  17.  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  18.  See the License for the specific language governing permissions and
  19.  limitations under the License.
  20. -->
  21.  
  22. <modulesynopsis metafile="mod_auth_ldap.xml.meta">
  23.  
  24. <name>mod_auth_ldap</name>
  25. <description>Allows an LDAP directory to be used to store the database
  26. for HTTP Basic authentication.</description>
  27. <status>Experimental</status>
  28. <sourcefile>mod_auth_ldap.c</sourcefile>
  29. <identifier>auth_ldap_module</identifier>
  30. <compatibility>Available in version 2.0.41 and later</compatibility>
  31.  
  32. <summary>
  33.     <p><module>mod_auth_ldap</module> supports the following features:</p>
  34.  
  35.     <ul>
  36.       <li>Known to support the <a
  37.       href="http://www.openldap.org/">OpenLDAP SDK</a> (both 1.x
  38.       and 2.x), <a href="http://developer.novell.com/ndk/cldap.htm">
  39.       Novell LDAP SDK</a> and the <a
  40.       href="http://www.iplanet.com/downloads/developer/">iPlanet
  41.       (Netscape)</a> SDK.</li>
  42.  
  43.       <li>Complex authorization policies can be implemented by
  44.       representing the policy with LDAP filters.</li>
  45.  
  46.       <li>Support for Microsoft FrontPage allows FrontPage users to
  47.       control access to their webs, while retaining LDAP for user
  48.       authentication.</li>
  49.  
  50.       <li>Uses extensive caching of LDAP operations via <a
  51.       href="mod_ldap.html">mod_ldap</a>.</li>
  52.  
  53.       <li>Support for LDAP over SSL (requires the Netscape SDK) or
  54.       TLS (requires the OpenLDAP 2.x SDK or Novell LDAP SDK).</li>
  55.     </ul>
  56. </summary>
  57.  
  58. <seealso><module>mod_ldap</module></seealso>
  59.  
  60. <section id="contents"><title>Contents</title>
  61.  
  62.     <ul>
  63.       <li>
  64.         <a href="#operation">Operation</a> 
  65.  
  66.         <ul>
  67.           <li><a href="#authenphase">The Authentication
  68.           Phase</a></li>
  69.  
  70.           <li><a href="#authorphase">The Authorization
  71.           Phase</a></li>
  72.         </ul>
  73.       </li>
  74.  
  75.       <li>
  76.         <a href="#requiredirectives">The require Directives</a> 
  77.  
  78.         <ul>
  79.           <li><a href="#reqvaliduser">require valid-user</a></li>
  80.           <li><a href="#requser">require user</a></li>
  81.           <li><a href="#reqgroup">require group</a></li>
  82.           <li><a href="#reqdn">require dn</a></li>
  83.         </ul>
  84.       </li>
  85.  
  86.       <li><a href="#examples">Examples</a></li>
  87.       <li><a href="#usingtls">Using TLS</a></li>
  88.       <li><a href="#usingssl">Using SSL</a></li>
  89.  
  90.       <li>
  91.         <a href="#frontpage">Using Microsoft FrontPage with
  92.         <module>mod_auth_ldap</module></a> 
  93.  
  94.         <ul>
  95.           <li><a href="#howitworks">How It Works</a></li>
  96.           <li><a href="#fpcaveats">Caveats</a></li>
  97.         </ul>
  98.       </li>
  99.     </ul>
  100. </section>
  101.  
  102. <section id="operation"><title>Operation</title>
  103.  
  104.     <p>There are two phases in granting access to a user. The first
  105.     phase is authentication, in which <module>mod_auth_ldap</module>
  106.     verifies that the user's credentials are valid. This also called
  107.     the <em>search/bind</em> phase. The second phase is
  108.     authorization, in which <module>mod_auth_ldap</module> determines
  109.     if the authenticated user is allowed access to the resource in
  110.     question. This is also known as the <em>compare</em>
  111.     phase.</p>
  112.  
  113. <section id="authenphase"><title>The Authentication
  114.     Phase</title>
  115.  
  116.     <p>During the authentication phase, <module>mod_auth_ldap</module>
  117.     searches for an entry in the directory that matches the username
  118.     that the HTTP client passes. If a single unique match is found,
  119.     then <module>mod_auth_ldap</module> attempts to bind to the
  120.     directory server using the DN of the entry plus the password
  121.     provided by the HTTP client. Because it does a search, then a
  122.     bind, it is often referred to as the search/bind phase. Here are
  123.     the steps taken during the search/bind phase.</p>
  124.  
  125.     <ol>
  126.       <li>Generate a search filter by combining the attribute and
  127.       filter provided in the <directive module="mod_auth_ldap"
  128.       >AuthLDAPURL</directive> directive with
  129.       the username passed by the HTTP client.</li>
  130.  
  131.       <li>Search the directory using the generated filter. If the
  132.       search does not return exactly one entry, deny or decline
  133.       access.</li>
  134.  
  135.       <li>Fetch the distinguished name of the entry retrieved from
  136.       the search and attempt to bind to the LDAP server using the
  137.       DN and the password passed by the HTTP client. If the bind is
  138.       unsuccessful, deny or decline access.</li>
  139.     </ol>
  140.  
  141.     <p>The following directives are used during the search/bind
  142.     phase</p>
  143.  
  144.     <table>
  145.       <columnspec><column width=".3"/><column width=".7"/></columnspec>
  146.       <tr>
  147.         <td><directive module="mod_auth_ldap">AuthLDAPURL</directive></td>
  148.  
  149.         <td>Specifies the LDAP server, the
  150.         base DN, the attribute to use in the search, as well as the
  151.         extra search filter to use.</td>
  152.       </tr>
  153.  
  154.       <tr>
  155.         <td><directive module="mod_auth_ldap">AuthLDAPBindDN</directive></td>
  156.  
  157.         <td>An optional DN to bind with
  158.         during the search phase.</td>
  159.       </tr>
  160.  
  161.       <tr>
  162.         <td><directive
  163.         module="mod_auth_ldap">AuthLDAPBindPassword</directive></td>
  164.  
  165.         <td>An optional password to bind
  166.         with during the search phase.</td>
  167.       </tr>
  168.     </table>
  169. </section>
  170.  
  171. <section id="authorphase"><title>The Authorization
  172.     Phase</title>
  173.  
  174.     <p>During the authorization phase, <module>mod_auth_ldap</module>
  175.     attempts to determine if the user is authorized to access the
  176.     resource.  Many of these checks require
  177.     <module>mod_auth_ldap</module> to do a compare operation on the
  178.     LDAP server. This is why this phase is often referred to as the
  179.     compare phase. <module>mod_auth_ldap</module> accepts the
  180.     following <directive module="core">Require</directive>
  181.     directives to determine if the credentials are acceptable:</p>
  182.  
  183.     <ul>
  184.       <li>Grant access if there is a <a href="#requser"><code>require
  185.       valid-user</code></a> directive.</li>
  186.  
  187.       <li>Grant access if there is a <a
  188.       href="#reqgroup"><code>require user</code></a> directive, and the
  189.       username in the directive matches the username passed by the
  190.       client.</li>
  191.  
  192.       <li>Grant access if there is a <a href="#reqdn"><code>require
  193.       dn</code></a> directive, and the DN in the directive matches
  194.       the DN fetched from the LDAP directory.</li>
  195.  
  196.       <li>Grant access if there is a <a
  197.       href="#reqgroup"><code>require group</code></a> directive, and
  198.       the DN fetched from the LDAP directory (or the username
  199.       passed by the client) occurs in the LDAP group.</li>
  200.  
  201.       <li>otherwise, deny or decline access</li>
  202.     </ul>
  203.  
  204.     <p><module>mod_auth_ldap</module> uses the following directives during the
  205.     compare phase:</p>
  206.  
  207.     <table>
  208.       <columnspec><column width=".4"/><column width=".6"/></columnspec>
  209.       <tr>
  210.         <td><directive module="mod_auth_ldap">AuthLDAPURL</directive> </td>
  211.  
  212.         <td>The attribute specified in the
  213.         URL is used in compare operations for the <code>require
  214.         user</code> operation.</td>
  215.       </tr>
  216.  
  217.       <tr>
  218.         <td><directive
  219.         module="mod_auth_ldap">AuthLDAPCompareDNOnServer</directive></td>
  220.  
  221.         <td>Determines the behavior of the
  222.         <code>require dn</code> directive.</td>
  223.       </tr>
  224.  
  225.       <tr>
  226.         <td><directive
  227.         module="mod_auth_ldap">AuthLDAPGroupAttribute</directive></td>
  228.  
  229.         <td>Determines the attribute to
  230.         use for comparisons in the <code>require group</code>
  231.         directive.</td>
  232.       </tr>
  233.  
  234.       <tr>
  235.         <td><directive
  236.         module="mod_auth_ldap">AuthLDAPGroupAttributeIsDN</directive></td>
  237.  
  238.         <td>Specifies whether to use the
  239.         user DN or the username when doing comparisons for the
  240.         <code>require group</code> directive.</td>
  241.       </tr>
  242.     </table>
  243. </section>
  244. </section>
  245.  
  246. <section id="requiredirectives"><title>The require Directives</title>
  247.  
  248.     <p>Apache's <directive module="core">Require</directive>
  249.     directives are used during the authorization phase to ensure that
  250.     a user is allowed to access a resource.</p>
  251.  
  252. <section id="reqvaliduser"><title>require
  253.     valid-user</title>
  254.  
  255.     <p>If this directive exists, <module>mod_auth_ldap</module> grants
  256.     access to any user that has successfully authenticated during the
  257.     search/bind phase.</p>
  258. </section>
  259.  
  260. <section id="requser"><title>require user</title>
  261.  
  262.     <p>The <code>require user</code> directive specifies what
  263.     usernames can access the resource. Once
  264.     <module>mod_auth_ldap</module> has retrieved a unique DN from the
  265.     directory, it does an LDAP compare operation using the username
  266.     specified in the <code>require user</code> to see if that username
  267.     is part of the just-fetched LDAP entry.  Multiple users can be
  268.     granted access by putting multiple usernames on the line,
  269.     separated with spaces. If a username has a space in it, then it
  270.     must be surrounded with double quotes. Multiple users can also be
  271.     granted access by using multiple <code>require user</code>
  272.     directives, with one user per line. For example, with a <directive
  273.     module="mod_auth_ldap">AuthLDAPURL</directive> of
  274.     <code>ldap://ldap/o=Airius?cn</code> (i.e., <code>cn</code> is
  275.     used for searches), the following require directives could be used
  276.     to restrict access:</p>
  277. <example>
  278. require user "Barbara Jenson"<br />
  279. require user "Fred User"<br />
  280. require user "Joe Manager"<br />
  281. </example>
  282.  
  283.     <p>Because of the way that <module>mod_auth_ldap</module> handles this
  284.     directive, Barbara Jenson could sign on as <em>Barbara
  285.     Jenson</em>, <em>Babs Jenson</em> or any other <code>cn</code> that
  286.     she has in her LDAP entry. Only the single <code>require
  287.     user</code> line is needed to support all values of the attribute
  288.     in the user's entry.</p>
  289.  
  290.     <p>If the <code>uid</code> attribute was used instead of the
  291.     <code>cn</code> attribute in the URL above, the above three lines
  292.     could be condensed to</p>
  293. <example>require user bjenson fuser jmanager</example>
  294. </section>
  295.  
  296. <section id="reqgroup"><title>require group</title>
  297.  
  298.     <p>This directive specifies an LDAP group whose members are
  299.     allowed access. It takes the distinguished name of the LDAP
  300.     group. Note: Do not surround the group name with quotes.
  301.     For example, assume that the following entry existed in
  302.     the LDAP directory:</p>
  303. <example>
  304. dn: cn=Administrators, o=Airius<br />
  305. objectClass: groupOfUniqueNames<br />
  306. uniqueMember: cn=Barbara Jenson, o=Airius<br />
  307. uniqueMember: cn=Fred User, o=Airius<br />
  308. </example>
  309.  
  310.     <p>The following directive would grant access to both Fred and
  311.     Barbara:</p>
  312. <example>require group cn=Administrators, o=Airius</example>
  313.  
  314.     <p>Behavior of this directive is modified by the <directive
  315.     module="mod_auth_ldap">AuthLDAPGroupAttribute</directive> and
  316.     <directive
  317.     module="mod_auth_ldap">AuthLDAPGroupAttributeIsDN</directive>
  318.     directives.</p>
  319. </section>
  320.  
  321. <section id="reqdn"><title>require dn</title>
  322.  
  323.     <p>The <code>require dn</code> directive allows the administrator
  324.     to grant access based on distinguished names. It specifies a DN
  325.     that must match for access to be granted. If the distinguished
  326.     name that was retrieved from the directory server matches the
  327.     distinguished name in the <code>require dn</code>, then
  328.     authorization is granted. Note: do not surround the distinguished
  329.     name with quotes.</p>
  330.  
  331.     <p>The following directive would grant access to a specific
  332.     DN:</p>
  333. <example>require dn cn=Barbara Jenson, o=Airius</example>
  334.  
  335.     <p>Behavior of this directive is modified by the <directive
  336.     module="mod_auth_ldap">AuthLDAPCompareDNOnServer</directive>
  337.     directive.</p>
  338. </section>
  339. </section>
  340.  
  341. <section id="examples"><title>Examples</title>
  342.  
  343.     <ul>
  344.       <li>
  345.         Grant access to anyone who exists in the LDAP directory,
  346.         using their UID for searches.
  347.  
  348. <example>
  349.  AuthLDAPURL ldap://ldap1.airius.com:389/ou=People, o=Airius?uid?sub?(objectClass=*)<br />
  350.  require valid-user
  351. </example>
  352.       </li>
  353.  
  354.       <li>
  355.         The next example is the same as above; but with the fields
  356.         that have useful defaults omitted. Also, note the use of a
  357.         redundant LDAP server. 
  358. <example>AuthLDAPURL ldap://ldap1.airius.com ldap2.airius.com/ou=People, o=Airius<br />
  359. require valid-user
  360. </example>
  361.       </li>
  362.  
  363.       <li>
  364.         The next example is similar to the previous one, but is
  365.         uses the common name instead of the UID. Note that this
  366.         could be problematical if multiple people in the directory
  367.         share the same <code>cn</code>, because a search on <code>cn</code>
  368.         <strong>must</strong> return exactly one entry. That's why
  369.         this approach is not recommended: it's a better idea to
  370.         choose an attribute that is guaranteed unique in your
  371.         directory, such as <code>uid</code>. 
  372. <example>
  373. AuthLDAPURL ldap://ldap.airius.com/ou=People, o=Airius?cn<br />
  374. require valid-user
  375. </example>
  376.       </li>
  377.  
  378.       <li>
  379.         Grant access to anybody in the Administrators group. The
  380.         users must authenticate using their UID. 
  381. <example>
  382. AuthLDAPURL ldap://ldap.airius.com/o=Airius?uid<br />
  383. require group cn=Administrators, o=Airius
  384. </example>
  385.       </li>
  386.  
  387.       <li>
  388.         The next example assumes that everyone at Airius who
  389.         carries an alphanumeric pager will have an LDAP attribute
  390.         of <code>qpagePagerID</code>. The example will grant access
  391.         only to people (authenticated via their UID) who have
  392.         alphanumeric pagers: 
  393. <example>
  394. AuthLDAPURL ldap://ldap.airius.com/o=Airius?uid??(qpagePagerID=*)<br />
  395. require valid-user
  396. </example>
  397.       </li>
  398.  
  399.       <li>
  400.         <p>The next example demonstrates the power of using filters
  401.         to accomplish complicated administrative requirements.
  402.         Without filters, it would have been necessary to create a
  403.         new LDAP group and ensure that the group's members remain
  404.         synchronized with the pager users. This becomes trivial
  405.         with filters. The goal is to grant access to anyone who has
  406.         a filter, plus grant access to Joe Manager, who doesn't
  407.         have a pager, but does need to access the same
  408.         resource:</p>
  409. <example>
  410. AuthLDAPURL ldap://ldap.airius.com/o=Airius?uid??(|(qpagePagerID=*)(uid=jmanager))<br />
  411. require valid-user
  412. </example>
  413.  
  414.         <p>This last may look confusing at first, so it helps to
  415.         evaluate what the search filter will look like based on who
  416.         connects, as shown below. The text in blue is the part that
  417.         is filled in using the attribute specified in the URL. The
  418.         text in red is the part that is filled in using the filter
  419.         specified in the URL. The text in green is filled in using
  420.         the information that is retrieved from the HTTP client. If
  421.         Fred User connects as <code>fuser</code>, the filter would look
  422.         like</p>
  423.  
  424.         <example>(&(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))</example>
  425.  
  426.         <p>The above search will only succeed if <em>fuser</em> has a
  427.         pager. When Joe Manager connects as <em>jmanager</em>, the
  428.         filter looks like</p>
  429.  
  430.         <example>(&(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))</example>
  431.  
  432.         <p>The above search will succeed whether <em>jmanager</em>
  433.         has a pager or not.</p>
  434.       </li>
  435.     </ul>
  436. </section>
  437.  
  438. <section id="usingtls"><title>Using TLS</title>
  439.  
  440.     <p>To use TLS, see the <module>mod_ldap</module> directives <directive
  441.     module="mod_ldap">LDAPTrustedCA</directive> and <directive
  442.     module="mod_ldap">LDAPTrustedCAType</directive>.</p>
  443. </section>
  444.  
  445. <section id="usingssl"><title>Using SSL</title>
  446.  
  447.     <p>To use SSL, see the <module>mod_ldap</module> directives <directive
  448.     module="mod_ldap">LDAPTrustedCA</directive> and <directive
  449.     module="mod_ldap">LDAPTrustedCAType</directive>.</p>
  450.  
  451.     <p>To specify a secure LDAP server, use <em>ldaps://</em> in the
  452.     <directive module="mod_auth_ldap">AuthLDAPURL</directive>
  453.     directive, instead of <em>ldap://</em>.</p>
  454. </section>
  455.  
  456. <section id="frontpage"><title>Using Microsoft
  457.     FrontPage with mod_auth_ldap</title>
  458.  
  459.     <p>Normally, FrontPage uses FrontPage-web-specific user/group
  460.     files (i.e., the <module>mod_auth</module> module) to handle all
  461.     authentication. Unfortunately, it is not possible to just
  462.     change to LDAP authentication by adding the proper directives,
  463.     because it will break the <em>Permissions</em> forms in
  464.     the FrontPage client, which attempt to modify the standard
  465.     text-based authorization files.</p>
  466.  
  467.     <p>Once a FrontPage web has been created, adding LDAP
  468.     authentication to it is a matter of adding the following
  469.     directives to <em>every</em> <code>.htaccess</code> file
  470.     that gets created in the web</p>
  471. <example><pre>
  472. AuthLDAPURL            "the url"
  473. AuthLDAPAuthoritative  off
  474. AuthLDAPFrontPageHack  on
  475. </pre></example>
  476.  
  477.     <p><directive
  478.     module="mod_auth_ldap">AuthLDAPAuthoritative</directive> must be
  479.     off to allow <module>mod_auth_ldap</module> to decline group
  480.     authentication so that Apache will fall back to file
  481.     authentication for checking group membership. This allows the
  482.     FrontPage-managed group file to be used.</p>
  483.  
  484. <section id="howitworks"><title>How It Works</title>
  485.  
  486.     <p>FrontPage restricts access to a web by adding the <code>require
  487.     valid-user</code> directive to the <code>.htaccess</code>
  488.     files. If <directive
  489.     module="mod_auth_ldap">AuthLDAPFrontPageHack</directive> is not
  490.     on, the <code>require valid-user</code> directive will succeed for
  491.     any user who is valid <em>as far as LDAP is
  492.     concerned</em>. This means that anybody who has an entry in
  493.     the LDAP directory is considered a valid user, whereas FrontPage
  494.     considers only those people in the local user file to be
  495.     valid. The purpose of the hack is to force Apache to consult the
  496.     local user file (which is managed by FrontPage) - instead of LDAP
  497.     - when handling the <code>require valid-user</code> directive.</p>
  498.  
  499.     <p>Once directives have been added as specified above,
  500.     FrontPage users will be able to perform all management
  501.     operations from the FrontPage client.</p>
  502. </section>
  503.  
  504. <section id="fpcaveats"><title>Caveats</title>
  505.  
  506.     <ul>
  507.       <li>When choosing the LDAP URL, the attribute to use for
  508.       authentication should be something that will also be valid
  509.       for putting into a <module>mod_auth</module> user file.
  510.       The user ID is ideal for this.</li>
  511.  
  512.       <li>When adding users via FrontPage, FrontPage administrators
  513.       should choose usernames that already exist in the LDAP
  514.       directory (for obvious reasons). Also, the password that the
  515.       administrator enters into the form is ignored, since Apache
  516.       will actually be authenticating against the password in the
  517.       LDAP database, and not against the password in the local user
  518.       file. This could cause confusion for web administrators.</li>
  519.  
  520.       <!-- XXX is that true? was mod_auth before the aaa change -->
  521.       <li>Apache must be compiled with <module>mod_auth</module> in order to
  522.       use FrontPage support. This is because Apache will still use
  523.       the <module>mod_auth</module> group file for determine the extent of a
  524.       user's access to the FrontPage web.</li>
  525.  
  526.       <li>The directives must be put in the <code>.htaccess</code>
  527.       files. Attempting to put them inside <directive module="core"
  528.       type="section">Location</directive> or <directive module="core"
  529.       type="section">Directory</directive> directives won't work. This
  530.       is because <module>mod_auth_ldap</module> has to be able to grab
  531.       the <directive module="mod_auth">AuthUserFile</directive>
  532.       directive that is found in FrontPage <code>.htaccess</code>
  533.       files so that it knows where to look for the valid user list. If
  534.       the <module>mod_auth_ldap</module> directives aren't in the same
  535.       <code>.htaccess</code> file as the FrontPage directives, then
  536.       the hack won't work, because <module>mod_auth_ldap</module> will
  537.       never get a chance to process the <code>.htaccess</code> file,
  538.       and won't be able to find the FrontPage-managed user file.</li>
  539.     </ul>
  540. </section>
  541. </section>
  542.  
  543. <directivesynopsis>
  544. <name>AuthLDAPAuthoritative</name>
  545. <description>Prevent other authentication modules from
  546. authenticating the user if this one fails</description>
  547. <syntax>AuthLDAPAuthoritative on|off</syntax>
  548. <default>AuthLDAPAuthoritative on</default>
  549. <contextlist><context>directory</context><context>.htaccess</context>
  550. </contextlist>
  551. <override>AuthConfig</override>
  552.  
  553. <usage>
  554.     <p>Set to <code>off</code> if this module should let other
  555.     authentication modules attempt to authenticate the user, should
  556.     authentication with this module fail. Control is only passed on
  557.     to lower modules if there is no DN or rule that matches the
  558.     supplied user name (as passed by the client).</p>
  559. </usage>
  560. </directivesynopsis>
  561.  
  562. <directivesynopsis>
  563. <name>AuthLDAPBindDN</name>
  564. <description>Optional DN to use in binding to the LDAP server</description>
  565. <syntax>AuthLDAPBindDN <em>distinguished-name</em></syntax>
  566. <contextlist><context>directory</context><context>.htaccess</context>
  567. </contextlist>
  568. <override>AuthConfig</override>
  569.  
  570. <usage>
  571.     <p>An optional DN used to bind to the server when searching for
  572.     entries. If not provided, <module>mod_auth_ldap</module> will use
  573.     an anonymous bind.</p>
  574. </usage>
  575. </directivesynopsis>
  576.  
  577. <directivesynopsis>
  578. <name>AuthLDAPBindPassword</name>
  579. <description>Password used in conjuction with the bind DN</description>
  580. <syntax>AuthLDAPBindPassword <em>password</em></syntax>
  581. <contextlist><context>directory</context><context>.htaccess</context>
  582. </contextlist>
  583. <override>AuthConfig</override>
  584.  
  585. <usage>
  586.     <p>A bind password to use in conjunction with the bind DN. Note
  587.     that the bind password is probably sensitive data, and should be
  588.     properly protected. You should only use the <directive
  589.     module="mod_auth_ldap">AuthLDAPBindDN</directive> and <directive
  590.     module="mod_auth_ldap">AuthLDAPBindPassword</directive> if you
  591.     absolutely need them to search the directory.</p> 
  592. </usage>
  593. </directivesynopsis>
  594.  
  595. <directivesynopsis>
  596. <name>AuthLDAPCharsetConfig</name>
  597. <description>Language to charset conversion configuration file</description>
  598. <syntax>AuthLDAPCharsetConfig <em>file-path</em></syntax>
  599. <contextlist><context>server config</context>
  600. </contextlist>
  601.  
  602. <usage>
  603.     <p>The <directive>AuthLDAPCharsetConfig</directive> directive sets the location
  604.     of the language to charset conversion configuration file. <var>File-path</var> is relative
  605.     to the <directive module="core">ServerRoot</directive>. This file specifies
  606.     the list of language extensions to character sets.
  607.     Most administrators use the provided <code>charset.conv</code>
  608.     file, which associates common language extensions to character sets.</p>
  609.  
  610.     <p>The file contains lines in the following format:</p>
  611.  
  612.     <example>
  613.       <var>Language-Extension</var> <var>charset</var> [<var>Language-String</var>] ...
  614.     </example>
  615.  
  616.     <p>The case of the extension does not matter. Blank lines, and lines
  617.     beginning with a hash character (<code>#</code>) are ignored.</p>
  618. </usage>
  619. </directivesynopsis>
  620.  
  621. <directivesynopsis>
  622. <name>AuthLDAPCompareDNOnServer</name>
  623. <description>Use the LDAP server to compare the DNs</description>
  624. <syntax>AuthLDAPCompareDNOnServer on|off</syntax>
  625. <default>AuthLDAPCompareDNOnServer on</default>
  626. <contextlist><context>directory</context><context>.htaccess</context>
  627. </contextlist>
  628. <override>AuthConfig</override>
  629.  
  630. <usage>
  631.     <p>When set, <module>mod_auth_ldap</module> will use the LDAP
  632.     server to compare the DNs. This is the only foolproof way to
  633.     compare DNs.  <module>mod_auth_ldap</module> will search the
  634.     directory for the DN specified with the <a
  635.     href="#reqdn"><code>require dn</code></a> directive, then,
  636.     retrieve the DN and compare it with the DN retrieved from the user
  637.     entry. If this directive is not set,
  638.     <module>mod_auth_ldap</module> simply does a string comparison. It
  639.     is possible to get false negatives with this approach, but it is
  640.     much faster. Note the <module>mod_ldap</module> cache can speed up
  641.     DN comparison in most situations.</p>
  642. </usage>
  643. </directivesynopsis>
  644.  
  645. <directivesynopsis>
  646. <name>AuthLDAPDereferenceAliases</name>
  647. <description>When will the module de-reference aliases</description>
  648. <syntax>AuthLDAPDereferenceAliases never|searching|finding|always</syntax>
  649. <default>AuthLDAPDereferenceAliases Always</default>
  650. <contextlist><context>directory</context><context>.htaccess</context>
  651. </contextlist>
  652. <override>AuthConfig</override>
  653.  
  654. <usage>
  655.     <p>This directive specifies when <module>mod_auth_ldap</module> will
  656.     de-reference aliases during LDAP operations. The default is
  657.     <code>always</code>.</p>
  658. </usage>
  659. </directivesynopsis>
  660.  
  661. <directivesynopsis>
  662. <name>AuthLDAPEnabled</name>
  663. <description>Turn on or off LDAP authentication</description>
  664. <syntax> AuthLDAPEnabled on|off</syntax>
  665. <default>AuthLDAPEnabled on</default>
  666. <contextlist><context>directory</context><context>.htaccess</context>
  667. </contextlist>
  668. <override>AuthConfig</override>
  669.  
  670. <usage>
  671.     <p>Set to <code>off</code> to disable
  672.     <module>mod_auth_ldap</module> in certain directories. This is
  673.     useful if you have <module>mod_auth_ldap</module> enabled at or
  674.     near the top of your tree, but want to disable it completely in
  675.     certain locations.</p> 
  676. </usage>
  677. </directivesynopsis>
  678.  
  679. <directivesynopsis>
  680. <name>AuthLDAPFrontPageHack</name>
  681. <description>Allow LDAP authentication to work with MS FrontPage</description>
  682. <syntax>AuthLDAPFrontPageHack on|off</syntax>
  683. <default>AuthLDAPFrontPageHack off</default>
  684. <contextlist><context>directory</context><context>.htaccess</context>
  685. </contextlist>
  686. <override>AuthConfig</override>
  687.  
  688. <usage>
  689.     <p>See the section on <a href="#frontpage">using Microsoft
  690.     FrontPage</a> with <module>mod_auth_ldap</module>.</p>
  691. </usage>
  692. </directivesynopsis>
  693.  
  694. <directivesynopsis>
  695. <name>AuthLDAPGroupAttribute</name>
  696. <description>LDAP attributes used to check for group membership</description>
  697. <syntax>AuthLDAPGroupAttribute <em>attribute</em></syntax>
  698. <contextlist><context>directory</context><context>.htaccess</context>
  699. </contextlist>
  700. <override>AuthConfig</override>
  701.  
  702. <usage>
  703.     <p>This directive specifies which LDAP attributes are used to
  704.     check for group membership. Multiple attributes can be used by
  705.     specifying this directive multiple times. If not specified,
  706.     then <module>mod_auth_ldap</module> uses the <code>member</code> and
  707.     <code>uniquemember</code> attributes.</p>
  708. </usage>
  709. </directivesynopsis>
  710.  
  711. <directivesynopsis>
  712. <name>AuthLDAPGroupAttributeIsDN</name>
  713. <description>Use the DN of the client username when checking for
  714. group membership</description>
  715. <syntax>AuthLDAPGroupAttributeIsDN on|off</syntax>
  716. <default>AuthLDAPGroupAttributeIsDN on</default>
  717. <contextlist><context>directory</context><context>.htaccess</context>
  718. </contextlist>
  719. <override>AuthConfig</override>
  720.  
  721. <usage>
  722.     <p>When set <code>on</code>, this directive says to use the
  723.     distinguished name of the client username when checking for group
  724.     membership.  Otherwise, the username will be used. For example,
  725.     assume that the client sent the username <code>bjenson</code>,
  726.     which corresponds to the LDAP DN <code>cn=Babs Jenson,
  727.     o=Airius</code>. If this directive is set,
  728.     <module>mod_auth_ldap</module> will check if the group has
  729.     <code>cn=Babs Jenson, o=Airius</code> as a member. If this
  730.     directive is not set, then <module>mod_auth_ldap</module> will
  731.     check if the group has <code>bjenson</code> as a member.</p>
  732. </usage>
  733. </directivesynopsis>
  734.  
  735. <directivesynopsis>
  736. <name>AuthLDAPRemoteUserIsDN</name>
  737. <description>Use the DN of the client username to set the REMOTE_USER
  738. environment variable</description>
  739. <syntax>AuthLDAPRemoteUserIsDN on|off</syntax>
  740. <default>AuthLDAPRemoteUserIsDN off</default>
  741. <contextlist><context>directory</context><context>.htaccess</context>
  742. </contextlist>
  743. <override>AuthConfig</override>
  744.  
  745. <usage>
  746.     <p>If this directive is set to on, the value of the
  747.     <code>REMOTE_USER</code> environment variable will be set to the full
  748.     distinguished name of the authenticated user, rather than just
  749.     the username that was passed by the client. It is turned off by
  750.     default.</p>
  751. </usage>
  752. </directivesynopsis>
  753.  
  754. <directivesynopsis>
  755. <name>AuthLDAPUrl</name>
  756. <description>URL specifying the LDAP search parameters</description>
  757. <syntax>AuthLDAPUrl <em>url</em></syntax>
  758. <contextlist><context>directory</context><context>.htaccess</context>
  759. </contextlist>
  760. <override>AuthConfig</override>
  761.  
  762. <usage>
  763.     <p>An RFC 2255 URL which specifies the LDAP search parameters
  764.     to use. The syntax of the URL is</p>
  765. <example>ldap://host:port/basedn?attribute?scope?filter</example>
  766.  
  767. <dl>
  768. <dt>ldap</dt>
  769.  
  770.         <dd>For regular ldap, use the
  771.         string <code>ldap</code>. For secure LDAP, use <code>ldaps</code>
  772.         instead. Secure LDAP is only available if Apache was linked
  773.         to an LDAP library with SSL support.</dd>
  774.  
  775. <dt>host:port</dt>
  776.  
  777.         <dd>
  778.           <p>The name/port of the ldap server (defaults to
  779.           <code>localhost:389</code> for <code>ldap</code>, and
  780.           <code>localhost:636</code> for <code>ldaps</code>). To
  781.           specify multiple, redundant LDAP servers, just list all
  782.           servers, separated by spaces. <module>mod_auth_ldap</module>
  783.           will try connecting to each server in turn, until it makes a
  784.           successful connection.</p>
  785.  
  786.           <p>Once a connection has been made to a server, that
  787.           connection remains active for the life of the
  788.           <code>httpd</code> process, or until the LDAP server goes
  789.           down.</p>
  790.  
  791.           <p>If the LDAP server goes down and breaks an existing
  792.           connection, <module>mod_auth_ldap</module> will attempt to
  793.           re-connect, starting with the primary server, and trying
  794.           each redundant server in turn. Note that this is different
  795.           than a true round-robin search.</p>
  796.         </dd>
  797.  
  798. <dt>basedn</dt>
  799.  
  800.         <dd>The DN of the branch of the
  801.         directory where all searches should start from. At the very
  802.         least, this must be the top of your directory tree, but
  803.         could also specify a subtree in the directory.</dd>
  804.  
  805. <dt>attribute</dt>
  806.  
  807.         <dd>The attribute to search for.
  808.         Although RFC 2255 allows a comma-separated list of
  809.         attributes, only the first attribute will be used, no
  810.         matter how many are provided. If no attributes are
  811.         provided, the default is to use <code>uid</code>. It's a good
  812.         idea to choose an attribute that will be unique across all
  813.         entries in the subtree you will be using.</dd>
  814.  
  815. <dt>scope</dt>
  816.  
  817.         <dd>The scope of the search. Can be either <code>one</code> or
  818.         <code>sub</code>. Note that a scope of <code>base</code> is
  819.         also supported by RFC 2255, but is not supported by this
  820.         module. If the scope is not provided, or if <code>base</code> scope
  821.         is specified, the default is to use a scope of
  822.         <code>sub</code>.</dd>
  823.  
  824. <dt>filter</dt>
  825.  
  826.         <dd>A valid LDAP search filter. If
  827.         not provided, defaults to <code>(objectClass=*)</code>, which
  828.         will search for all objects in the tree. Filters are
  829.         limited to approximately 8000 characters (the definition of
  830.         <code>MAX_STRING_LEN</code> in the Apache source code). This
  831.         should be than sufficient for any application.</dd>
  832. </dl>
  833.  
  834.     <p>When doing searches, the attribute, filter and username passed
  835.     by the HTTP client are combined to create a search filter that
  836.     looks like
  837.     <code>(&(<em>filter</em>)(<em>attribute</em>=<em>username</em>))</code>.</p>
  838.  
  839.     <p>For example, consider an URL of
  840.     <code>ldap://ldap.airius.com/o=Airius?cn?sub?(posixid=*)</code>. When
  841.     a client attempts to connect using a username of <code>Babs
  842.     Jenson</code>, the resulting search filter will be
  843.     <code>(&(posixid=*)(cn=Babs Jenson))</code>.</p>
  844.  
  845.     <p>See above for examples of <directive
  846.     module="mod_auth_ldap">AuthLDAPURL</directive> URLs.</p>
  847. </usage>
  848. </directivesynopsis>
  849.  
  850. </modulesynopsis>
  851.