<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_authnz_ldap

可用语言:  en  |  fr 

描述允许使用 LDAP 目录存储 HTTP 基本身份验证的数据库。
状态扩展
模块标识符authnz_ldap_module
源文件mod_authnz_ldap.c
兼容性在 2.1 及更高版本中可用

摘要

此模块允许身份验证前端(例如 mod_auth_basic)通过 ldap 目录对用户进行身份验证。

mod_authnz_ldap 支持以下功能

当使用 mod_auth_basic 时,此模块通过 AuthBasicProvider 指令使用 ldap 值调用。

Support Apache!

主题

指令

Bugfix 检查清单

另请参阅

top

内容

top

一般注意事项

此模块根据 mod_ldap 的配置缓存身份验证和授权结果。对后端 LDAP 服务器所做的更改不会立即反映在 HTTP 服务器上,包括但不限于用户锁定/撤销、密码更改或组成员资格更改。有关缓存可调参数的详细信息,请参阅 mod_ldap 中的指令。

top

操作

向用户授予访问权限有两个阶段。第一个阶段是身份验证,在此阶段,mod_authnz_ldap 身份验证提供程序验证用户的凭据是否有效。这也被称为搜索/绑定阶段。第二个阶段是授权,在此阶段,mod_authnz_ldap 确定已验证的用户是否被允许访问所讨论的资源。这也被称为比较阶段。

mod_authnz_ldap 注册了一个 authn_ldap 身份验证提供程序和一个 authz_ldap 授权处理程序。authn_ldap 身份验证提供程序可以通过 AuthBasicProvider 指令使用 ldap 值启用。authz_ldap 处理程序通过添加 ldap-userldap-dnldap-group 值来扩展 Require 指令的授权类型。

身份验证阶段

在身份验证阶段,mod_authnz_ldap 在目录中搜索与 HTTP 客户端传递的用户名匹配的条目。如果找到一个唯一的匹配项,则 mod_authnz_ldap 尝试使用条目的 DN 加上 HTTP 客户端提供的密码绑定到目录服务器。因为它执行搜索,然后绑定,所以它通常被称为搜索/绑定阶段。以下是搜索/绑定阶段执行的步骤。

  1. 通过将 AuthLDAPURL 指令中提供的属性和过滤器与 HTTP 客户端传递的用户名组合来生成搜索过滤器。
  2. 使用生成的过滤器搜索目录。如果搜索没有返回完全一个条目,则拒绝或拒绝访问。
  3. 获取从搜索中检索到的条目的可分辨名称,并尝试使用该 DN 和 HTTP 客户端传递的密码绑定到 LDAP 服务器。如果绑定不成功,则拒绝或拒绝访问。

以下指令在搜索/绑定阶段使用

AuthLDAPURL 指定 LDAP 服务器、基本 DN、要在搜索中使用的属性以及要使用的额外搜索过滤器。
AuthLDAPBindDN 在搜索阶段绑定的可选 DN。
AuthLDAPBindPassword 在搜索阶段绑定的可选密码。

授权阶段

在授权阶段,mod_authnz_ldap 尝试确定用户是否有权访问该资源。许多这些检查都需要 mod_authnz_ldap 对 LDAP 服务器执行比较操作。这就是为什么这个阶段通常被称为比较阶段。 mod_authnz_ldap 接受以下 Require 指令来确定凭据是否可接受

也可以使用其他 Require 值,这些值可能需要加载其他授权模块。

mod_authnz_ldap 在比较阶段使用以下指令

