2.4. 配置 Cascading Chaining
数据库链接可以被配置为指向另一个数据库链接,从而创建一个级联链操作。当需要多个跃点才能访问目录树中的所有数据时,就会发生级联链。
2.4.1. Cascading 链概述 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
当目录需要多个跃点来处理客户端应用程序的请求时,级联链发生。
客户端应用程序向服务器 1 发送修改请求。服务器 1 包含一个数据库链接,它将操作转发到 Server 2,其中包含另一个数据库链接。Server 2 上的数据库链接将操作转发到服务器 3,其中包含客户端要在数据库中修改的数据。需要两个跃点才能访问客户端要修改的数据片段。
在正常操作请求过程中,客户端绑定到服务器,然后评估应用到该客户端的任何 ACI。使用级联链时,客户端绑定请求会在 Server 1 上评估,但应用到客户端的 ACI 仅在请求链到目标服务器(在上例中是 Server 2)后进行评估。
例如,在 Server A 中,目录树被分割:
root 后缀 dc=example,dc=com 和 ou=people 和 ou=groups 自后缀存储在 Server A 中。ou=europe,dc=example,dc=com 和 ou=groups 后缀存储在 Server B 中,ou=europe,dc=example,dc=com 后缀的ou=people 分支存储在 Server C 中。
在服务器 A、B 和 C 上配置 cascading,针对 ou=people,ou=europe,dc=example,dc=com 条目的客户端请求,如下所示:
首先,客户端绑定到 Server A 并通过 Database Link 1 链到 Server B。然后 Server B 链到 Server C 上的目标数据库,使用 Database Link 2 访问 ou=people,ou=europe,dc=example,dc=com 分支中的数据。因为目录至少需要两个跃点才能服务客户端请求,因此这被视为级联链。
2.4.2. 使用命令行配置 Cascading Chaining 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
本节提供了如何配置具有三个服务器的级联链的示例,如下图所示:
Server 1 中的配置步骤
- 创建后缀 c=africa,ou=people,dc=example,dc=com :
dsconf -D "cn=Directory Manager" ldap://server1.example.com backend create --parent-suffix="ou=people,dc=example,dc=com" --suffix="c=africa,ou=people,dc=example,dc=com"
# dsconf -D "cn=Directory Manager" ldap://server1.example.com backend create --parent-suffix="ou=people,dc=example,dc=com" --suffix="c=africa,ou=people,dc=example,dc=com"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建 DBLink1 数据库链接:
dsconf -D "cn=Directory Manager" ldap://server1.example.com chaining link-create --suffix="c=africa,ou=people,dc=example,dc=com" --server-url="ldap://africa.example.com:389/" --bind-mech="" --bind-dn="cn=server1 proxy admin,cn=config" --bind-pw="password" --check-aci="off" "DBLink1"
# dsconf -D "cn=Directory Manager" ldap://server1.example.com chaining link-create --suffix="c=africa,ou=people,dc=example,dc=com" --server-url="ldap://africa.example.com:389/" --bind-mech="" --bind-dn="cn=server1 proxy admin,cn=config" --bind-pw="password" --check-aci="off" "DBLink1"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 启用循环检测:
dsconf -D "cn=Directory Manager" ldap://server1.example.com chaining config-set --add-control="1.3.6.1.4.1.1466.29539.12"
# dsconf -D "cn=Directory Manager" ldap://server1.example.com chaining config-set --add-control="1.3.6.1.4.1.1466.29539.12"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Server 2 中的配置步骤
- 在服务器 2 上为服务器 1 创建代理管理用户,以用于代理授权:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要为了安全起见,请不要使用cn=Directory Manager
帐户。 - 创建后缀 ou=Zanzibar,c=africa,ou=people,dc=example,dc=com :
dsconf -D "cn=Directory Manager" ldap://server2.example.com backend create --parent-suffix="c=africaou=people,dc=example,dc=com" --suffix="ou=Zanzibar,c=africa,ou=people,dc=example,dc=com"
# dsconf -D "cn=Directory Manager" ldap://server2.example.com backend create --parent-suffix="c=africaou=people,dc=example,dc=com" --suffix="ou=Zanzibar,c=africa,ou=people,dc=example,dc=com"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建 DBLink2 数据库链接:
dsconf -D "cn=Directory Manager" ldap://server2.example.com chaining link-create --suffix="ou=Zanzibar,c=africa,ou=people,dc=example,dc=com" --server-url="ldap://zanz.africa.example.com:389/" --bind-mech="" --bind-dn="server2 proxy admin,cn=config" --bind-pw="password" --check-aci="on "DBLink2"
# dsconf -D "cn=Directory Manager" ldap://server2.example.com chaining link-create --suffix="ou=Zanzibar,c=africa,ou=people,dc=example,dc=com" --server-url="ldap://zanz.africa.example.com:389/" --bind-mech="" --bind-dn="server2 proxy admin,cn=config" --bind-pw="password" --check-aci="on "DBLink2"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 因为DBLink2
链接是级联链配置中的中间数据库链接,因此启用 ACL 检查以允许服务器检查它是否应该允许客户端和代理管理用户访问数据库链接。 - 启用循环检测:
dsconf -D "cn=Directory Manager" ldap://server2.example.com chaining config-set --add-control="1.3.6.1.4.1.1466.29539.12"
# dsconf -D "cn=Directory Manager" ldap://server2.example.com chaining config-set --add-control="1.3.6.1.4.1.1466.29539.12"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 启用代理授权控制:
dsconf -D "cn=Directory Manager" ldap://server2.example.com chaining config-set --add-control="2.16.840.1.113730.3.4.12"
# dsconf -D "cn=Directory Manager" ldap://server2.example.com chaining config-set --add-control="2.16.840.1.113730.3.4.12"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 添加本地代理授权 ACI:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 添加一个 ACI,在 server 1 上启用 c=us,ou=body,dc=example,dc=com 中的带有
uid
属性设置的用户,以便在服务器 3 的 ou=Zanzibar,c=africa,ou=people,dc=example,dc=com 后缀数中执行任何类型的操作:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 server 3 上的用户在不同的后缀下需要额外权限,则需要在服务器 2 上添加额外的客户端 ACI。
Server 3 中的配置步骤
- 在服务器 3 上为服务器 2 创建代理管理用户,以用于代理授权:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要为了安全起见,请不要使用cn=Directory Manager
帐户。 - 添加本地代理授权 ACI:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 添加一个 ACI,在 server 1 上启用 c=us,ou=body,dc=example,dc=com 中的带有
uid
属性设置的用户,以便在服务器 3 的 ou=Zanzibar,c=africa,ou=people,dc=example,dc=com 后缀数中执行任何类型的操作:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 server 3 上的用户在不同的后缀下需要额外权限,则需要在服务器 2 上添加额外的客户端 ACI。
现在设置了级联链配置。此级联配置允许用户绑定到服务器 1 并修改服务器 3 上 ou=Zanzibar,c=africa,ou=people,dc=example,dc=com 分支中的信息。根据您的安全需求,可能需要提供更详细的访问控制。
2.4.3. 检测循环 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Directory 服务器中包含的 LDAP 控制可防止循环。在第一次尝试链时,服务器将此控件设置为允许的最大跃点数或链连接。每个后续服务器都会减少计数。如果服务器收到计数为 0, 它会确定已检测到循环并通知客户端应用程序。
要使用该控制,请添加 1.3.6.1.4.1.1466.29539.12 OID。有关添加 LDAP 控制的详情,请参考 第 2.3.2.2 节 “链 LDAP 控制”。如果每个数据库链接的配置文件中不存在该控制,则不会实施循环检测。
允许使用
nsHopLimit
参数定义的跃点数。默认情况下,参数设置为 10。例如,将 example
链的 hop 限制设置为 5 :
dsconf -D "cn=Directory Manager" ldap://server.example.com chaining link-set --hop-limit 5 example
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining link-set --hop-limit 5 example