Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
第 39 章 从 LDAP 目录迁移到 IdM
作为管理员,您之前为身份验证和身份查找部署了 LDAP 服务器,现在您要将后端迁移到身份管理。您需要使用 IdM 迁移工具来传输用户帐户,包括密码和组,而不丢失数据。此外,您还想避免对客户端进行昂贵的配置更新。
此处描述的迁移过程假定一个简单的部署场景,在 LDAP 和 IdM 中有一个名字空间的简单部署场景。对于更复杂的环境,如多个命名空间或自定义模式,请联系红帽支持服务。
39.1. LDAP 到 IdM 迁移概述
从 LDAP 服务器迁移到身份管理的实际迁移部分 - 将数据从一个服务器移动到另一台服务器的过程比较简单。此过程很简单:移动数据、移动密码和移动客户端。
迁移的最昂贵的部分是决定如何将客户端配置为使用身份管理。对于基础架构中的每个客户端,您需要决定正在使用哪些服务(如 Kerberos 和 SSSD),以及最终 IdM 部署中可以使用哪些服务。
辅助但重要的考虑是计划如何迁移密码。除了密码外,身份管理还需要每个用户帐户的 Kerberos 哈希。第 39.1.2 节 “计划密码迁移” 中介绍了密码的一些注意事项和迁移路径。
39.1.1. 规划客户端配置
身份管理可以支持多种不同的客户端配置,具有不同功能、灵活性和安全性。根据 每个客户端的操作系统、功能区域(如开发计算机、生产服务器或用户笔记本电脑)和 IT 维护优先事项,确定最适合每个 客户端的配置。
重要
不同的客户端配置 不是相互排斥的。大多数环境都混合有客户端用于连接 IdM 域的不同方法。管理员必须决定哪种方案最适合每个客户端。
39.1.1.1. 初始客户端配置(预迁移)
在决定您要在身份管理中使用客户端配置的位置前,首先在迁移前确定您在哪里。
要迁移的所有 LDAP 部署的初始状态是存在提供身份和身份验证服务的 LDAP 服务。
图 39.1. 基本 LDAP 目录和客户端配置

Linux 和 Unix 客户端使用 PAM_LDAP 和 NSS_LDAP 库直接连接到 LDAP 服务。这些库允许客户端从 LDAP 目录检索用户信息,就像数据存储在 /etc/
passwd 或 / etc /shadow 中一样。(在现实环境中,如果客户端使用 LDAP 进行身份查找,并且使用 Kerberos 进行身份验证或其他配置,则基础架构可能更为复杂。)
LDAP 目录和 IdM 服务器之间存在结构性差异,特别是在模式支持和目录树的结构方面。(有关这些差异的更多背景信息,请参阅 第 1.1.2 节 “将身份管理与标准 LDAP 目录进行比较”。) 虽然这些差异可能会影响数据(特别是目录树,这会影响条目名称),但它们对客户端配置的影响很少,因此它对将客户端迁移到身份管理的影响很少。
39.1.1.2. 推荐的 Red Hat Enterprise Linux 客户端的配置
Red Hat Enterprise Linux 有一个名为 系统安全服务守护进程 (SSSD)的服务。SSSD 使用特殊的 PAM 和 NSS 库(
pam_sss 和 nss_sss ),允许 SSSD 与身份管理紧密集成,并利用身份管理中的完整身份验证和身份功能。SSSD 具有许多有用的功能,如缓存身份信息,因此即使在中央服务器丢失了连接的情况下,用户也可以登录;这些内容在 系统级身份验证指南中 描述。
与通用 LDAP 目录服务(使用
pam_ldap 和 nss_ldap)不同,SSSD 通过定义 域 在身份和身份验证信息之间建立关系。SSSD 中的域定义四个后端功能:身份验证、身份查找、访问和密码更改。然后,SSSD 域配置为使用 供应商 为这四个功能中的任何一个(或全部)提供信息。域配置中始终需要一个身份提供程序。其他三个提供程序是可选的;如果未定义身份验证、访问或密码提供程序,则将身份提供程序用于该功能。
SSSD 可以对所有后端功能使用身份管理。这是理想的配置,因为它提供了完整的身份管理功能,这与通用 LDAP 身份提供程序或 Kerberos 身份验证不同。例如,在日常操作过程中,SSSD 在身份管理中强制执行基于主机的访问控制规则和安全功能。
注意
在迁移过程中,从 LDAP 目录到身份管理,SSSD 可以无缝地迁移用户密码,而无需额外的用户交互。
图 39.2. 客户端和带有 IdM 后端的 SSSD