AuthLDAPURL URL 中指定的属性用于 Require ldap-user 操作的比较操作。
AuthLDAPCompareDNOnServer 确定 Require ldap-dn 指令的行为。
AuthLDAPGroupAttribute 确定在 Require ldap-group 指令中使用的属性,用于比较。
AuthLDAPGroupAttributeIsDN 指定在对 Require ldap-group 指令进行比较时,是否使用用户 DN 或用户名。
AuthLDAPMaxSubGroupDepth 确定在 Require ldap-group 指令中比较期间评估的子组的最大深度。
AuthLDAPSubGroupAttribute Require ldap-group指令中,用于获取当前组的子组成员进行比较时的属性。
AuthLDAPSubGroupClass 指定LDAP objectClass值,用于在Require ldap-group指令的子组处理过程中识别查询的目录对象是否真正是组对象(而不是用户对象)。
top

Require 指令

Apache的Require指令在授权阶段使用,以确保用户被允许访问资源。mod_authnz_ldap使用ldap-userldap-dnldap-groupldap-attributeldap-filter扩展了授权类型。也可以使用其他授权类型,但可能需要加载额外的授权模块。

从v2.4.8开始,LDAP require指令中支持表达式

Require ldap-user

Require ldap-user指令指定哪些用户名可以访问资源。一旦mod_authnz_ldap从目录中检索到唯一的DN,它就会使用Require ldap-user中指定的用户名执行LDAP比较操作,以查看该用户名是否属于刚刚获取的LDAP条目。可以通过在同一行上用空格分隔多个用户名来授予多个用户访问权限。如果用户名中包含空格,则必须用双引号将其括起来。也可以使用多个Require ldap-user指令来授予多个用户访问权限,每个指令一行。例如,对于AuthLDAPURLldap://ldap/o=Example?cn(即,cn用于搜索),可以使用以下Require指令来限制访问权限

Require ldap-user "Barbara Jenson"
Require ldap-user "Fred User"
Require ldap-user "Joe Manager"

由于mod_authnz_ldap处理此指令的方式,Barbara Jenson可以以Barbara JensonBabs Jenson或她LDAP条目中的任何其他cn登录。只需要一行Require ldap-user即可支持用户条目中属性的所有值。

如果在上面的URL中使用uid属性而不是cn属性,则可以将上面的三行缩减为

Require ldap-user bjenson fuser jmanager

Require ldap-group

此指令指定一个LDAP组,其成员被允许访问。它接受LDAP组的识别名称。注意:不要用引号将组名括起来。例如,假设LDAP目录中存在以下条目

dn: cn=Administrators, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Barbara Jenson, o=Example
uniqueMember: cn=Fred User, o=Example

以下指令将授予Fred和Barbara访问权限

Require ldap-group cn=Administrators, o=Example

如果AuthLDAPMaxSubGroupDepth设置为大于0的值,则还可以从指定LDAP组的子组中找到成员。例如,假设LDAP目录中存在以下条目

dn: cn=Employees, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Managers, o=Example
uniqueMember: cn=Administrators, o=Example
uniqueMember: cn=Users, o=Example

dn: cn=Managers, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Bob Ellis, o=Example
uniqueMember: cn=Tom Jackson, o=Example

dn: cn=Administrators, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Barbara Jenson, o=Example
uniqueMember: cn=Fred User, o=Example

dn: cn=Users, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Allan Jefferson, o=Example
uniqueMember: cn=Paul Tilley, o=Example
uniqueMember: cn=Temporary Employees, o=Example

dn: cn=Temporary Employees, o=Example
objectClass: groupOfUniqueNames
uniqueMember: cn=Jim Swenson, o=Example
uniqueMember: cn=Elliot Rhodes, o=Example

以下指令将允许Bob Ellis、Tom Jackson、Barbara Jenson、Fred User、Allan Jefferson和Paul Tilley访问,但不会允许Jim Swenson或Elliot Rhodes访问(因为它们位于子组深度为2的位置)。

Require ldap-group cn=Employees, o=Example
AuthLDAPMaxSubGroupDepth 1

此指令的行为受AuthLDAPGroupAttributeAuthLDAPGroupAttributeIsDNAuthLDAPMaxSubGroupDepthAuthLDAPSubGroupAttributeAuthLDAPSubGroupClass指令的影响。

