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 域中启用密码复杂性。例如:
  1. 打开 组策略管理 控制台,并在域中创建新的组策略对象(GPO)。
    有关使用 组策略管理 控制台的详情,请查看 Windows 文档。
  2. 右键点击 GPO,然后选择 Edit 以打开 组策略管理编辑器
  3. 导航到 Computer ConfigurationWindows SettingsSecurity SettingsAccount PoliciesPolicy,然后双击名为 Password 的策略必须满足复杂性要求
  4. 启用策略并点击 OK
  5. 关闭 组策略管理编辑器组策略管理 控制台。

16.4.3. 第 3 步:从 AD 中提取 CA 证书

提取 root 证书颁发机构(CA)证书并将其复制到目录服务器主机上:
  • 如果您的 AD CA 证书是自签名的:
    1. 在安装了 认证机构 应用程序的 AD DC 上,按 Super key+R 组合打开 Run 对话框。
    2. 输入 certsrv.msc 命令,然后单击 OK 以打开 认证机构 应用程序。
    3. 右键点击本地证书颁发机构的名称,然后选择 Properties
    4. General 选项卡中,选择要在 CA 证书字段中导出的证书,然后点 View Certificate
    5. Details 选项卡中,点 Copy to File 以启动 证书导出向导
    6. 单击 Next,然后选择 Base-64 编码 X.509 (.CER)
    7. 为导出的文件指定合适的目录和文件名称。单击 Next 以导出证书,然后单击 Finish
    8. 将 root CA 证书复制到目录服务器主机。
  • 如果您的 AD CA 证书由外部 CA 签名:
    1. 确定 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。
    2. 如何检索 CA 证书,联系 root CA 的 operator。
    3. 将 root CA 证书复制到目录服务器主机。

16.4.4. 第 4 步:从目录服务器的 NSS 数据库中提取 CA 证书

从目录服务器的 NSS 数据库中提取 CA 证书:
  1. 列出数据库中的证书:
    # 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,,
  2. 从数据库中提取 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
  3. 将 CA 证书复制到 AD DC。

16.4.5. 第 5 步:创建同步帐户

要在 AD 和 Directory 服务器间同步,您需要 AD 中的一个帐户,并在 Directory 服务器中有一个帐户。本节介绍创建这些帐户的详情。

在目录服务器中创建帐户

AD DC 使用 Password Sync 服务中的 Directory Server 帐户将密码同步到目录服务器。例如,要在目录服务器中创建 cn=pw_sync_user,dc=config 用户:
  1. 创建用户帐户:
    # 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 日。
    重要
    为安全起见,请不要在同步子树中创建帐户。
  2. 在子树之上设置一个 ACI,它将同步并为 cn=pw_sync_user,dc=config 用户授予 writecompare 权限。例如,要将此类 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";)
  3. 配置目录服务器可以在更改日志中以明文形式存储密码:
    # 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 步:安装 密码同步 服务

在您的 AD 中的每个可写 DC 上安装 密码 同步。有关安装密码同步 服务的详情,请参考 红帽目录服务器安装指南中的安装密码同步服务部分。
有关运行红帽支持的 Password Sync 服务的操作系统列表,请查看 Red Hat Directory Server 发行注记

16.4.7. 第 7 步:将 CA 证书目录服务器添加到 密码 同步服务的证书数据库中

在安装 Password Sync 服务的每个 DC 上,将 CA 证书目录服务器添加到 Password Sync 服务的证书数据库中:
  1. 进入 C:\Program Files\Red Hat Directory Password synchronization\ 目录:
    > cd "C:\Program Files\Red Hat Directory Password Synchronization\"
  2. 在当前目录中创建证书数据库:
    > certutil.exe -d . -N
    certutil.exe 工具提示为它创建的新数据库设置密码。
  3. 导入目录服务器实例使用的 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"
  4. (可选)验证 CA 证书是否已正确存储在数据库中:
    > certutil.exe -d . -L
    
    Certificate Nickname                Trust Attributes
                                        SSL,S/MIME,JAR/XPI
    
    Example CA                          CT,,
  5. 重启 Windows DC。重启系统前,密码同步 服务不可用。
注意
如果您安装 Password Sync 时存在任何 AD 用户帐户,则服务无法同步这些帐户的密码,直到更改密码为止。这是因为当 密码同步 存储在 Active Directory 中后无法解密密码。有关为 AD 用户强制重置密码的详情,请查看 Active Directory 文档。

16.4.8. 第 8 步:将 CA 证书 AD 用于目录服务器的证书数据库

在 Directory Server 主机上,将 CA 证书 AD 使用添加到证书数据库中:
  1. 导入 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
  2. (可选)验证 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。以下流程描述了如何在这些主机之间配置同步:
  1. 为后缀启用复制:
    # 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 必须是 165534 之间的唯一整数。
  2. 添加同步协议并初始化协议。例如:
    # 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
  3. 验证初始化是否成功:
    # 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。以下流程描述了如何在这些主机之间配置同步:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 为后缀启用复制:
    1. 打开 Replication 菜单。
    2. 选择 dc=example,dc=com 后缀,然后单击 Enable Replication
    3. Replication Role 字段中选择 Supplier,并输入副本 ID。例如:
      这些设置将 ds.example.com 主机配置为 dc=example,dc=com 后缀的供应商,并将此条目的副本 ID 设置为 1
      重要
      对于拓扑中的所有供应商,副本 ID 必须是 165534 之间的唯一整数。
    4. Enable Replication
  4. 添加同步协议并初始化协议:
    1. 打开 Replication 菜单并选择 Winsync Agreements 条目。
    2. Create Agreement 并填写字段。例如:
      这些设置将创建一个名为 example-agreement 的同步协议。同步协议定义了设置,如 DC 的主机名、协议和身份验证信息,目录服务器在连接和同步数据时使用。
      (可选)选择 Sync New Windows UsersSync New Windows Groups,以将新的 Windows 用户和组自动同步到 Directory Server。
      创建协议后,目录服务器会初始化协议。要稍后初始化协议,请不要选择 Do Online Initialization。请注意,在初始化协议前同步不会启动。有关初始化同步协议的详情,请参考 第 16.11.2.2 节 “使用 Web 控制台执行完全同步”
    3. Save Agreement
  5. 验证初始化是否成功:
    1. 打开 Replication 菜单。
    2. 选择 Agreements 条目。
      如果初始化成功完成,Web 控制台会在 Last Update Status 列中显示 Error (0) Replica obtained: Incremental update successful 信息。
      根据要同步的数据量,初始化最多可能需要几小时。