16.4. 在 Active Directory 和 Directory 服务器之间设置同步
配置同步与配置复制非常相似。它需要将数据库配置为带有更改日志的供应商,并创建协议来定义同步。一个常见的用户身份(一个同步用户)连接到 Active Directory (AD)域控制器(DC),将更新从 Directory Server 发送到 AD,并检查 AD 将它们同步到目录服务器。
注意
要让用户在 Directory 服务器和 AD 上使用其帐户,请同步密码。密码同步需要使用加密的连接。
用户和组条目的同步是从 AD 端被动的。目录服务器向 AD 发送更新并轮询 AD 域中的更新。对于密码,AD 服务器需要单独的密码服务。此服务主动将密码更改从 AD 域发送到目录服务器。
16.4.1. 第 1 步:在目录服务器主机上启用 TLS
Password Sync 服务需要通过加密的连接同步密码。如果您的目录服务器实例中还没有启用 TLS,请启用它。详情请查看 第 9.4.1 节 “在目录服务器中启用 TLS”。
16.4.2. 第 2 步:在 AD 域中启用密码复杂度
使用组策略在 AD 域中启用密码复杂性。例如:
- 打开 组策略管理 控制台,并在域中创建新的组策略对象(GPO)。有关使用 组策略管理 控制台的详情,请查看 Windows 文档。
- 右键点击 GPO,然后选择 Edit 以打开 组策略管理编辑器。
- 导航到
,然后双击名为 Password 的策略必须满足复杂性要求。 - 启用策略并点击。
- 关闭 组策略管理编辑器 和 组策略管理 控制台。
16.4.3. 第 3 步:从 AD 中提取 CA 证书
提取 root 证书颁发机构(CA)证书并将其复制到目录服务器主机上:
- 如果您的 AD CA 证书是自签名的:
- 在安装了 认证机构 应用程序的 AD DC 上,按 Super key+R 组合打开 Run 对话框。
- 输入 certsrv.msc 命令,然后单击 以打开 认证机构 应用程序。
- 右键点击本地证书颁发机构的名称,然后选择 Properties。
- 在 General 选项卡中,选择要在 CA 证书字段中导出的证书,然后点 。
- 在 Details 选项卡中,点 以启动 证书导出向导。
- 单击 Base-64 编码 X.509 (.CER)。,然后选择
- 为导出的文件指定合适的目录和文件名称。单击以导出证书,然后单击 。
- 将 root CA 证书复制到目录服务器主机。
- 如果您的 AD CA 证书由外部 CA 签名:
- 确定 root CA。例如:
# openssl s_client -connect adserver.example.com:636 CONNECTED(00000003) depth=1 C = US, O = Demo Company, OU = IT, CN = Demo CA-28 verify error:num=20:unable to get local issuer certificate verify return:0 --- Certificate chain 0 s:/C=US/O=Demo Company/OU=IT/CN=adserver.example.com i:/C=US/O=Demo Company/OU=IT/CN=Demo CA-1 1 s:/C=US/O=Demo Company/OU=IT/CN=Demo CA-1 i:/C=US/O=Demo Company/OU=IT/CN=Demo Root CA 2
前面的例子显示 AD 服务器的 CA 证书由CN=Demo CA-1
签名,它由CN=Demo Root CA 2
签名。这意味着CN=Demo Root CA 2
是 root CA。 - 如何检索 CA 证书,联系 root CA 的 operator。
- 将 root CA 证书复制到目录服务器主机。
16.4.4. 第 4 步:从目录服务器的 NSS 数据库中提取 CA 证书
从目录服务器的 NSS 数据库中提取 CA 证书:
- 列出数据库中的证书:
# certutil -d /etc/dirsrv/slapd-instance_name/ -L Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Server-Cert u,u,u Example CA C,,
- 从数据库中提取 CA 证书。例如,使用
Example CA
nickname 提取 CA 证书,并将其存储在/root/ds-ca.crt
文件中:# certutil -d /etc/dirsrv/slapd-instance_name/ -L -n "Example CA" -a > /root/ds-ca.crt
- 将 CA 证书复制到 AD DC。
16.4.5. 第 5 步:创建同步帐户
要在 AD 和 Directory 服务器间同步,您需要 AD 中的一个帐户,并在 Directory 服务器中有一个帐户。本节介绍创建这些帐户的详情。
在目录服务器中创建帐户
AD DC 使用
Password Sync
服务中的 Directory Server 帐户将密码同步到目录服务器。例如,要在目录服务器中创建 cn=pw_sync_user,dc=config
用户:
- 创建用户帐户:
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=pw_sync_user,cn=config objectClass: inetorgperson objectClass: person objectClass: top cn: pw_sync_user sn: pw_sync_user userPassword: password passwordExpirationTime: 20380101000000Z
这会创建cn=pw_sync_user,dc=config
帐户,并将其过期时间设置为 2038 年 1 月 1 日。重要为安全起见,请不要在同步子树中创建帐户。 - 在子树之上设置一个 ACI,它将同步并为
cn=pw_sync_user,dc=config
用户授予 write 和 compare 权限。例如,要将此类 ACI 添加到 ou=People,dc=example,dc=com 条目:# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr="userPassword")(version 3.0;acl "Password synchronization"; allow (write,compare) userdn="ldap:///cn=pw_sync_user,dc=config";)
- 配置目录服务器可以在更改日志中以明文形式存储密码:
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-unhashed-pw-switch=on
由于 Directory 服务器使用与 Active Directory 不同的密码加密,目录服务器必须以明文形式向 Windows 服务器发送密码。但是,明文密码通过 TLS 加密连接发送,这是密码同步所需的,因此不会向网络公开。
在 AD 中创建帐户
要发送和接收更新,Directory 服务器在连接到 AD 时使用 AD 帐户。此帐户必须是
Domain Admins
组的成员,或者在 AD 中具有等同的权限。有关创建 AD 帐户的详情,请查看您的 AD 文档。
16.4.6. 第 6 步:安装 密码同步 服务
有关运行红帽支持的 Password Sync 服务的操作系统列表,请查看 Red Hat Directory Server 发行注记。
16.4.7. 第 7 步:将 CA 证书目录服务器添加到 密码 同步服务的证书数据库中
在安装 Password Sync 服务的每个 DC 上,将 CA 证书目录服务器添加到 Password Sync 服务的证书数据库中:
- 进入
C:\Program Files\Red Hat Directory Password synchronization\
目录:> cd "C:\Program Files\Red Hat Directory Password Synchronization\"
- 在当前目录中创建证书数据库:
> certutil.exe -d . -N
certutil.exe
工具提示为它创建的新数据库设置密码。 - 导入目录服务器实例使用的 CA 证书。您将此证书在 第 16.4.4 节 “第 4 步:从目录服务器的 NSS 数据库中提取 CA 证书” 中复制到 Windows DC。例如,要从
C:\ds-ca.crt
文件中导入证书,并使用Example CA
nickname 将其存储在数据库中:> certutil.exe -d . -A -n "Example CA" -t CT,, -a -i "C:\ds-ca.crt"
- (可选)验证 CA 证书是否已正确存储在数据库中:
> certutil.exe -d . -L Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Example CA CT,,
- 重启 Windows DC。重启系统前,密码同步 服务不可用。
注意
如果您安装 Password Sync 时存在任何 AD 用户帐户,则服务无法同步这些帐户的密码,直到更改密码为止。这是因为当 密码同步 存储在 Active Directory 中后无法解密密码。有关为 AD 用户强制重置密码的详情,请查看 Active Directory 文档。
16.4.8. 第 8 步:将 CA 证书 AD 用于目录服务器的证书数据库
在 Directory Server 主机上,将 CA 证书 AD 使用添加到证书数据库中:
- 导入 CA 证书 AD 使用。您将此证书在 第 16.4.3 节 “第 3 步:从 AD 中提取 CA 证书” 中复制到目录服务器主机。例如,要从
/root/ad-ca.crt
文件中导入证书,并使用Example CA
nickname 将其存储在数据库中:> certutil -d /etc/dirsrv/slapd-instance_name/ -A -n "Example CA" -t CT,, -a -i /root/ad-ca.crt
- (可选)验证 CA 证书是否已正确存储在数据库中:
> certutil -d /etc/dirsrv/slapd-instance_name/ -L Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI ... Example CA CT,,
16.4.9. 第 9 步:配置数据库以进行同步和创建同步协议
本节论述了如何为同步配置数据库并创建同步协议。
16.4.9.1. 使用命令行配置数据库以进行同步和创建同步协议
以下示例假定您在名为
ds.example.com
的主机上运行 Directory 服务器,并在名为 win-server.ad.example.com
的主机上运行 AD DC。以下流程描述了如何在这些主机之间配置同步:
- 为后缀启用复制:
# dsconf -D "cn=Directory Manager" ldap://ds.example.com replication \ enable --suffix="dc=example,dc=com" --role="supplier" --replica-id=1
此命令将ds.example.com
主机配置为 dc=example,dc=com 后缀的供应商,并将此条目的副本 ID 设置为 1。重要对于拓扑中的所有供应商,副本 ID 必须是 1 到 65534 之间的唯一整数。 - 添加同步协议并初始化协议。例如:
# dsconf -D "cn=Directory Manager" ldap://ds.example.com repl-winsync-agmt \ create --suffix="dc=example,dc=com" --host="win-server.ad.example.com" --port=636 \ --conn-protocol="LDAPS" --bind-dn="cn=user_name,cn=Users,dc=ad,dc=example,dc=com" \ --bind-passwd="password" --win-subtree="cn=Users,dc=example,dc=com" \ --ds-subtree="ou=People,dc=example,dc=com" --win-domain="AD" \ --init example-agreement
此命令创建一个名为 example-agreement 的复制协议。复制协议定义了设置,如 AD DC 的主机名、协议和身份验证信息,目录服务器在将数据连接到 DC 时使用。创建协议后,目录服务器会初始化协议。要稍后初始化协议,请省略--init
选项。请注意,在初始化协议前同步不会启动。有关初始化同步协议的详情,请参考 第 16.11.2.1 节 “使用命令行执行完全同步”。(可选)将--sync-users="on"
和--sync-groups="on"
选项传给命令,以自动将新的 Windows 用户和组同步到目录服务器。有关命令中使用的选项的详情,请输入:# dsconf -D "cn=Directory Manager" ldap://ds.example.com repl-agmt --help
- 验证初始化是否成功:
# dsconf -D "cn=Directory Manager" ldap://ds.example.com repl-winsync-agmt \ init-status --suffix="dc=example,dc=com" example-agreement Agreement successfully initialized.
16.4.9.2. 配置数据库以使用 Web 控制台进行同步和创建同步协议
以下示例假定您在名为
ds.example.com
的主机上运行 Directory 服务器,并在名为 win-server.ad.example.com
的主机上运行 AD DC。以下流程描述了如何在这些主机之间配置同步:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 为后缀启用复制:
- 打开菜单。
- 选择 dc=example,dc=com 后缀,然后单击 。
- 在 Replication Role 字段中选择 Supplier,并输入副本 ID。例如:这些设置将
ds.example.com
主机配置为 dc=example,dc=com 后缀的供应商,并将此条目的副本 ID 设置为 1。重要对于拓扑中的所有供应商,副本 ID 必须是 1 到 65534 之间的唯一整数。 - 点。
- 添加同步协议并初始化协议:
- 打开菜单并选择 条目。
- 点并填写字段。例如:这些设置将创建一个名为
example-agreement
的同步协议。同步协议定义了设置,如 DC 的主机名、协议和身份验证信息,目录服务器在连接和同步数据时使用。(可选)选择 Sync New Windows Users 和 Sync New Windows Groups,以将新的 Windows 用户和组自动同步到 Directory Server。创建协议后,目录服务器会初始化协议。要稍后初始化协议,请不要选择 Do Online Initialization。请注意,在初始化协议前同步不会启动。有关初始化同步协议的详情,请参考 第 16.11.2.2 节 “使用 Web 控制台执行完全同步”。 - 点。
- 验证初始化是否成功:
- 打开菜单。
- 选择条目。如果初始化成功完成,Web 控制台会在 Last Update Status 列中显示 Error (0) Replica obtained: Incremental update successful 信息。根据要同步的数据量,初始化最多可能需要几小时。