Require ldap-dn

Require ldap-dn指令允许管理员根据识别名称授予访问权限。它指定一个必须匹配的DN才能授予访问权限。如果从目录服务器检索到的识别名称与Require ldap-dn中的识别名称匹配,则授予授权。注意:不要用引号将识别名称括起来。

以下指令将授予特定DN访问权限

Require ldap-dn cn=Barbara Jenson, o=Example

此指令的行为受AuthLDAPCompareDNOnServer指令的影响。

Require ldap-attribute

Require ldap-attribute指令允许管理员根据LDAP目录中已验证用户的属性授予访问权限。如果目录中的属性与配置中给定的值匹配,则授予访问权限。

以下指令将授予任何具有属性employeeType = active的用户的访问权限

Require ldap-attribute employeeType="active"

可以在同一行上用空格分隔多个属性/值对,也可以在多个Require ldap-attribute指令中指定它们。列出多个属性/值对的效果是OR操作。如果任何列出的属性值与用户对象中相应属性的值匹配,则授予访问权限。如果属性的值包含空格,则只有该值必须用双引号括起来。

以下指令将授予任何具有city属性等于“San Jose”或status等于“Active”的用户的访问权限

Require ldap-attribute city="San Jose" status="active"

Require ldap-filter

Require ldap-filter指令允许管理员根据复杂的LDAP搜索过滤器授予访问权限。如果过滤器搜索返回的dn与已验证用户的dn匹配,则授予访问权限。

以下指令将授予任何拥有手机并且在营销部门的用户的访问权限

Require ldap-filter "&(cell=*)(department=marketing)"

Require ldap-filter指令和Require ldap-attribute指令之间的区别在于,ldap-filter使用指定的搜索过滤器对LDAP目录执行搜索操作,而不是简单的属性比较。如果只需要简单的属性比较,则ldap-attribute执行的比较操作将比ldap-filter使用的搜索操作更快,尤其是在大型目录中。

在过滤器中使用表达式时,必须注意确保正确转义LDAP过滤器,以防止LDAP注入。可以使用ldap函数来实现此目的。

<LocationMatch ^/dav/(?<SITENAME>[^/]+)/>
  Require ldap-filter (memberOf=cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}},ou=Websites,o=Example)
</LocationMatch>
top

示例

top

使用 TLS

要使用TLS,请参见mod_ldap指令LDAPTrustedClientCertLDAPTrustedGlobalCertLDAPTrustedMode

可以在AuthLDAPURL中添加一个可选的第二个参数来覆盖LDAPTrustedMode设置的默认连接类型。这将允许由ldap:// URL建立的连接在同一端口上升级到安全连接。

top

使用 SSL

要使用SSL,请参见mod_ldap指令LDAPTrustedClientCertLDAPTrustedGlobalCertLDAPTrustedMode

要指定一个安全的LDAP服务器,请在AuthLDAPURL指令中使用ldaps://,而不是ldap://

top

公开登录信息

当此模块执行身份验证时,AuthLDAPURL指令中指定的ldap属性将被放置在以“AUTHENTICATE_”为前缀的环境变量中。

当此模块执行授权时,AuthLDAPURL指令中指定的ldap属性将被放置在以“AUTHORIZE_”为前缀的环境变量中。

如果属性字段包含用户的用户名、通用名称和电话号码,则CGI程序可以访问此信息,而无需进行第二次独立的LDAP查询来收集此附加信息。

这有可能极大地简化某些Web应用程序所需的编码和配置。

top

使用 Active Directory

Active Directory安装可以同时支持多个域。为了区分不同域的用户,可以在目录中用户的条目中添加一个名为用户主体名称(UPN)的标识符。此UPN通常采用用户的帐户名称后跟特定域的域组件的形式,例如[email protected]