ipa-client-install 脚本会自动将 SSSD 配置为对所有四个后端服务使用 IdM,因此默认使用推荐的配置设置 Red Hat Enterprise Linux 客户端。
注意
此客户端配置只支持 Red Hat Enterprise Linux 6.1 及更新的版本和 Red Hat Enterprise Linux 5.7,它支持 SSSD 和 ipa-client 的最新版本。可以配置旧版本的 Red Hat Enterprise Linux,如 第 39.1.1.3 节 “备用支持的配置” 所述。
39.1.1.3. 备用支持的配置
UNIX 和 Linux 系统,如 Mac、Solaris、HP-UX、OSPX 和 Scientific Linux 支持 IdM 管理的所有服务,但不使用 SSSD。同样,旧的 Red Hat Enterprise Linux 版本(6.1 和 5.6)支持 SSSD,但有一个旧版本,它不支持 IdM 作为身份提供程序。
当无法在系统上使用 SSSD 的现代版本时,可以将客户端配置为连接到 IdM 服务器,就像它是身份查找的 LDAP 目录服务(使用
nss_ldap),以及 IdM (就像使用 pam_krb5)一样。
图 39.3. 客户端与带有 LDAP 和 Kerberos 的 IdM

如果 Red Hat Enterprise Linux 客户端使用旧版本的 SSSD,则 SSSD 仍可配置为使用 IdM 服务器作为其身份提供者及其 Kerberos 身份验证域;这在 系统级身份验证指南 的 SSSD 配置部分中进行了描述。
任何 IdM 域客户端都可以使用
nss_ldap 和 pam_krb5 连接到 IdM 服务器。对于某些维护情况和 IT 结构,可能需要将 LDAP 用于身份和验证(nss_ldap 和 pam_ldap)。但是,通常最好将最安全的配置用于客户端。这意味着 SSSD 或 LDAP 用于身份和 Kerberos(用于身份验证)。
39.1.2. 计划密码迁移
很可能影响 LDAP 到身份管理迁移的最可见问题是迁移用户密码。
身份管理(默认)使用 Kerberos 进行身份验证,并且要求每个用户除标准用户密码外,每个用户还有存储在身份管理目录服务器中的 Kerberos 哈希。要生成这些哈希,用户需要以明文形式对 IdM 服务器提供用户密码。当您创建用户时,密码会在哈希化并存储在身份管理之前以明文形式提供。但是,当用户从 LDAP 目录迁移时,相关的用户密码已被哈希处理,因此无法生成对应的 Kerberos 密钥。
重要
用户无法对 IdM 域进行身份验证或访问 IdM 资源,直到它们有 Kerberos 哈希。
如果用户没有 Kerberos 哈希[6],即使他有用户帐户,该用户也无法登录 IdM 域。迁移密码有三个选项:强制更改密码、使用 Web 页面和使用 SSSD。
从现有系统迁移用户会提供更畅的过渡,但还需要在迁移和转换过程中并行管理 LDAP 目录和 IdM。如果您不保留密码,可以更快地执行迁移,但需要管理员和用户进行更多手动操作。
39.1.2.1. 方法 1:使用临时密码和要求更改
当在身份管理中更改密码时,将使用适当的 Kerberos 哈希创建它们。因此,管理员的一种替代方案是在迁移用户帐户时重置所有用户帐户,从而强制用户更改其密码。新用户被分配一个临时密码,在第一次登录时更改密码。没有迁移密码。
详情请查看 第 22.1.1 节 “更改和重置用户密码”。
39.1.2.2. 方法 2:使用 Migration Web 页面
当它以迁移模式运行时,身份管理在其 Web UI 中有一个特殊的网页,它将捕获明文密码并创建适当的 Kerberos 哈希。
https://ipaserver.example.com/ipa/migration
管理员可以告诉用户对此网页进行身份验证一次,该页面将使用密码和相应的 Kerberos 哈希正确更新其用户帐户,而无需更改密码。
39.1.2.3. 方法 3:使用 SSSD(推荐)
SSSD 可以与 IdM 一起使用,通过生成所需的用户密钥来缓解用户对迁移的影响。对于具有大量用户或用户不应使用密码更改负担的部署,这是最佳方案。
- 用户使用 SSSD 登录到机器。
- SSSD 尝试对 IdM 服务器执行 Kerberos 身份验证。
- 尽管用户存在于系统中,但 不支持错误密钥类型的身份验证会失败,因为 Kerberos 哈希尚不存在。
- 然后 SSSD 对安全连接执行纯文本 LDAP 绑定。
- IdM 截获此绑定请求。如果用户有 Kerberos 主体,但没有 Kerberos 哈希,则 IdM 身份提供者会生成哈希,并将其存储在用户条目中。
- 如果身份验证成功,SSSD 会断开与 IdM 的连接,并再次尝试 Kerberos 身份验证。这一次,请求会成功,因为条目中存在哈希。
整个进程对用户完全透明;就用户所知,他们只需登录客户端服务即可正常工作。
39.1.2.4. 迁移 Cleartext LDAP 密码
尽管大多数部署中 LDAP 密码都存储有加密方式,但可能存在某些用户或某些环境对用户条目使用明文密码。
当用户从 LDAP 服务器迁移到 IdM 服务器时,他们的明文密码不会迁移。身份管理不允许明文密码。相反,会为用户创建 Kerberos 主体,而 keytab 设置为 true,密码设置为过期。这意味着身份管理要求用户在下次登录时重置密码。
注意
如果对密码进行哈希处理,密码将通过 SSSD 和迁移网页成功迁移,如 第 39.1.2.2 节 “方法 2:使用 Migration Web 页面” 和 第 39.1.2.3 节 “方法 3:使用 SSSD(推荐)” 中所示。
39.1.2.5. 自动重置密码,但无需满足要求
如果原始目录中的用户密码不符合身份管理中定义的密码策略,则必须在迁移后重置密码。
当用户第一次尝试 kinit 到 IdM 域时,会自动重置密码。
[jsmith@server ~]$ kinit Password for jsmith@EXAMPLE.COM: Password expired. You must change it now. Enter new password: Enter it again:
39.1.3. 迁移注意事项和要求
当您计划从 LDAP 服务器迁移到身份管理时,请确保您的 LDAP 环境能够使用身份管理迁移脚本。
39.1.3.1. 支持迁移的 LDAP 服务器
从 LDAP 服务器到身份管理的迁移过程使用特殊的脚本 ipa migrate-ds 来执行迁移。此脚本对 LDAP 目录和 LDAP 条目的结构有一定的预期,以便能工作。仅支持 LDAPv3 兼容目录服务的迁移,其中包括几个通用目录:
- Sun ONE 目录服务器
- Apache 目录服务器
- OpenLDAP
从 LDAP 服务器迁移到身份管理已使用红帽目录服务器和 OpenLDAP 进行了测试。
注意
Microsoft Active Directory 不支持使用 迁移脚本进行迁移,因为它不是符合 LDAPv3 的目录。如需从 Active Directory 迁移的帮助,请联系红帽专业服务。
39.1.3.2. 迁移环境要求
Red Hat Directory Server 和 Identity Management 有很多不同的配置场景,其中任何一种情况可能会影响迁移过程。对于本章中的迁移过程示例,以下是有关环境的假设:
- 正在将一个 LDAP 目录域迁移到一个 IdM 域。不涉及整合。
- 用户密码作为哈希存储在 LDAP 目录中。有关支持的哈希列表,请参阅 Table 19.2 中的
passwordStorageScheme属性。Red Hat Directory Server 10 管理指南中的 与密码策略相关的属性。 - LDAP 目录实例既是身份存储和身份验证方法。客户端机器配置为使用 pam_ldap 或 nss_ldap 连接到 LDAP 服务器。
- 条目仅使用标准 LDAP 模式。包含自定义对象类或属性的条目不会迁移到身份管理。
39.1.3.3. 迁移 - IdM 系统要求
对于中等大小的目录(大约 10,000 个用户和 10 个组),需要具有足够强大的目标系统(IdM 系统)来允许迁移继续进行。迁移的最低要求是:
- 4 个内核
- 4GB RAM
- 30GB 磁盘空间
- 2MB 的 SASL 缓冲大小(IdM 服务器的默认)如果出现迁移错误,请增大缓冲大小:
[root@ipaserver ~]# ldapmodify -x -D 'cn=directory manager' -w password -h ipaserver.example.com -p 389 dn: cn=config changetype: modify replace: nsslapd-sasl-max-buffer-size nsslapd-sasl-max-buffer-size: 4194304 modifying entry "cn=config"
设置nsslapd-sasl-max-buffer-size值(以字节为单位)。
39.1.3.4. 关于 Sudo 规则的注意事项
如果您已在 LDAP 中使用
sudo,则必须手动迁移存储在 LDAP 中的 sudo 规则。红帽建议在 IdM 中重新创建 netgroups 作为 hostgroups。IdM 为不使用 SSSD sudo 提供者的 sudo 配置自动将 hostgroups 显示为传统的 netgroups。
39.1.3.5. 迁移工具
身份管理使用特定命令 ipa migrate-ds 驱动迁移过程,以便 LDAP 目录数据被正确格式化并导入到 IdM 服务器中。使用 ipa migrate-ds 时,远程系统用户(由
--bind-dn 选项指定)需要具有对 userPassword 属性的读取访问权限,否则不会迁移密码。
身份管理服务器必须配置为在迁移模式下运行,然后可以使用迁移脚本。详情请查看 第 39.3 节 “将 LDAP 服务器迁移到身份管理”。
39.1.3.6. 提高迁移性能
LDAP 迁移基本上是 IdM 服务器中 389 目录服务器实例的专用导入操作。调整 389 目录服务器实例以获得更好的导入操作性能,有助于提高整体迁移性能。
有两个参数会直接影响导入性能:
nsslapd-cachememsize属性定义条目缓存允许的大小。这是一个缓冲区,自动设置为总缓存内存大小的 80%。对于大型导入操作,可以增大此参数(或许内存缓存本身),以便更有效地处理大量条目或具有更大属性的条目。有关如何使用 ldapmodify 修改属性的详情,请参阅 Red Hat Directory Server 10 性能调节指南中的设置 条目缓存大小。https://access.redhat.com/documentation/zh-cn/red_hat_directory_server/11/html-single/performance_tuning_guide/index#tuning-entry-cache- 系统 ulimit 配置选项设置系统用户允许的最大进程数。处理大型数据库可能会超过限制。如果发生这种情况,增加值:
[root@server ~]# ulimit -u 4096
如需更多信息,请参阅红帽目录服务器 性能调优指南,网址为 https://access.redhat.com/documentation/zh-cn/red_hat_directory_server/11/html-single/performance_tuning_guide/index。
39.1.3.7. 迁移序列
迁移到身份管理时有四个主要步骤,但顺序略有不同,具体取决于您要首先迁移服务器还是客户端。
使用基于客户端的迁移时,SSSD 用于在配置 IdM 服务器时更改客户端配置:
- 部署 SSSD.
- 重新配置客户端以连接到当前的 LDAP 服务器,然后故障转移到 IdM。
- 安装 IdM 服务器。
- 使用 IdM ipa migrate-ds 脚本迁移用户数据。这会从 LDAP 目录导出数据、IdM 模式的格式,然后将它导入到 IdM。
- 使 LDAP 服务器离线,并允许客户端透明地切换到身份管理。
通过服务器迁移,LDAP 到身份管理迁移首先是:
- 安装 IdM 服务器。
- 使用 IdM ipa migrate-ds 脚本迁移用户数据。这会从 LDAP 目录导出数据,为 IdM 模式格式化数据,然后将其导入到 IdM 中。
- 可选。部署 SSSD.
- 重新配置客户端来连接到 IdM。无法简单地替换 LDAP 服务器。IdM 目录树 - 因此用户条目 DN - 与之前的目录树不同。虽然需要重新配置客户端,但不需要立即重新配置客户端。更新的客户端可以指向 IdM 服务器,而其他客户端则指向旧的 LDAP 目录,从而在数据迁移后可允许合理的测试和过渡阶段。注意不要长时间并行运行 LDAP 目录服务和 IdM 服务器。这增加了两个服务之间用户数据不一致的风险。
这两个进程都提供常规迁移过程,但可能并不在每个环境中都有效。在尝试迁移真实 LDAP 环境之前,设置测试 LDAP 环境并测试迁移过程。