11.8.4. 在管理接口里使用 LDAP 进行验证
要在管理控制台、管理 CLI 或 API 里将 LDAP 目录服务器用作验证源,你需要执行下列过程:
- 创建一个到 LDAP 服务器的转出连接。
- 创建一个启用 LDAP 的安全区。
- 在管理接口里引用新的安全区。
创建一个到 LDAP 服务器的转出连接
LDAP 转出连接允许下列属性:
属性 | Required | 描述 |
---|---|---|
url | 是 |
目录服务器的 URL 地址。
|
search-dn | 否 |
授权执行搜索的用户的全限定可区分名称(Distinguished Name,DN)。
|
search-credentials | 否 |
用户授权执行搜索的密码。
|
initial-context-factory | 否 |
当建立连接时使用的初始上下文。默认为
com.sun.jndi.ldap.LdapCtxFactory 。
|
security-realm | 否 |
为了获得建立连接时所需的已配置的
SSLContext 而引用的安全区。
|
例 11.7. 添加 LDAP 转出连接
这个例子用下列属性集添加了一个转出连接:
- 搜索 DN:
cn=search,dc=acme,dc=com
- 搜索凭证:
myPass
- URL:
ldap://127.0.0.1:389
第一个命令添加了安全区。
/host=master/core-service=management/security-realm=ldap_security_realm:add
第二个命令添加了 LDAP 连接。
/host=master/core-service=management/ldap-connection=ldap_connection/:add(search-credential=myPass,url=ldap://127.0.0.1:389,search-dn="cn=search,dc=acme,dc=com")
创建一个启用 LDAP 的安全区
管理接口可以针对 LDAP 服务器而不是默认的基于属性文件的安全区进行验证。LDAP 验证器将首先建立一个和远程目录服务器的连接,然后使用传入验证系统的用户名来执行搜索以找到 LDAP 记录的全限定可区分名称(Distinguished Name,DN)。新的连接将以用户的 DN 为凭证以及用户提供的密码来建立。如果这个针对 LDAP 服务器的验证成功,DN 就被证明为有效的。
LDAP 安全区使用下列列配置属性:
- connection
outbound-connections
里定义的连接的名称,用来连接 LDAP 目录。- advanced-filter
- 用于搜索基于提供的用户 ID 的用户的全限定过滤器。这个过滤器必须包含下列格式的变量:
{0}
。之后它会被用户提供的用户名替代。 - base-dn
- 用户开始搜索的上下文的可区分的名称。
- recursive
- 搜索是否应该在 LDAP 目录树里进行递归,或者只搜索指定的上下文。默认为
false
。 - user-dn
- 保存可区分名称的用户的属性。它会被用来测试验证。默认为
dn
。 - username-attribute
- 搜索用户使用的属性的名称。根据用户输入的用户名来匹配指定的属性,这个过滤器执行简单的搜索。
- allow-empty-passwords
- 这个属性确定是否接受空的密码。这个属性的默认值是
false
。 - 您必须指定
username-filter
或advanced-filter
。 advanced-filter
属性包含一个使用标准 LDAP 语法的过滤器查询,例如:(&(sAMAccountName={0})(memberOf=cn=admin,cn=users,dc=acme,dc=com))
例 11.8. 代表启用了 LDAP 的安全区的 XML 片段
这个例子使用了下列参数:
- connection -
ldap_connection
- base-dn -
cn=users,dc=acme,dc=com
. - username-filter -
attribute="sambaAccountName"
<security-realm name="ldap_security_realm"> <authentication> <ldap connection="ldap_connection" base-dn="cn=users,dc=acme,dc=com"> <username-filter attribute="sambaAccountName" /> </ldap> </authentication> </security-realm>
警告
确保不允许空 LDAP 密码是很重要的;除非你故意这么做,但这是严重的安全隐患。
EAP 6.1 包含一个用于 CVE-2012-5629 的补丁,它设置 LDAP 登录模块的 allowEmptyPasswords 选项为 false(如果它还没有被设置)。在旧的版本里,这个选项应该手动进行配置。
例 11.9. 添加 LDAP 安全区
下面的命令添加了一个 LDAP 验证到安全区并针对根据域里的主服务器设置其属性。
/host=master/core-service=management/security-realm=ldap_security_realm/authentication=ldap:add(base-dn="DC=mycompany,DC=org", recursive=true, username-attribute="MyAccountName", connection="ldap_connection")
应用新的安全区到管理接口里
在创建了安全区后,你需要在管理接口的配置里引用它。管理接口将使用安全区来进行 HTTP digest 验证。
例 11.10. 应用安全区到 HTTP 接口里
在配置完成后,你重启主机控制器,基于 web 的管理控制台将使用 LDAP 来验证用户。
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=security-realm,value=ldap_security_realm)
例 11.11. 应用安全区到 Native 接口
使用下列命令将相同的设置应用到 Native 接口:
/host=master/core-service=management/management-interface=native-interface/:write-attribute(name=security-realm,value=ldap_security_realm)