您可能希望配置mod_authnz_ldap模块来验证构成Active Directory林的所有域中存在的用户。这样,[email protected][email protected]都可以使用相同的查询同时进行身份验证。

为了使这成为现实,Active Directory支持全局目录的概念。此全局目录是Active Directory林中所有Active Directory服务器的选定属性的只读副本。查询全局目录允许在单个查询中查询所有域,而无需查询跨越可能速度很慢的链接的服务器。

如果启用,全局目录是一个独立的目录服务器,它在端口3268(SSL为3269)上运行。要搜索用户,请对属性userPrincipalName执行子树搜索,搜索根为空,如下所示

AuthLDAPBindDN [email protected]
AuthLDAPBindPassword password
AuthLDAPURL ldap://10.0.0.1:3268/?userPrincipalName?sub

用户需要以[email protected]的形式输入他们的用户主体名称作为登录名。

top

将mod_authnz_ldap与Microsoft FrontPage一起使用

通常,FrontPage使用FrontPage Web特定的用户/组文件(即,mod_authn_filemod_authz_groupfile模块)来处理所有身份验证。不幸的是,无法通过添加适当的指令来简单地更改为LDAP身份验证,因为它会破坏FrontPage客户端中的权限表单,这些表单试图修改标准的基于文本的授权文件。

创建FrontPage Web后,向其添加LDAP身份验证只需向Web中创建的每个.htaccess文件添加以下指令即可

AuthLDAPURL       "the url"
AuthGroupFile     "mygroupfile"
Require group     "mygroupfile"

工作原理

FrontPage 通过在 .htaccess 文件中添加 Require valid-user 指令来限制对网站的访问。Require valid-user 指令对于任何在 LDAP 中有效的用户来说都会成功。这意味着任何在 LDAP 目录中拥有条目的人都被视为有效用户,而 FrontPage 仅将本地用户文件中的那些人视为有效用户。通过用组文件授权替换 ldap-group,Apache 可以在处理用户授权时查询本地用户文件(由 FrontPage 管理)——而不是 LDAP。

在按照上述说明添加指令后,FrontPage 用户将能够从 FrontPage 客户端执行所有管理操作。

注意事项

top

AuthLDAPAuthorizePrefix 指令

描述指定授权期间设置的环境变量的前缀
语法AuthLDAPAuthorizePrefix prefix
默认值AuthLDAPAuthorizePrefix AUTHORIZE_
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap
兼容性在版本 2.3.6 及更高版本中可用

此指令允许您覆盖在 LDAP 授权期间设置的环境变量使用的前缀。如果指定了 AUTHENTICATE_,则这些环境变量的使用者无论 LDAP 是执行身份验证、授权还是两者都将看到相同的信息。

注意

当用户基于 Require valid-user 被授权时,不会设置任何授权变量。
top

AuthLDAPBindAuthoritative 指令

描述确定当用户可以映射到 DN 但服务器无法使用用户的凭据成功绑定时是否使用其他身份验证提供程序。
语法AuthLDAPBindAuthoritative off|on
默认值AuthLDAPBindAuthoritative on
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap

默认情况下,只有当用户无法映射到 DN 时才会查询后续身份验证提供程序,但如果用户可以映射到 DN 并且无法使用 LDAP 绑定验证其密码,则不会查询。如果将 AuthLDAPBindAuthoritative 设置为 off,则如果 LDAP 绑定(使用当前用户的凭据)由于任何原因失败,其他配置的身份验证模块将有机会验证用户。

这允许同时存在于 LDAP 和 AuthUserFile 中的用户在 LDAP 服务器可用但用户的帐户被锁定或密码无法使用时进行身份验证。

另请参阅

top

AuthLDAPBindDN 指令

描述用于绑定到 LDAP 服务器的可选 DN
语法AuthLDAPBindDN distinguished-name
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap

用于在搜索条目时绑定到服务器的可选 DN。如果没有提供,mod_authnz_ldap 将使用匿名绑定。

