mod_authnz_ldap
描述: | 允许 LDAP 目录用于存储数据库以进行 HTTP 基本身份验证。 |
状态: | 延期 |
模块标识符: | authnz_ldap_module |
源文件: | mod_authnz_ldap.c |
兼容性: | 可在 version 2.1 及更高版本中使用 |
摘要
此模块允许身份验证 front-ends(如mod_auth_basic)通过 ldap 目录对用户进行身份验证。
mod_authnz_ldap支持以下 features:
- 已知支持OpenLDAP SDK(1.x 和 2.x),Novell LDAP SDK和iPlanet(Netscape)SDK。
- 可以通过使用 LDAP 过滤器表示 policy 来实现复杂授权 policies。
- 通过modldap使用 LDAP 操作的广泛缓存。
- 支持基于 SSL 的 LDAP(需要 Netscape SDK)或 TLS(需要 OpenLDAP 2.x SDK 或 Novell LDAP SDK)。
使用mod_auth_basic时,通过AuthBasicProvider指令使用ldap
value 调用此模块。
内容
- 一般警告
- 手术
- 验证阶段
- 授权阶段
- 要求指令
- 需要 ldap-user
- 需要 ldap-group
- 需要 ldap-dn
- 需要 ldap-attribute
- 需要 ldap-filter
- 例子
- 使用 TLS
- 使用 SSL
- 公开登录信息
- 使用 Active 目录
- 使用 Microsoft FrontPagemod_authnz_ldap
- 这个怎么运作
- 注意事项
一般警告
此模块基于modldap的 configuration 缓存身份验证和授权结果。对后备 LDAP 服务器所做的更改不会立即反映在 HTTP Server 上,包括但不限于用户 lockouts/revocations,密码更改或对 group 成员身份的更改。有关缓存可调参数的详细信息,请参阅modldap中的指令。
操作
授予用户访问权限有两个阶段。第一阶段是身份验证,其中mod_authnz_ldap身份验证提供程序验证用户的凭据是否有效。这也称为 search/bind 阶段。第二阶段是授权,其中mod_authnz_ldap确定是否允许经过身份验证的用户访问相关资源。这也称为比较阶段。
mod_authnz_ldap同时注册 authnldap 身份验证提供程序和 authzldap 授权处理程序。可以使用ldap
value 通过AuthBasicProvider指令启用 authnldap 身份验证提供程序。 authzldap 处理程序通过添加ldap-user
,ldap-dn
和ldap-group
值来扩展要求指令的授权类型。
验证阶段
在身份验证阶段,mod_authnz_ldap在目录中搜索与 HTTP client 传递的用户名匹配的条目。如果找到一个唯一的 match,则mod_authnz_ldap尝试使用条目的 DN 加上 HTTP client 提供的密码绑定到目录服务器。因为它进行搜索,然后是绑定,它通常被称为 search/bind 阶段。以下是 search/bind 阶段采取的步骤。
- 通过将AuthLDAPURL指令中提供的属性和过滤器与 HTTP client 传递的用户名相结合来生成搜索过滤器。
- 使用生成的过滤器搜索目录。如果搜索没有_return 只有一个条目,拒绝或拒绝访问。
- 获取从搜索中检索的条目的区分 name,并尝试使用该 DN 和 HTTP client 传递的密码绑定到 LDAP 服务器。如果绑定不成功,则拒绝或拒绝访问。
在 search/bind 阶段使用以下指令
AuthLDAPURL | 指定 LDAP 服务器,基本 DN,要在搜索中使用的属性,以及要使用的额外搜索过滤器。 |
AuthLDAPBindDN | 在搜索阶段绑定的可选 DN。 |
AuthLDAPBindPassword | 在搜索阶段绑定的可选密码。 |
授权阶段
在授权阶段,mod_authnz_ldap尝试确定用户是否有权访问资源。其中许多检查需要mod_authnz_ldap在 LDAP 服务器上执行比较操作。这就是为什么这个阶段通常被称为比较阶段。mod_authnz_ldap接受以下要求指令以确定凭据是否可接受:
- 如果存在需要 ldap-user指令,则授予访问权限,并且指令中的用户名与 client 传递的用户名匹配。
- 如果存在需要 ldap-dn指令,则授予访问权限,并且指令中的 DN 与从 LDAP 目录获取的 DN 匹配。
- 如果存在需要 ldap-group指令,则授予访问权限,并且从 LDAP 目录中获取的 DN(或 client 传递的用户名)发生在 LDAP group 中,或者可能发生在 sub-groups 之一中。
- 如果存在需要 ldap-attribute指令,则授予访问权限,并且从 LDAP 目录获取的属性与给定的 value 匹配。
- 如果存在需要 ldap-filter指令,则授予访问权限,并且搜索筛选器成功找到与经过身份验证的用户的 dn 匹配的单个用户 object。
- 否则,拒绝或拒绝访问
也可以使用其他要求值,这些值可能需要 loading 其他授权模块。
- 如果存在需要 valid-user指令,则授予对所有成功通过身份验证的用户的访问权限。(需要mod_authz_user)
- 如果存在需要 group指令,则授予访问权限,并且已使用目录 AuthGroupFile指令集加载mod_authz_groupfile。
- 其他...
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 指令中进行比较时将评估的最大深度 sub-groups。 |
AuthLDAPSubGroupAttribute | 确定在Require ldap-group 指令的比较期间获取当前 group 的 sub-group 成员时要使用的属性。 |
AuthLDAPSubGroupClass | 指定 LDAP objectClass 值,用于在Require ldap-group 指令的 sub-group 处理期间识别查询的目录 objects 是否为 group objects(而不是 user objects)。 |
要求指令
在授权阶段使用 Apache 的要求指令,以确保允许用户访问资源。 mod_authnz_ldap 使用ldap-user
,ldap-dn
,ldap-group
,ldap-attribute
和ldap-filter
扩展授权类型。也可以使用其他授权类型,但可能需要加载其他授权模块。
由于 v2.4.8,表达式在 LDAP require 指令中受支持。
要求 ldap-user
Require ldap-user
指令指定哪些用户名可以访问资源。一旦mod_authnz_ldap从目录中检索到唯一的 DN,它就会使用Require ldap-user
中指定的用户名进行 LDAP 比较操作,以查看该用户名是否是 just-fetched LDAP 条目的一部分。通过在 line 上放置多个用户名,用空格分隔,可以授予多个用户访问权限。如果用户名中有空格,则必须用 double 引号括起来。还可以使用多个Require ldap-user
指令授予多个用户访问权限,每个 line 使用一个用户。对于 example,使用AuthLDAPURLldap://ldap/o=Example?cn
(i.e.,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
line 即可支持用户条目中属性的所有值。
如果使用uid
属性而不是上面的 URL 中的cn
属性,则上述三个 lines 可以压缩为
Require ldap-user bjenson fuser jmanager
要求 ldap-group
该指令指定允许其成员访问的 LDAP group。它需要 LDAP group 的杰出 name。注意:不要用引号括住 group name。对于 example,假设 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设置为 value 大于 0,也可以在指定的 LDAP group 的 sub-groups 内找到成员。对于 example,假设 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(因为他们处于 sub-group 深度为 2):
Require ldap-group cn=Employees, o=Example AuthLDAPMaxSubGroupDepth 1
该指令的行为由AuthLDAPGroupAttribute,AuthLDAPGroupAttributeIsDN,AuthLDAPMaxSubGroupDepth,AuthLDAPSubGroupAttribute和AuthLDAPSubGroupClass指令修改。
要求 ldap-dn
Require ldap-dn
指令允许管理员根据专有名称授予访问权限。它指定必须 match 才能授予访问权限的 DN。如果从目录服务器检索到的可分辨 name 与Require ldap-dn
中的可分辨 name 匹配,则授予授权。注意:不要用引号括住尊贵的 name。
以下指令将授予对特定 DN 的访问权限:
Require ldap-dn cn=Barbara Jenson, o=Example
该指令的行为由AuthLDAPCompareDNOnServer指令修改。
要求 ldap-attribute
Require ldap-attribute
指令允许管理员根据 LDAP 目录中经过身份验证的用户的属性授予访问权限。如果目录中的属性与 configuration 中给出的 value 匹配,则授予访问权限。
以下指令将授予具有 employeeType = active 属性的任何人的访问权限
Require ldap-attribute employeeType="active"
可以在由空格分隔的同一 line 上指定多个 attribute/value 对,也可以在多个Require ldap-attribute
指令中指定它们。列出多个 attribute/values 对的效果是 OR 运算。如果任何列出的属性值匹配用户 object 中相应属性的 value,则将授予访问权限。如果属性的 value 包含空格,则只有 value 必须在 double 引号内。
以下指令将授予对 city 属性等于“San Jose”或状态等于“Active”的任何人的访问权限
Require ldap-attribute city="San Jose" status="active"
要求 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
使用的搜索操作更快,特别是在大目录中。
例子
- 使用其 UID 进行搜索,授予对存在于 LDAP 目录中的任何人的访问权限。
AuthLDAPURL "ldap://ldap1.example.com:389/ou=People, o=Example?uid?sub?(objectClass=*)" Require valid-user
- 下一个例子与上面相同;但是省略了有用默认值的字段。另请注意使用冗余 LDAP 服务器。
AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/ou=People, o=Example" Require valid-user
- 下一个 example 与前一个类似,但它使用 common name 而不是 UID。请注意,如果目录中的多个人共享相同的
cn
,则可能会出现问题,因为对cn
的搜索必须只返回一个条目。这就是为什么不推荐这种方法的原因:选择一个在目录中保证唯一的属性(例如uid
)是更好的选择。
AuthLDAPURL "ldap://ldap.example.com/ou=People, o=Example?cn" Require valid-user
- 授予管理员 group 中任何人的访问权限。用户必须使用其 UID 进行身份验证。
AuthLDAPURL ldap://ldap.example.com/o=Example?uid Require ldap-group cn=Administrators, o=Example
- 授予对 group 中与虚拟 host 的主机名匹配的 group 中任何人的访问权限。在这个 example 中,表达用于构建过滤器。
AuthLDAPURL ldap://ldap.example.com/o=Example?uid Require ldap-group cn=%{SERVER_NAME}, o=Example
- 下一个示例假定 Example 中携带字母数字寻呼机的每个人都具有
qpagePagerID
的 LDAP 属性。 example 仅授予对具有字母数字寻呼机的人员(通过其 UID 进行身份验证)的访问权限:
AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(qpagePagerID=*) Require valid-user
- 下一个示例演示了使用过滤器来完成复杂管理要求的强大功能。如果没有过滤器,则需要创建新的 LDAP group 并确保 group 的成员与寻呼机用户保持同步。这对过滤器来说变得微不足道。目标是授予具有寻呼机的任何人的访问权限,以及对没有寻呼机但需要访问相同资源的 Joe Manager 的授予访问权限:
AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(|(qpagePagerID=*)(uid=jmanager)) Require valid-user
最后这可能看起来很混乱,因此根据谁连接评估搜索过滤器的外观会有所帮助,如下所示。如果 Fred User 连接为fuser
,则过滤器看起来像
(&(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))
只有当热熔器有寻呼机时,上述搜索才会成功。当 Joe Manager 作为 jmanager 连接时,过滤器看起来像
(&(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))
无论 jmanager 是否有寻呼机,上述搜索都将成功。
使用 TLS
要使用 TLS,请参阅modldap指令LDAPTrustedClientCert,LDAPTrustedGlobalCert和LDAPTrustedMode。
可以将第二个参数添加到AuthLDAPURL以覆盖由LDAPTrustedMode设置的默认连接类型。这将允许 ldap:// Url 建立的连接升级到同一 port 上的安全连接。
使用 SSL
要使用 SSL,请参阅modldap指令LDAPTrustedClientCert,LDAPTrustedGlobalCert和LDAPTrustedMode。
要指定安全的 LDAP 服务器,请在AuthLDAPURL指令中使用 ldaps://,而不是 ldap://。
公开登录信息
当此模块执行身份验证时,AuthLDAPURL指令中指定的 ldap 属性将放置在前缀为“AUTHENTICATE_”的环境变量中。
当此模块执行授权时,AuthLDAPURL指令中指定的 ldap 属性将放置在前缀为“AUTHORIZE_”的环境变量中。
如果属性字段包含用户名,common name 和用户的电话号码,则 CGI 程序可以访问此信息,而无需进行第二次独立的 LDAP 查询来收集此附加信息。
这有可能大大简化某些 web applications 所需的编码和配置。
使用 Active 目录
Active Directory 安装可以在同一 time 支持多个域。为了区分域之间的用户,可以将名为 User Principle Name(UPN)的标识符添加到目录中的用户条目。对于 example somebody@nz.example.com,此 UPN 通常采用用户帐户 name 的形式,后跟特定域的域组件。
您可能希望将mod_authnz_ldap模块配置为对构成 Active 目录林的任何域中的用户进行身份验证。这样,somebody@nz.example.com 和 someone@au.example.com 都可以在同一个 time 使用相同的查询进行身份验证。
为了实现这一目标,Active Directory 支持 Global 目录的概念。此 Global 目录是 Active 目录林中所有 Active Directory 服务器的所选属性的只读副本。查询 Global 目录允许在单个查询中查询所有域,而不会将查询跨越可能较慢的链接。
如果启用,则 Global Catalog 是一个独立的目录服务器,在 port 3268(SSL 为 3269)上运行。要搜索用户,请使用空搜索根执行子树搜索属性 userPrincipalName,如下所示:
AuthLDAPBindDN apache@example.com AuthLDAPBindPassword password AuthLDAPURL ldap://10.0.0.1:3268/?userPrincipalName?sub
用户需要以 somebody@nz.example.com 的形式输入其 User Principal Name 作为登录名。
使用带有 mod_authnz_ldap 的 Microsoft FrontPage
通常,FrontPage 使用 FrontPage-web-specific user/group files(i.e.,mod_authn_file和mod_authz_groupfile模块)来处理所有身份验证。遗憾的是,通过添加适当的指令只能更改为 LDAP 身份验证,因为它将在 FrontPage client 中创建权限表单,该表单尝试修改标准的 text-based authorization files。
创建 FrontPage web 后,向其添加 LDAP 身份验证是将以下指令添加到 web 中创建的每个.htaccess
文件的问题
AuthLDAPURL "the url" AuthGroupFile "mygroupfile" Require group "mygroupfile"
如何运作
FrontPage 通过将Require valid-user
指令添加到.htaccess
files 来限制对 web 的访问。对于在 LDAP 方面有效的任何用户,Require valid-user
指令将成功。这意味着在 LDAP 目录中具有条目的任何人都被视为有效用户,而 FrontPage 仅考虑本地用户文件中的那些人是有效的。通过用 ldap-group 文件授权替换 ldap-group,允许 Apache 在处理授权用户时查询本地用户文件(由 FrontPage 管理)-而不是 LDAP。
一旦按照上面的指定添加了指令,FrontPage 用户将能够从 FrontPage client 执行所有 management 操作。
警告
- 选择 LDAP URL 时,用于身份验证的属性应该对放入mod_authn_file用户文件有效。用户 ID 非常适合这种情况。
- 通过 FrontPage 添加用户时,FrontPage 管理员应选择已存在于 LDAP 目录中的用户名(出于显而易见的原因)。此外,管理员输入表单的密码将被忽略,因为 Apache 实际上将根据 LDAP 数据库中的密码进行身份验证,而不是针对本地用户文件中的密码进行身份验证。这可能会导致 web 管理员感到困惑。
- Apache 必须在 order 中使用mod_auth_basic,mod_authn_file和mod_authz_groupfile进行编译才能使用 FrontPage 支持。这是因为 Apache 仍将使用mod_authz_groupfile group 文件来确定用户访问 FrontPage web 的程度。
- 指令必须放在
.htaccess
files 中。试图将它们放在<Location>或<Directory>指令中是行不通的。这是因为mod_authnz_ldap必须能够 grab 在 FrontPage.htaccess
files 中找到的目录 AuthGroupFile指令,以便它知道在哪里查找有效的用户列表。如果mod_authnz_ldap指令与 FrontPage 指令不在同一个.htaccess
文件中,则 hack 将无法正常工作,因为mod_authnz_ldap永远不会有机会处理.htaccess
文件,并且无法找到 FrontPage-managed 用户文件。
AuthLDAPAuthorizePrefix 指令
描述: | 指定授权期间设置的环境变量的前缀 |
句法: | AuthLDAPAuthorizePrefix prefix |
默认: | AuthLDAPAuthorizePrefix AUTHORIZE_ |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
兼容性: | 可在 version 2.3.6 及更高版本中使用 |
此指令允许您覆盖用于在 LDAP 授权期间设置的环境变量的前缀。如果指定了 AUTHENTICATE_,则这些环境变量的使用者会看到相同的信息,无论 LDAP 是否已执行身份验证,授权或两者。
注意
在Require valid-user
的基础上授权用户时,不会设置授权变量。
AuthLDAPBindAuthoritative Directive
描述: | 确定在用户可以映射到 DN 但服务器无法成功绑定用户凭据时是否使用其他身份验证提供程序。 |
句法: | AuthLDAPBindAuthoritative off\|on |
默认: | AuthLDAPBindAuthoritative on |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
默认情况下,只有在用户无法映射到 DN 时才会查询后续身份验证提供程序,但如果用户无法映射到 DN 并且无法使用 LDAP 绑定验证其密码,则不会查询后续身份验证提供程序。如果AuthLDAPBindAuthoritative
设置为 off,则其他已配置的身份验证模块将有机会验证用户是否由于任何原因 LDAP 绑定(使用当前用户的凭据)失败。
这允许 LDAP 和AuthUserFile中的用户在 LDAP 服务器可用但用户的帐户被锁定或密码无法使用时进行身份验证。
参见
- AuthUserFile
- AuthBasicProvider
AuthLDAPBindDN 指令
描述: | 用于 binding 到 LDAP 服务器的可选 DN |
句法: | AuthLDAPBindDN distinguished-name |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
用于在搜索条目时绑定到服务器的可选 DN。如果未提供,mod_authnz_ldap将使用匿名绑定。
AuthLDAPBindPassword 指令
描述: | 密码与绑定 DN 一起使用 |
句法: | AuthLDAPBindPassword password |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
兼容性: | exec:在 2.4.5 中添加。 |
与绑定 DN 一起使用的绑定密码。请注意,绑定密码可能是敏感数据,应该受到适当保护。如果您绝对需要它们来搜索目录,则应该只使用AuthLDAPBindDN和AuthLDAPBindPassword
。
如果 value 以 exec 开头:将执行生成的命令,程序返回标准输出的第一个 line 将用作密码。
#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 指令
描述: | 语言到 charset 转换 configuration 文件 |
句法: | AuthLDAPCharsetConfig file-path |
Context: | 服务器配置 |
状态: | 延期 |
模块: | mod_authnz_ldap |
AuthLDAPCharsetConfig
指令将语言的位置设置为 charset conversion configuration 文件。 File-path 相对于ServerRoot。此文件指定字符 sets 的语言 extensions 列表。大多数管理员使用提供的charset.conv
文件,该文件将 common 语言 extensions 与 character sets 相关联。
该文件包含以下格式的 lines:
Language-Extension charset[Language-String]...
扩展的情况无关紧要。将忽略空白 lines 和以哈希字符(#
开头)的 lines。
AuthLDAPCompareAsUser 指令
描述: | 使用经过身份验证的用户凭据执行授权比较 |
句法: | AuthLDAPCompareAsUser on\|off |
默认: | AuthLDAPCompareAsUser off |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
兼容性: | 可在 version 2.3.6 及更高版本中使用 |
设置后,mod_authnz_ldap已对用户进行身份验证,LDAP 比较授权使用经过身份验证的用户的查询的区分 name(DN)和 HTTP 基本身份验证密码,而不是服务器配置的凭据。
ldap-attribute,ldap-user 和 ldap-group(仅 single-level)授权检查使用比较。
此指令仅对在启用AuthLDAPSearchAsUser时嵌套 group 处理期间执行的比较有影响。
仅当您的 LDAP 服务器不接受匿名比较且您不能使用专用AuthLDAPBindDN时,才应使用此指令。
参见
- AuthLDAPInitialBindAsUser
- AuthLDAPSearchAsUser
AuthLDAPCompareDNOnServer 指令
描述: | 使用 LDAP 服务器比较 DN |
句法: | AuthLDAPCompareDNOnServer on\|off |
默认: | AuthLDAPCompareDNOnServer on |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
设置后,mod_authnz_ldap将使用 LDAP 服务器来比较 DN。这是比较 DN 的唯一简单方法。mod_authnz_ldap将在目录中搜索使用需要 dn指令指定的 DN,然后检索 DN 并将其与从用户条目检索到的 DN 进行比较。如果未设置此指令,mod_authnz_ldap只会进行 string 比较。使用这种方法可能会得到 false 否定,但速度要快得多。请注意,modldap缓存可以在大多数情况下加快 DN 比较。
AuthLDAPDereferenceAliases 指令
描述: | 模块 de-reference 何时会别名 |
句法: | AuthLDAPDereferenceAliases never\|searching\|finding\|always |
默认: | AuthLDAPDereferenceAliases always |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
该指令指定在 LDAP 操作期间mod_authnz_ldap将 de-reference 别名。默认值为always
。
AuthLDAPGroupAttribute 指令
描述: | LDAP 属性用于标识组的用户成员。 |
句法: | AuthLDAPGroupAttribute attribute |
默认: | AuthLDAPGroupAttribute member uniqueMember |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
该指令指定用于检查组内用户成员的 LDAP 属性。通过多次指定此指令,可以使用多个属性。如果未指定,则mod_authnz_ldap使用member
和uniqueMember
属性。
AuthLDAPGroupAttributeIsDN 指令
描述: | 检查 group 成员资格时,请使用 client 用户名的 DN |
句法: | AuthLDAPGroupAttributeIsDN on\|off |
默认: | AuthLDAPGroupAttributeIsDN on |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
设置on
时,此指令表示在检查 group 成员资格时使用 client 用户名的 distinguished name。否则,将使用用户名。对于 example,假设 client 发送了用户名bjenson
,它对应于 LDAP DN cn=Babs Jenson, o=Example
。如果设置了此指令,mod_authnz_ldap将检查 group 是否具有cn=Babs Jenson, o=Example
作为成员。如果未设置此指令,则mod_authnz_ldap将检查 group 是否具有bjenson
作为成员。
AuthLDAPInitialBindAsUser 指令
描述: | 确定服务器是否使用基本身份验证用户自己的用户名进行初始 DN 查找,而不是匿名或使用服务器的 hard-coded 凭据 |
句法: | AuthLDAPInitialBindAsUser off\|on |
默认: | AuthLDAPInitialBindAsUser off |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
兼容性: | 可在 version 2.3.6 及更高版本中使用 |
默认情况下,服务器匿名或使用专用用户和密码将基本身份验证用户名转换为 LDAP distinguished name(DN)。该指令强制服务器使用传入用户提供的逐字用户名和密码来执行初始 DN 搜索。
如果逐字用户名不能直接绑定,但需要进行一些整形转换,请参阅AuthLDAPInitialBindPattern。
仅当您的 LDAP 服务器不接受匿名搜索且您不能使用专用AuthLDAPBindDN时,才应使用此指令。
不适用于 authorization-only
该指令只能在此模块对用户进行身份验证时使用,并且在此模块专门用于授权时无效。
参见
- AuthLDAPInitialBindPattern
- AuthLDAPBindDN
- AuthLDAPCompareAsUser
- AuthLDAPSearchAsUser
AuthLDAPInitialBindPattern 指令
描述: | 指定 binding 到 LDAP 服务器以执行 DN 查找时要使用的基本身份验证用户名的转换 |
句法: | AuthLDAPInitialBindPattern regex substitution |
默认: | AuthLDAPInitialBindPattern(.*)$1(remote username used verbatim) |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
兼容性: | 可在 version 2.3.6 及更高版本中使用 |
如果AuthLDAPInitialBindAsUser设置为 ON,则将根据正则表达式和 substitution arguments 转换基本身份验证用户名。
将正则表达式参数与当前基本身份验证用户名进行比较。 substitution 参数可能包含反向引用,但没有其他变量插值。
仅当您的 LDAP 服务器不接受匿名搜索且您不能使用专用AuthLDAPBindDN时,才应使用此指令。
AuthLDAPInitialBindPattern (.+) $1@example.com
AuthLDAPInitialBindPattern (.+) cn=$1,dc=example,dc=com
不适用于 authorization-only
该指令只能在此模块对用户进行身份验证时使用,并且在此模块专门用于授权时无效。
调试
替换的 DN 记录在环境变量 LDAP_BINDASUSER 中。如果正则表达式不匹配输入,则使用逐字用户名。
参见
- AuthLDAPInitialBindAsUser
- AuthLDAPBindDN
AuthLDAPMaxSubGroupDepth 指令
描述: | 指定在停止用户搜索之前将评估的最大 sub-group 嵌套深度。 |
句法: | AuthLDAPMaxSubGroupDepth Number |
默认: | AuthLDAPMaxSubGroupDepth 10 |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
兼容性: | 可在 version 2.3.0 及更高版本中使用 |
当此指令设置为 non-zero value X
并结合使用Require ldap-group someGroupDN
指令时,将搜索提供的用户凭据作为someGroupDN
目录 object 的成员或当前 group 的任何 group 成员的成员,直到最大嵌套 level X
由该指令指定。
有关更详细的 example,请参阅需要 ldap-group部分。
嵌套组 performance
当AuthLDAPSubGroupAttribute
与AuthLDAPGroupAttribute
重叠时(正如默认情况下和 common LDAP 模式所要求的那样),未缓存的大组搜索子组可能会非常慢。如果使用大的 non-nested 组,请将AuthLDAPMaxSubGroupDepth
设置为零。
AuthLDAPRemoteUserAttribute 指令
描述: | 使用在用户查询期间返回的属性的 value 来设置 REMOTE_USER 环境变量 |
句法: | AuthLDAPRemoteUserAttribute uid |
默认: | none |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
如果设置了此指令,则REMOTE_USER
环境变量的 value 将设置为指定属性的 value。确保此属性包含在AuthLDAPURL定义的属性列表中,否则此指令将不起作用。该指令(如果存在)优先于AuthLDAPRemoteUserIsDN。如果您希望人们使用电子邮件地址 log 进入网站,此指令很有用,但后端 application 期望用户名为用户 ID。
AuthLDAPRemoteUserIsDN 指令
描述: | 使用 client 用户名的 DN 设置 REMOTE_USER 环境变量 |
句法: | AuthLDAPRemoteUserIsDN on\|off |
默认: | AuthLDAPRemoteUserIsDN off |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
如果将此指令设置为 on,则REMOTE_USER
环境变量的 value 将设置为经过身份验证的用户的完整识别 name,而不仅仅是 client 传递的用户名。它默认关闭。
AuthLDAPSearchAsUser 指令
描述: | 使用经过身份验证的用户的凭据来执行授权搜索 |
句法: | AuthLDAPSearchAsUser on\|off |
默认: | AuthLDAPSearchAsUser off |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
兼容性: | 可在 version 2.3.6 及更高版本中使用 |
设置后,mod_authnz_ldap已对用户进行身份验证,LDAP 搜索授权使用经过身份验证的用户的查询的可分辨 name(DN)和 HTTP 基本身份验证密码,而不是服务器配置的凭据。
ldap-filter 和 ldap-dn 授权检查使用搜索。
此指令仅对在启用AuthLDAPCompareAsUser时嵌套 group 处理期间执行的比较有影响。
仅当您的 LDAP 服务器不接受匿名搜索且您不能使用专用AuthLDAPBindDN时,才应使用此指令。
参见
- AuthLDAPInitialBindAsUser
- AuthLDAPCompareAsUser
AuthLDAPSubGroupAttribute 指令
描述: | 指定属性标签,每个指令 line 一个 value,用于区分作为组的当前 group 的成员。 |
句法: | AuthLDAPSubGroupAttribute attribute |
默认: | AuthLDAPSubGroupAttribute member uniqueMember |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
兼容性: | 可在 version 2.3.0 及更高版本中使用 |
LDAP group object 可以包含作为用户的成员和作为组的成员(称为嵌套或子组)。AuthLDAPSubGroupAttribute
指令标识 group 成员的标签,AuthLDAPGroupAttribute指令标识用户成员的标签。通过多次指定此指令,可以使用多个属性。如果未指定,则mod_authnz_ldap使用member
和uniqueMember
属性。
AuthLDAPSubGroupClass 指令
描述: | 指定哪些 LDAP objectClass 值标识 sub-group 处理期间作为组的目录 objects。 |
句法: | AuthLDAPSubGroupClass LdapObjectClass |
默认: | AuthLDAPSubGroupClass groupOfNames groupOfUniqueNames |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
兼容性: | 可在 version 2.3.0 及更高版本中使用 |
LDAP group object 可以包含作为用户的成员和作为组的成员(称为嵌套或子组)。AuthLDAPSubGroupAttribute指令标识可能是当前 group 的 sub-groups(而不是用户成员)的成员标签。AuthLDAPSubGroupClass
指令指定用于验证这些潜在的 sub-groups 实际上是 group objects 的 LDAP objectClass 值。然后可以搜索已验证的 sub-groups 以查找更多用户或 sub-group 成员。通过多次指定此指令,可以使用多个属性。如果未指定,则mod_authnz_ldap使用groupOfNames
和groupOfUniqueNames
值。
AuthLDAPURL 指令
描述: | 指定 LDAP 搜索参数的 URL |
句法: | AuthLDAPURL url[NONE\|SSL\|TLS\|STARTTLS] |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | 延期 |
模块: | mod_authnz_ldap |
RFC 2255 URL,指定要使用的 LDAP 搜索参数。 URL 的语法是
ldap://host:port/basedn?attribute?scope?filter
如果要指定 Apache 应依次尝试的多个 LDAP URL,则语法为:
AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/dc=..."
**警告:**如果指定多个服务器,则需要将整个 URL string 括在引号中;否则你会收到一个错误:“AuthLDAPURL 接受一个参数,URL 定义 LDAP 连接..”你当然可以在每个参数上使用搜索参数。
- ldap 对于常规 ldap,请使用 string ldap。对于安全的 LDAP,请改用 ldaps。仅当 Apache 链接到具有 SSL 支持的 LDAP library 时,才能使用安全 LDAP。
- host:port
ldap 服务器的 name/port(对于 ldap,默认为 localhost:389,对于 ldaps,默认为 localhost:636)。要指定多个冗余 LDAP 服务器,只需列出所有服务器,用空格分隔。 mod_authnz_ldap 将依次尝试连接到每个服务器,直到它成功连接。如果指定了多个 ldap 服务器,则必须将整个 LDAP URL 封装在 double 引号中。一旦与服务器建立连接,该连接在 httpd process 的生命周期内保持 active,或者直到 LDAP 服务器关闭。如果 LDAP 服务器出现故障并中断现有连接,则 mod_authnz_ldap 将尝试 re-connect,从主服务器开始,并依次尝试每个冗余服务器。请注意,这与 true round-robin 搜索不同。 - BaseDN
所有搜索应从其开始的目录分支的 DN。至少,它必须是目录树的顶部,但也可以在目录中指定子树。 - 属性
要搜索的属性。虽然 RFC 2255 允许 comma-separated 属性列表,但无论提供多少属性,都只会使用第一个属性。如果未提供任何属性,则默认使用 uid。选择一个在您将使用的子树中的所有条目中都是唯一的属性是一个很好的选择。列出的所有属性都将放入具有 AUTHENTICATE前缀的环境中,供其他模块使用。 - 范围
搜索范围。可以是一个也可以是一个。请注意,RFC 2255 也支持基本范围,但此模块不支持。如果未提供范围,或者指定了基本范围,则默认使用范围 sub。 - 过滤
有效的 LDAP 搜索过滤器。如果未提供,则默认为(objectClass =*),它将搜索树中的所有 objects。过滤器限制为大约 8000 个字符(Apache source code 中 MAXSTRING_LEN 的定义)。对于任何 application 来说,这应该足够了。在 2.4.10 及更高版本中,关键字 none 禁用过滤器;这是一些原始 LDAP 服务器所必需的。
进行搜索时,HTTP client 传递的属性,过滤器和用户名将组合在一起,以创建一个类似于(&(filter)(attribute=username))
的搜索过滤器。
对于 example,请考虑ldap://ldap.example.com/o=Example?cn?sub?(posixid=*)
的 URL。当 client 尝试使用Babs Jenson
的用户名进行连接时,生成的搜索过滤器将为(&(posixid=*)(cn=Babs Jenson))
。
可以添加可选参数以允许 LDAP Url 覆盖连接类型。此参数可以是以下之一:
- 没有
在默认的 LDAP port 上建立不安全的连接。这与 port 389 上的 ldap://相同。 - SSL
在默认的安全 LDAP port 上建立安全连接。这与 ldaps://相同 - TLS | STARTTLS
在默认的 LDAP port 上建立升级的安全连接。默认情况下,此连接将在 port 389 上启动,然后升级到同一 port 上的安全连接。
请参阅上面的AuthLDAPURL URL 示例。