Apache HTTP Server 版本 2.4
描述 | 允许使用 LDAP 目录存储 HTTP 基本身份验证的数据库。 |
---|---|
状态 | 扩展 |
模块标识符 | authnz_ldap_module |
源文件 | mod_authnz_ldap.c |
兼容性 | 在 2.1 及更高版本中可用 |
此模块允许身份验证前端(例如 mod_auth_basic
)通过 ldap 目录对用户进行身份验证。
mod_authnz_ldap
支持以下功能
当使用 mod_auth_basic
时,此模块通过 AuthBasicProvider
指令使用 ldap
值调用。
此模块根据 mod_ldap
的配置缓存身份验证和授权结果。对后端 LDAP 服务器所做的更改不会立即反映在 HTTP 服务器上,包括但不限于用户锁定/撤销、密码更改或组成员资格更改。有关缓存可调参数的详细信息,请参阅 mod_ldap
中的指令。
向用户授予访问权限有两个阶段。第一个阶段是身份验证,在此阶段,mod_authnz_ldap
身份验证提供程序验证用户的凭据是否有效。这也被称为搜索/绑定阶段。第二个阶段是授权,在此阶段,mod_authnz_ldap
确定已验证的用户是否被允许访问所讨论的资源。这也被称为比较阶段。
mod_authnz_ldap
注册了一个 authn_ldap 身份验证提供程序和一个 authz_ldap 授权处理程序。authn_ldap 身份验证提供程序可以通过 AuthBasicProvider
指令使用 ldap
值启用。authz_ldap 处理程序通过添加 ldap-user
、ldap-dn
和 ldap-group
值来扩展 Require
指令的授权类型。
在身份验证阶段,mod_authnz_ldap
在目录中搜索与 HTTP 客户端传递的用户名匹配的条目。如果找到一个唯一的匹配项,则 mod_authnz_ldap
尝试使用条目的 DN 加上 HTTP 客户端提供的密码绑定到目录服务器。因为它执行搜索,然后绑定,所以它通常被称为搜索/绑定阶段。以下是搜索/绑定阶段执行的步骤。
AuthLDAPURL
指令中提供的属性和过滤器与 HTTP 客户端传递的用户名组合来生成搜索过滤器。以下指令在搜索/绑定阶段使用
AuthLDAPURL |
指定 LDAP 服务器、基本 DN、要在搜索中使用的属性以及要使用的额外搜索过滤器。 |
AuthLDAPBindDN |
在搜索阶段绑定的可选 DN。 |
AuthLDAPBindPassword |
在搜索阶段绑定的可选密码。 |
在授权阶段,mod_authnz_ldap
尝试确定用户是否有权访问该资源。许多这些检查都需要 mod_authnz_ldap
对 LDAP 服务器执行比较操作。这就是为什么这个阶段通常被称为比较阶段。 mod_authnz_ldap
接受以下 Require
指令来确定凭据是否可接受
Require ldap-user
指令,并且指令中的用户名与客户端传递的用户名匹配,则授予访问权限。Require ldap-dn
指令,并且指令中的 DN 与从 LDAP 目录中获取的 DN 匹配,则授予访问权限。Require ldap-group
指令,并且从 LDAP 目录中获取的 DN(或客户端传递的用户名)出现在 LDAP 组中,或者可能出现在其子组之一中,则授予访问权限。Require ldap-attribute
指令,并且从 LDAP 目录中获取的属性与给定值匹配,则授予访问权限。Require ldap-filter
指令,并且搜索过滤器成功找到一个与已验证用户的 dn 匹配的单个用户对象,则授予访问权限。也可以使用其他 Require
值,这些值可能需要加载其他授权模块。
Require valid-user
指令,则授予所有成功验证的用户访问权限。(需要 mod_authz_user
)Require group
指令,并且 mod_authz_groupfile
已使用 AuthGroupFile
指令加载,则授予访问权限。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 指令的子组处理过程中识别查询的目录对象是否真正是组对象(而不是用户对象)。 |
Apache的Require
指令在授权阶段使用,以确保用户被允许访问资源。mod_authnz_ldap使用ldap-user
、ldap-dn
、ldap-group
、ldap-attribute
和ldap-filter
扩展了授权类型。也可以使用其他授权类型,但可能需要加载额外的授权模块。
从v2.4.8开始,LDAP require指令中支持表达式。
Require ldap-user
指令指定哪些用户名可以访问资源。一旦mod_authnz_ldap
从目录中检索到唯一的DN,它就会使用Require ldap-user
中指定的用户名执行LDAP比较操作,以查看该用户名是否属于刚刚获取的LDAP条目。可以通过在同一行上用空格分隔多个用户名来授予多个用户访问权限。如果用户名中包含空格,则必须用双引号将其括起来。也可以使用多个Require ldap-user
指令来授予多个用户访问权限,每个指令一行。例如,对于AuthLDAPURL
为ldap://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 Jenson、Babs Jenson或她LDAP条目中的任何其他cn
登录。只需要一行Require ldap-user
即可支持用户条目中属性的所有值。
如果在上面的URL中使用uid
属性而不是cn
属性,则可以将上面的三行缩减为
Require ldap-user bjenson fuser jmanager
此指令指定一个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
此指令的行为受AuthLDAPGroupAttribute
、AuthLDAPGroupAttributeIsDN
、AuthLDAPMaxSubGroupDepth
、AuthLDAPSubGroupAttribute
和AuthLDAPSubGroupClass
指令的影响。
Require ldap-dn
指令允许管理员根据识别名称授予访问权限。它指定一个必须匹配的DN才能授予访问权限。如果从目录服务器检索到的识别名称与Require ldap-dn
中的识别名称匹配,则授予授权。注意:不要用引号将识别名称括起来。
以下指令将授予特定DN访问权限
Require ldap-dn cn=Barbara Jenson, o=Example
此指令的行为受AuthLDAPCompareDNOnServer
指令的影响。
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
指令允许管理员根据复杂的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>
AuthLDAPURL "ldap://ldap1.example.com:389/ou=People, o=Example?uid?sub?(objectClass=*)" Require valid-user
AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/ou=People, o=Example" Require valid-user
cn
,这可能会出现问题,因为对cn
的搜索**必须**返回一个条目。这就是不推荐这种方法的原因:最好选择一个在目录中保证唯一的属性,例如uid
。AuthLDAPURL "ldap://ldap.example.com/ou=People, o=Example?cn" Require valid-user
AuthLDAPURL ldap://ldap.example.com/o=Example?uid Require ldap-group cn=Administrators, o=Example
AuthLDAPURL ldap://ldap.example.com/o=Example?uid Require ldap-group cn=%{SERVER_NAME}, o=Example
qpagePagerID
的LDAP属性。该示例将仅授予拥有字母数字寻呼机的人员(通过他们的UID进行身份验证)访问权限AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(qpagePagerID=*) Require valid-user
下一个示例演示了使用过滤器来完成复杂管理要求的强大功能。如果没有过滤器,就需要创建一个新的LDAP组,并确保该组的成员与寻呼机用户保持同步。使用过滤器,这变得微不足道。目标是授予任何拥有寻呼机的人员访问权限,以及授予Joe Manager访问权限,他虽然没有寻呼机,但需要访问相同的资源
AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(|(qpagePagerID=*)(uid=jmanager)) Require valid-user
最后这个可能乍一看很令人困惑,因此,根据谁连接,评估搜索过滤器将是什么样子会有所帮助,如下所示。如果Fred User以fuser
身份连接,则过滤器将如下所示
(&(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))
上面的搜索只有在fuser拥有寻呼机时才会成功。当Joe Manager以jmanager身份连接时,过滤器如下所示
(&(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))
上面的搜索无论jmanager是否拥有寻呼机都会成功。
要使用TLS,请参见mod_ldap
指令LDAPTrustedClientCert
、LDAPTrustedGlobalCert
和LDAPTrustedMode
。
可以在AuthLDAPURL
中添加一个可选的第二个参数来覆盖LDAPTrustedMode
设置的默认连接类型。这将允许由ldap:// URL建立的连接在同一端口上升级到安全连接。
要使用SSL,请参见mod_ldap
指令LDAPTrustedClientCert
、LDAPTrustedGlobalCert
和LDAPTrustedMode
。
要指定一个安全的LDAP服务器,请在AuthLDAPURL
指令中使用ldaps://,而不是ldap://。
当此模块执行身份验证时,AuthLDAPURL
指令中指定的ldap属性将被放置在以“AUTHENTICATE_”为前缀的环境变量中。
当此模块执行授权时,AuthLDAPURL
指令中指定的ldap属性将被放置在以“AUTHORIZE_”为前缀的环境变量中。
如果属性字段包含用户的用户名、通用名称和电话号码,则CGI程序可以访问此信息,而无需进行第二次独立的LDAP查询来收集此附加信息。
这有可能极大地简化某些Web应用程序所需的编码和配置。
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]的形式输入他们的用户主体名称作为登录名。
通常,FrontPage使用FrontPage Web特定的用户/组文件(即,mod_authn_file
和mod_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 客户端执行所有管理操作。
mod_authn_file
用户文件中。用户 ID 是最理想的选择。mod_auth_basic
、mod_authn_file
和 mod_authz_groupfile
进行编译才能使用 FrontPage 支持。这是因为 Apache 仍然会使用 mod_authz_groupfile
组文件来确定用户对 FrontPage 网站的访问权限。.htaccess
文件中。尝试将它们放在 <Location>
或 <Directory>
指令中将不起作用。这是因为 mod_authnz_ldap
必须能够获取在 FrontPage .htaccess
文件中找到的 AuthGroupFile
指令,以便它知道在哪里查找有效用户列表。如果 mod_authnz_ldap
指令不在与 FrontPage 指令相同的 .htaccess
文件中,那么这个技巧将不起作用,因为 mod_authnz_ldap
将永远没有机会处理 .htaccess
文件,并且无法找到 FrontPage 管理的用户文件。描述 | 指定授权期间设置的环境变量的前缀 |
---|---|
语法 | AuthLDAPAuthorizePrefix prefix |
默认值 | AuthLDAPAuthorizePrefix AUTHORIZE_ |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
兼容性 | 在版本 2.3.6 及更高版本中可用 |
此指令允许您覆盖在 LDAP 授权期间设置的环境变量使用的前缀。如果指定了 AUTHENTICATE_,则这些环境变量的使用者无论 LDAP 是执行身份验证、授权还是两者都将看到相同的信息。
Require valid-user
被授权时,不会设置任何授权变量。描述 | 确定当用户可以映射到 DN 但服务器无法使用用户的凭据成功绑定时是否使用其他身份验证提供程序。 |
---|---|
语法 | AuthLDAPBindAuthoritative off|on |
默认值 | AuthLDAPBindAuthoritative on |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
默认情况下,只有当用户无法映射到 DN 时才会查询后续身份验证提供程序,但如果用户可以映射到 DN 并且无法使用 LDAP 绑定验证其密码,则不会查询。如果将 AuthLDAPBindAuthoritative
设置为 off,则如果 LDAP 绑定(使用当前用户的凭据)由于任何原因失败,其他配置的身份验证模块将有机会验证用户。
这允许同时存在于 LDAP 和 AuthUserFile
中的用户在 LDAP 服务器可用但用户的帐户被锁定或密码无法使用时进行身份验证。
描述 | 用于绑定到 LDAP 服务器的可选 DN |
---|---|
语法 | AuthLDAPBindDN distinguished-name |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
用于在搜索条目时绑定到服务器的可选 DN。如果没有提供,mod_authnz_ldap
将使用匿名绑定。
描述 | 与绑定 DN 结合使用的密码 |
---|---|
语法 | AuthLDAPBindPassword password |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
兼容性 | exec: 在 2.4.5 中添加。 |
与绑定 DN 结合使用的绑定密码。请注意,绑定密码可能是敏感数据,应妥善保护。只有在绝对需要它们来搜索目录时,才应使用 AuthLDAPBindDN
和 AuthLDAPBindPassword
。
如果值以 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"
描述 | 语言到字符集转换配置文件 |
---|---|
语法 | AuthLDAPCharsetConfig file-path |
上下文 | 服务器配置 |
状态 | 扩展 |
模块 | mod_authnz_ldap |
AuthLDAPCharsetConfig
指令设置语言到字符集转换配置文件的位置。File-path 相对于 ServerRoot
。此文件指定语言扩展到字符集的列表。大多数管理员使用提供的 charset.conv
文件,该文件将常见的语言扩展与字符集相关联。
该文件包含以下格式的行
Language-Extension charset [Language-String] ...
扩展名的大小写无关紧要。空行和以井号 (#
) 开头的行将被忽略。
描述 | 使用经过身份验证的用户的凭据执行授权比较 |
---|---|
语法 | AuthLDAPCompareAsUser on|off |
默认值 | AuthLDAPCompareAsUser off |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
兼容性 | 在版本 2.3.6 及更高版本中可用 |
当设置此选项时,并且 mod_authnz_ldap
已对用户进行身份验证,用于授权的 LDAP 比较将使用查询的区分名称 (DN) 和经过身份验证用户的 HTTP 基本身份验证密码,而不是服务器配置的凭据。
ldap-attribute、ldap-user 和 ldap-group(仅限单级)授权检查使用比较。
此指令仅对在 AuthLDAPSearchAsUser
也启用的情况下,在嵌套组处理期间执行的比较有效。
此指令仅应在您的 LDAP 服务器不接受匿名比较并且您无法使用专用的 AuthLDAPBindDN
时使用。
描述 | 使用 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 比较速度。
描述 | 模块何时取消引用别名 |
---|---|
语法 | AuthLDAPDereferenceAliases never|searching|finding|always |
默认值 | AuthLDAPDereferenceAliases always |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
此指令指定 mod_authnz_ldap
何时在 LDAP 操作期间取消引用别名。默认值为 always
。
描述 | 用于标识组用户成员的 LDAP 属性。 |
---|---|
语法 | AuthLDAPGroupAttribute attribute |
默认值 | AuthLDAPGroupAttribute member uniqueMember |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
此指令指定哪些 LDAP 属性用于检查组内的用户成员。可以通过多次指定此指令来使用多个属性。如果未指定,则 mod_authnz_ldap
将使用 member
和 uniqueMember
属性。
描述 | 在检查组成员身份时使用客户端用户名的 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
作为成员。
描述 | 确定服务器是否使用基本身份验证用户的用户名来执行初始 DN 查找,而不是匿名或使用服务器的硬编码凭据 |
---|---|
语法 | AuthLDAPInitialBindAsUser off|on |
默认值 | AuthLDAPInitialBindAsUser off |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
兼容性 | 在版本 2.3.6 及更高版本中可用 |
默认情况下,服务器使用匿名方式或使用专用用户和密码将基本身份验证用户名转换为 LDAP 区分名称 (DN)。此指令强制服务器使用传入用户提供的逐字用户名和密码来执行初始 DN 搜索。
如果逐字用户名无法直接绑定,但需要一些美观的转换,请参见 AuthLDAPInitialBindPattern
。
此指令仅应在您的 LDAP 服务器不接受匿名搜索并且您无法使用专用的 AuthLDAPBindDN
时使用。
描述 | 指定绑定到 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
描述 | 指定在用户搜索停止之前将评估的最大子组嵌套深度。 |
---|---|
语法 | AuthLDAPMaxSubGroupDepth 数字 |
默认值 | AuthLDAPMaxSubGroupDepth 10 |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
兼容性 | 在 2.3.0 及更高版本中可用 |
当此指令设置为非零值 X
并与 Require ldap-group someGroupDN
指令一起使用时,将搜索提供的用户凭据,以查看其是否为 someGroupDN
目录对象或当前组的任何组成员的成员,直到此指令指定的最大嵌套级别 X
。
有关更详细的示例,请参见 Require ldap-group
部分。
当 AuthLDAPSubGroupAttribute
与 AuthLDAPGroupAttribute
重叠(默认情况下以及常见 LDAP 架构的要求)时,对大型组中的子组进行未缓存的搜索可能非常慢。如果您使用大型非嵌套组,请将 AuthLDAPMaxSubGroupDepth
设置为零。
描述 | 使用用户查询期间返回的属性的值来设置 REMOTE_USER 环境变量 |
---|---|
语法 | AuthLDAPRemoteUserAttribute uid |
默认值 | 无 |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
如果设置了此指令,则 REMOTE_USER
环境变量的值将设置为指定的属性的值。确保此属性包含在 AuthLDAPURL
定义中的属性列表中,否则此指令将无效。如果存在,此指令优先于 AuthLDAPRemoteUserIsDN
。如果您希望人们使用电子邮件地址登录网站,但后端应用程序期望用户名作为用户 ID,则此指令很有用。
描述 | 使用客户端用户名的 DN 来设置 REMOTE_USER 环境变量 |
---|---|
语法 | AuthLDAPRemoteUserIsDN on|off |
默认值 | AuthLDAPRemoteUserIsDN off |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
如果将此指令设置为 on,则 REMOTE_USER
环境变量的值将设置为经过身份验证的用户的完整识别名称,而不是客户端传递的用户名。默认情况下它处于关闭状态。
描述 | 使用经过身份验证的用户的凭据执行授权搜索 |
---|---|
语法 | AuthLDAPSearchAsUser on|off |
默认值 | AuthLDAPSearchAsUser off |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
兼容性 | 在版本 2.3.6 及更高版本中可用 |
当设置此指令时,并且 mod_authnz_ldap
已对用户进行身份验证,用于授权的 LDAP 搜索将使用查询的识别名称 (DN) 和经过身份验证的用户的 HTTP 基本身份验证密码,而不是服务器配置的凭据。
ldap-filter 和 ldap-dn 授权检查使用搜索。
此指令仅对嵌套组处理期间执行的比较有效,前提是 AuthLDAPCompareAsUser
也已启用。
此指令仅应在您的 LDAP 服务器不接受匿名搜索并且您无法使用专用的 AuthLDAPBindDN
时使用。
描述 | 指定用于区分当前组中作为组的成员的属性标签,每个指令行一个值。 |
---|---|
语法 | AuthLDAPSubGroupAttribute 属性 |
默认值 | AuthLDAPSubGroupAttribute member uniqueMember |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
兼容性 | 在 2.3.0 及更高版本中可用 |
LDAP 组对象可能包含作为用户的成员和作为组的成员(称为嵌套组或子组)。AuthLDAPSubGroupAttribute
指令标识组成员的标签,而 AuthLDAPGroupAttribute
指令标识用户成员的标签。可以通过多次指定此指令来使用多个属性。如果未指定,则 mod_authnz_ldap
使用 member
和 uniqueMember
属性。
描述 | 指定哪些 LDAP objectClass 值在子组处理期间标识作为组的目录对象。 |
---|---|
语法 | AuthLDAPSubGroupClass LdapObjectClass |
默认值 | AuthLDAPSubGroupClass groupOfNames groupOfUniqueNames |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 扩展 |
模块 | mod_authnz_ldap |
兼容性 | 在 2.3.0 及更高版本中可用 |
LDAP 组对象可能包含作为用户的成员和作为组的成员(称为嵌套组或子组)。AuthLDAPSubGroupAttribute
指令标识可能作为当前组的子组的成员的标签(与用户成员相反)。AuthLDAPSubGroupClass
指令指定用于验证这些潜在子组实际上是组对象的 LDAP objectClass 值。然后可以搜索经过验证的子组以查找更多用户或子组成员。可以通过多次指定此指令来使用多个属性。如果未指定,则 mod_authnz_ldap
使用 groupOfNames
和 groupOfUniqueNames
值。
描述 | 指定 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,请改用 ldaps
。安全 LDAP 仅在 Apache 链接到具有 SSL 支持的 LDAP 库时才可用。ldap 服务器的名称/端口(对于 ldap
默认值为 localhost:389
,对于 ldaps
默认值为 localhost:636
)。要指定多个冗余 LDAP 服务器,只需列出所有服务器,并用空格隔开。 mod_authnz_ldap
将依次尝试连接到每个服务器,直到成功建立连接。如果指定了多个 ldap 服务器,则整个 LDAP URL 必须用双引号括起来。
一旦与服务器建立连接,该连接将在 httpd
进程的整个生命周期内保持活动状态,或者直到 LDAP 服务器关闭。
如果 LDAP 服务器关闭并断开现有连接,mod_authnz_ldap
将尝试重新连接,从主服务器开始,并依次尝试每个冗余服务器。请注意,这与真正的循环搜索不同。
uid
。最好选择一个属性,该属性在您将使用的子树中的所有条目中都是唯一的。列出的所有属性都将放入环境中,并带有 AUTHENTICATE_ 前缀,以便其他模块使用。one
或 sub
。请注意,RFC 2255 还支持 base
范围,但此模块不支持。如果未提供范围,或指定了 base
范围,则默认使用 sub
范围。(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 覆盖连接类型。此参数可以是以下之一
ldap://
相同。ldaps://
相同。有关 AuthLDAPURL
URL 的示例,请参见上文。