top

AuthLDAPBindPassword 指令

描述与绑定 DN 结合使用的密码
语法AuthLDAPBindPassword password
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap
兼容性exec: 在 2.4.5 中添加。

与绑定 DN 结合使用的绑定密码。请注意,绑定密码可能是敏感数据,应妥善保护。只有在绝对需要它们来搜索目录时,才应使用 AuthLDAPBindDNAuthLDAPBindPassword

如果值以 exec: 开头,则将执行生成的命令,并且程序返回到标准输出的第一行将用作密码。

#Password used as-is
AuthLDAPBindPassword secret

#Run /path/to/program to get my password
AuthLDAPBindPassword exec:/path/to/program

#Run /path/to/otherProgram and provide arguments
AuthLDAPBindPassword "exec:/path/to/otherProgram argument1"
top

AuthLDAPCharsetConfig 指令

描述语言到字符集转换配置文件
语法AuthLDAPCharsetConfig file-path
上下文服务器配置
状态扩展
模块mod_authnz_ldap

AuthLDAPCharsetConfig 指令设置语言到字符集转换配置文件的位置。File-path 相对于 ServerRoot。此文件指定语言扩展到字符集的列表。大多数管理员使用提供的 charset.conv 文件,该文件将常见的语言扩展与字符集相关联。

该文件包含以下格式的行

Language-Extension charset [Language-String] ...

扩展名的大小写无关紧要。空行和以井号 (#) 开头的行将被忽略。

top

AuthLDAPCompareAsUser 指令

描述使用经过身份验证的用户的凭据执行授权比较
语法AuthLDAPCompareAsUser on|off
默认值AuthLDAPCompareAsUser off
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap
兼容性在版本 2.3.6 及更高版本中可用

当设置此选项时,并且 mod_authnz_ldap 已对用户进行身份验证,用于授权的 LDAP 比较将使用查询的区分名称 (DN) 和经过身份验证用户的 HTTP 基本身份验证密码,而不是服务器配置的凭据。

ldap-attributeldap-userldap-group(仅限单级)授权检查使用比较。

此指令仅对在 AuthLDAPSearchAsUser 也启用的情况下,在嵌套组处理期间执行的比较有效。

此指令仅应在您的 LDAP 服务器不接受匿名比较并且您无法使用专用的 AuthLDAPBindDN 时使用。

另请参阅

top

AuthLDAPCompareDNOnServer 指令

描述使用 LDAP 服务器比较 DN
语法AuthLDAPCompareDNOnServer on|off
默认值AuthLDAPCompareDNOnServer on
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap

当设置此选项时,mod_authnz_ldap 将使用 LDAP 服务器比较 DN。这是比较 DN 的唯一万无一失的方法。mod_authnz_ldap 将在目录中搜索使用 Require dn 指令指定的 DN,然后检索 DN 并将其与从用户条目中检索的 DN 进行比较。如果未设置此指令,mod_authnz_ldap 仅执行字符串比较。使用这种方法可能会出现假阴性,但速度要快得多。请注意,mod_ldap 缓存可以在大多数情况下加快 DN 比较速度。

top

AuthLDAPDereferenceAliases 指令

描述模块何时取消引用别名
语法AuthLDAPDereferenceAliases never|searching|finding|always
默认值AuthLDAPDereferenceAliases always
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap

此指令指定 mod_authnz_ldap 何时在 LDAP 操作期间取消引用别名。默认值为 always

top

AuthLDAPGroupAttribute 指令

描述用于标识组用户成员的 LDAP 属性。
语法AuthLDAPGroupAttribute attribute
默认值AuthLDAPGroupAttribute member uniqueMember
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap

此指令指定哪些 LDAP 属性用于检查组内的用户成员。可以通过多次指定此指令来使用多个属性。如果未指定,则 mod_authnz_ldap 将使用 memberuniqueMember 属性。

top

AuthLDAPGroupAttributeIsDN 指令

描述在检查组成员身份时使用客户端用户名的 DN
语法AuthLDAPGroupAttributeIsDN on|off
默认值AuthLDAPGroupAttributeIsDN on
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap

当设置为 on 时,此指令表示在检查组成员身份时使用客户端用户名的区分名称。否则,将使用用户名。例如,假设客户端发送了用户名 bjenson,它对应于 LDAP DN cn=Babs Jenson, o=Example。如果设置了此指令,mod_authnz_ldap 将检查该组是否具有 cn=Babs Jenson, o=Example 作为成员。如果未设置此指令,则 mod_authnz_ldap 将检查该组是否具有 bjenson 作为成员。

top

AuthLDAPInitialBindAsUser 指令

描述确定服务器是否使用基本身份验证用户的用户名来执行初始 DN 查找,而不是匿名或使用服务器的硬编码凭据
语法AuthLDAPInitialBindAsUser off|on
默认值AuthLDAPInitialBindAsUser off
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap
兼容性在版本 2.3.6 及更高版本中可用

默认情况下,服务器使用匿名方式或使用专用用户和密码将基本身份验证用户名转换为 LDAP 区分名称 (DN)。此指令强制服务器使用传入用户提供的逐字用户名和密码来执行初始 DN 搜索。

如果逐字用户名无法直接绑定,但需要一些美观的转换,请参见 AuthLDAPInitialBindPattern

此指令仅应在您的 LDAP 服务器不接受匿名搜索并且您无法使用专用的 AuthLDAPBindDN 时使用。

在仅授权的情况下不可用

此指令仅在该模块对用户进行身份验证时才可以使用,并且在该模块仅用于授权时无效。

另请参阅

top

AuthLDAPInitialBindPattern 指令

描述指定绑定到 LDAP 服务器以执行 DN 查找时要使用的基本身份验证用户名的转换
语法AuthLDAPInitialBindPattern regex substitution
默认值AuthLDAPInitialBindPattern (.*) $1 (远程用户名按原样使用)
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap
兼容性在版本 2.3.6 及更高版本中可用

如果将 AuthLDAPInitialBindAsUser 设置为 ON,则基本身份验证用户名将根据正则表达式和替换参数进行转换。

正则表达式参数将与当前基本身份验证用户名进行比较。替换参数可能包含反向引用,但没有其他变量插值。

此指令仅应在您的 LDAP 服务器不接受匿名搜索并且您无法使用专用的 AuthLDAPBindDN 时使用。

AuthLDAPInitialBindPattern (.+) [email protected]
AuthLDAPInitialBindPattern (.+) cn=$1,dc=example,dc=com

在仅授权的情况下不可用

此指令仅在该模块对用户进行身份验证时才可以使用,并且在该模块仅用于授权时无效。

调试

替换后的 DN 记录在环境变量 LDAP_BINDASUSER 中。如果正则表达式与输入不匹配,则使用逐字用户名。

另请参阅

top

AuthLDAPMaxSubGroupDepth 指令

描述指定在用户搜索停止之前将评估的最大子组嵌套深度。
语法AuthLDAPMaxSubGroupDepth 数字
默认值AuthLDAPMaxSubGroupDepth 10
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap
兼容性在 2.3.0 及更高版本中可用

当此指令设置为非零值 X 并与 Require ldap-group someGroupDN 指令一起使用时,将搜索提供的用户凭据,以查看其是否为 someGroupDN 目录对象或当前组的任何组成员的成员,直到此指令指定的最大嵌套级别 X

有关更详细的示例,请参见 Require ldap-group 部分。

嵌套组性能

AuthLDAPSubGroupAttributeAuthLDAPGroupAttribute 重叠(默认情况下以及常见 LDAP 架构的要求)时,对大型组中的子组进行未缓存的搜索可能非常慢。如果您使用大型非嵌套组,请将 AuthLDAPMaxSubGroupDepth 设置为零。

top

AuthLDAPRemoteUserAttribute 指令

描述使用用户查询期间返回的属性的值来设置 REMOTE_USER 环境变量
语法AuthLDAPRemoteUserAttribute uid
默认值
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap

如果设置了此指令,则 REMOTE_USER 环境变量的值将设置为指定的属性的值。确保此属性包含在 AuthLDAPURL 定义中的属性列表中,否则此指令将无效。如果存在,此指令优先于 AuthLDAPRemoteUserIsDN。如果您希望人们使用电子邮件地址登录网站,但后端应用程序期望用户名作为用户 ID,则此指令很有用。

top

AuthLDAPRemoteUserIsDN 指令

描述使用客户端用户名的 DN 来设置 REMOTE_USER 环境变量
语法AuthLDAPRemoteUserIsDN on|off
默认值AuthLDAPRemoteUserIsDN off
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap

如果将此指令设置为 on,则 REMOTE_USER 环境变量的值将设置为经过身份验证的用户的完整识别名称,而不是客户端传递的用户名。默认情况下它处于关闭状态。

top

AuthLDAPSearchAsUser 指令

描述使用经过身份验证的用户的凭据执行授权搜索
语法AuthLDAPSearchAsUser on|off
默认值AuthLDAPSearchAsUser off
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap
兼容性在版本 2.3.6 及更高版本中可用

当设置此指令时,并且 mod_authnz_ldap 已对用户进行身份验证,用于授权的 LDAP 搜索将使用查询的识别名称 (DN) 和经过身份验证的用户的 HTTP 基本身份验证密码,而不是服务器配置的凭据。

ldap-filterldap-dn 授权检查使用搜索。

此指令仅对嵌套组处理期间执行的比较有效,前提是 AuthLDAPCompareAsUser 也已启用。

此指令仅应在您的 LDAP 服务器不接受匿名搜索并且您无法使用专用的 AuthLDAPBindDN 时使用。

另请参阅

top

AuthLDAPSubGroupAttribute 指令

描述指定用于区分当前组中作为组的成员的属性标签,每个指令行一个值。
语法AuthLDAPSubGroupAttribute 属性
默认值AuthLDAPSubGroupAttribute member uniqueMember
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap
兼容性在 2.3.0 及更高版本中可用

LDAP 组对象可能包含作为用户的成员和作为组的成员(称为嵌套组或子组)。AuthLDAPSubGroupAttribute 指令标识组成员的标签,而 AuthLDAPGroupAttribute 指令标识用户成员的标签。可以通过多次指定此指令来使用多个属性。如果未指定,则 mod_authnz_ldap 使用 memberuniqueMember 属性。

top

AuthLDAPSubGroupClass 指令

描述指定哪些 LDAP objectClass 值在子组处理期间标识作为组的目录对象。
语法AuthLDAPSubGroupClass LdapObjectClass
默认值AuthLDAPSubGroupClass groupOfNames groupOfUniqueNames
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap
兼容性在 2.3.0 及更高版本中可用

LDAP 组对象可能包含作为用户的成员和作为组的成员(称为嵌套组或子组)。AuthLDAPSubGroupAttribute 指令标识可能作为当前组的子组的成员的标签(与用户成员相反)。AuthLDAPSubGroupClass 指令指定用于验证这些潜在子组实际上是组对象的 LDAP objectClass 值。然后可以搜索经过验证的子组以查找更多用户或子组成员。可以通过多次指定此指令来使用多个属性。如果未指定,则 mod_authnz_ldap 使用 groupOfNamesgroupOfUniqueNames 值。

top

AuthLDAPURL 指令

描述指定 LDAP 搜索参数的 URL
语法AuthLDAPURL url [NONE|SSL|TLS|STARTTLS]
上下文directory, .htaccess
覆盖AuthConfig
状态扩展
模块mod_authnz_ldap

指定要使用的 LDAP 搜索参数的 RFC 2255 URL。URL 的语法为

ldap://host:port/basedn?attribute?scope?filter

如果您想指定 Apache 应该依次尝试的多个 LDAP URL,则语法为

AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/dc=..."

警告:如果您指定了多个服务器,则需要将整个 URL 字符串括在引号中;否则您将收到错误:“AuthLDAPURL 需要一个参数,用于定义 LDAP 连接的 URL。” 当然,您可以在每个 URL 上使用搜索参数。

ldap
对于常规 ldap,使用字符串 ldap。对于安全 LDAP,请改用 ldaps。安全 LDAP 仅在 Apache 链接到具有 SSL 支持的 LDAP 库时才可用。
host:port

ldap 服务器的名称/端口(对于 ldap 默认值为 localhost:389,对于 ldaps 默认值为 localhost:636)。要指定多个冗余 LDAP 服务器,只需列出所有服务器,并用空格隔开。 mod_authnz_ldap 将依次尝试连接到每个服务器,直到成功建立连接。如果指定了多个 ldap 服务器,则整个 LDAP URL 必须用双引号括起来。

一旦与服务器建立连接,该连接将在 httpd 进程的整个生命周期内保持活动状态,或者直到 LDAP 服务器关闭。

如果 LDAP 服务器关闭并断开现有连接,mod_authnz_ldap 将尝试重新连接,从主服务器开始,并依次尝试每个冗余服务器。请注意,这与真正的循环搜索不同。

basedn
所有搜索应从中开始的目录分支的 DN。至少,这必须是目录树的顶部,但也可能指定目录中的子树。
attribute
要搜索的属性。虽然 RFC 2255 允许使用逗号分隔的属性列表,但无论提供多少属性,都将只使用第一个属性。如果未提供属性,则默认使用 uid。最好选择一个属性,该属性在您将使用的子树中的所有条目中都是唯一的。列出的所有属性都将放入环境中,并带有 AUTHENTICATE_ 前缀,以便其他模块使用。
scope
搜索的范围。可以是 onesub。请注意,RFC 2255 还支持 base 范围,但此模块不支持。如果未提供范围,或指定了 base 范围,则默认使用 sub 范围。
filter
有效的 LDAP 搜索过滤器。如果未提供,则默认为 (objectClass=*),这将搜索树中的所有对象。过滤器限制为大约 8000 个字符(Apache 源代码中 MAX_STRING_LEN 的定义)。这对于任何应用程序来说都应该绰绰有余。在 2.4.10 及更高版本中,关键字 none 将禁用过滤器的使用;某些原始 LDAP 服务器需要这样做。

在执行搜索时,HTTP 客户端传递的属性、过滤器和用户名将组合在一起,创建一个看起来像 (&(filter)(attribute=username)) 的搜索过滤器。

例如,考虑一个 URL ldap://ldap.example.com/o=Example?cn?sub?(posixid=*)。当客户端尝试使用用户名 Babs Jenson 连接时,生成的搜索过滤器将为 (&(posixid=*)(cn=Babs Jenson))

可以添加一个可选参数,以允许 LDAP Url 覆盖连接类型。此参数可以是以下之一

NONE
在默认 LDAP 端口上建立不安全的连接。这与端口 389 上的 ldap:// 相同。
SSL
在默认安全 LDAP 端口上建立安全连接。这与 ldaps:// 相同。
TLS | STARTTLS
在默认 LDAP 端口上建立升级的安全连接。此连接将默认在端口 389 上启动,然后升级到同一端口上的安全连接。

有关 AuthLDAPURL URL 的示例,请参见上文。

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果我们的版主认为这些评论已实施或被认为无效/与主题无关,则可能会被删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上),或发送到我们的 邮件列表