在身份管理中使用外部的红帽实用程序
在 IdM 中集成服务和红帽产品
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。帮助我们如何进行改进。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 在顶部导航栏中点 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您的建议以改进。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 IdM 与红帽产品集成 复制链接链接已复制到粘贴板!
查找与 IdM 集成的其他红帽产品的文档。您可以配置这些产品,以允许 IdM 用户可以访问它们的服务。
第 2 章 使用外部身份提供程序向 IdM 进行身份验证 复制链接链接已复制到粘贴板!
您可以将用户与支持 OAuth 2.0 设备授权流的外部身份提供程序(IdP)关联。当这些用户使用 RHEL 9.1 或更高版本中的系统安全服务守护进程(SSSD)版本进行身份验证时,它们会在外部 IdP 执行身份验证和授权后收到带有 Kerberos 票据的 RHEL Identity Management (IdM)单点登录功能。
主要特性包括:
-
使用
ipa idp-*命令添加、修改和删除对外部 IdP 的引用。 -
使用
ipa user-mod --user-auth-type=idp命令为用户启用 IdP 身份验证。
2.1. 将 IdM 连接到外部 IdP 的好处 复制链接链接已复制到粘贴板!
作为管理员,您可能想要允许存储在外部身份源(如云服务供应商)中的用户访问连接到 Identity Management (IdM) 环境的 RHEL 系统。要达到此目的,您可以将这些用户的 Kerberos 票据的身份验证和授权过程委托给该外部实体。
您可以使用此功能扩展 IdM 的功能,并允许存储在外部身份提供程序 (IdP) 中的用户访问由 IdM 管理的 Linux 系统。
2.2. IdM 如何通过外部 IdP 融合登录 复制链接链接已复制到粘贴板!
SSSD 2.7.0 包含 sssd-idp 软件包,该软件包可实施 idp Kerberos pre-authentication 方法。这个验证方法遵循 OAuth 2.0 设备授权流,将授权决策委派给外部 IdP:
-
IdM 客户端用户启动 OAuth 2.0 设备授权流,例如,通过在命令行中使用
kinit工具检索 Kerberos Ticket Granting Ticket Granting Ticket (TGT)。 - 一个特殊的代码和网站链接从授权服务器发送到 IdM 密钥分发中心(KDC)后端。
- IdM 客户端显示用户的链接和代码。在本例中,IdM 客户端会在命令行上输出链接和代码。
用户在浏览器中打开网站链接,可以在另一个主机上、移动电话等:
- 用户输入特殊代码。
- 如有必要,用户登录到基于 OAuth 2.0 的 IdP。
- 系统将提示用户授权客户端访问信息。
- 用户在原始设备提示符处确认访问。在这个示例中,用户在命令行中点 Enter 键。
- IdM KDC 后端轮询 OAuth 2.0 授权服务器以访问用户信息。
支持什么:
-
启用了
键盘互动验证方法通过 Secure Shell (SSH)远程登录,它允许调用可插拔验证模块(PAM)库。 -
通过
logind服务,使用控制台本地登录。 -
使用
kinit工具检索 Kerberos TGT。
当前不支持什么:
- 直接登录到 IdM WebUI。要登录到 IdM WebUI,您必须首先获取一个 Kerberos ticket。
- 直接登录 Cockpit WebUI。要登录 Cockpit Web UI,您必须首先获取一个 Kerberos ticket。
2.3. 创建对外部身份提供程序的引用 复制链接链接已复制到粘贴板!
要将外部身份提供者(IdP)连接到您的身份管理(IdM)环境,请在 IdM 中创建 IdP 引用。完成此流程,来根据 Keycloak 模板创建一个到 IdP 的名为 my-keycloak-idp 的引用。如需了解更多引用模板,请参阅 IdM 中到不同外部 IdP 的引用示例。
先决条件
- 您已将 IdM 作为 OAuth 应用程序注册到外部 IdP,并获取了客户端 ID。
- 您可以作为 IdM admin 帐户进行身份验证。
- 您的 IdM 服务器使用 RHEL 9.1 或更高版本。
- 您的 IdM 服务器使用 SSSD 2.7.0 或更高版本。
流程
在 IdM 服务器中作为 IdM 管理员进行身份验证。
[root@server ~]# kinit admin根据 Keycloak 模板,创建一个到 IdP 的名为
my-keycloak-idp的引用,其中--base-url选项指定到 Keycloak 服务器的 URL,格式为server-name.$DOMAIN:$PORT/prefix。[root@server ~]# ipa idp-add my-keycloak-idp \ --provider keycloak --organization main \ --base-url keycloak.idm.example.com:8443/auth \ --client-id id13778 ------------------------------------------------ Added Identity Provider reference "my-keycloak-idp" ------------------------------------------------ Identity Provider reference name: my-keycloak-idp Authorization URI: https://keycloak.idm.example.com:8443/auth/realms/main/protocol/openid-connect/auth Device authorization URI: https://keycloak.idm.example.com:8443/auth/realms/main/protocol/openid-connect/auth/device Token URI: https://keycloak.idm.example.com:8443/auth/realms/main/protocol/openid-connect/token User info URI: https://keycloak.idm.example.com:8443/auth/realms/main/protocol/openid-connect/userinfo Client identifier: ipa_oidc_client Scope: openid email External IdP user identifier attribute: email
验证
验证
ipa idp-show命令的输出显示您创建的 IdP 引用。[root@server ~]# ipa idp-show my-keycloak-idp
2.4. IdM 中到不同外部 IdP 的引用示例 复制链接链接已复制到粘贴板!
下表列出了在 IdM 中创建到不同 IdP 的引用的 ipa idp-add 命令的示例。
| 身份供应商 | 重要选项 | 命令示例 |
|---|---|---|
|
Microsoft Identity Platform, |
|
|
| |
|
|
| GitHub |
|
|
|
Keycloak, |
|
注意
Keycloak 17 及更新版本的 Quarkus 版本已删除 URI 的 |
| Okta |
|
|
2.5. 在 IdM 中管理外部身份提供者的 ipa idp-* 命令的选项 复制链接链接已复制到粘贴板!
以下示例演示了如何根据不同的 IdP 模板配置到外部 IdP 的引用。使用以下选项指定设置:
--provider- 其中一个已知的身份提供程序的预定义模板。
--client-id- IdP 在应用程序注册过程中发布的 OAuth 2.0 客户端标识符。当应用程序注册步骤特定于每个 IdP 时,请参考它们的文档来了解详情。如果外部 IdP 是红帽单点登录(SSO),请参阅 创建 OpenID Connect 客户端。
--base-url- Keycloak 和 Okta 所需的 IdP 模板的基本 URL。
--organization- Microsoft Azure 需要的 IdP 中的域或机构 ID。
--secret可选:如果您已将外部 IdP 配置为需要来自机密 OAuth 2.0 客户端的 secret,则使用此选项。如果您在创建 IdP 引用时使用这个选项,则会以交互方式会提示您输入 secret。将客户端 secret 作为密码保护。
注意RHEL 9.1 中的 SSSD 只支持不使用客户端 secret 的非机密 OAuth 2.0 客户端。如果要使用需要机密客户端 secret 的外部 IdP,您必须在 RHEL 9.2 及之后的版本中使用 SSSD。
2.6. 管理对外部 IdP 的引用 复制链接链接已复制到粘贴板!
创建对外部身份提供程序 (IdP) 的引用后,您可以找到、显示、修改和删除该引用。本例演示了如何管理对名为 keycloak-server1 的外部 IdP 的引用。
先决条件
- 您可以作为 IdM admin 帐户进行身份验证。
- 您的 IdM 服务器使用 RHEL 9.1 或更高版本。
- 您的 IdM 服务器使用 SSSD 2.7.0 或更高版本。
- 您已在 IdM 中创建了到外部 IdP 的引用。请参阅创建对外部身份提供程序的引用。
步骤
在 IdM 服务器中作为 IdM 管理员进行身份验证。
[root@server ~]# kinit admin管理 IdP 参考。
查找 IdP 参考,其条目包括字符串
keycloak:[root@server ~]# ipa idp-find keycloak显示名为
my-keycloak-idp的 IdP 参考:[root@server ~]# ipa idp-show my-keycloak-idp要修改 IdP 参考,请使用
ipa idp-mod命令。例如,要更改名为my-keycloak-idp的 IdP 参考的 secret,请指定要提示输入 secret 的--secret选项:[root@server ~]# ipa idp-mod my-keycloak-idp --secret删除名为
my-keycloak-idp的 IdP 参考:[root@server ~]# ipa idp-del my-keycloak-idp
2.7. 启用 IdM 用户通过外部 IdP 进行身份验证 复制链接链接已复制到粘贴板!
要启用 IdM 用户通过外部身份提供程序 (IdP),将之前创建的外部 IdP 引用与用户帐户关联。这个示例将外部 IdP 引用 keycloak-server1 与用户 idm-user-with-external-idp 相关联。
先决条件
- 您的 IdM 客户端和服务器使用 RHEL 9.1 或更高版本。
- 您的 IdM 客户端和服务器使用 SSSD 2.7.0 或更高版本。
- 您已在 IdM 中创建了到外部 IdP 的引用。请参阅创建对外部身份提供程序的引用。
步骤
修改 IdM 用户条目,将 IdP 引用与用户帐户关联:
[root@server ~]# ipa user-mod idm-user-with-external-idp \ --idp my-keycloak-idp \ --idp-user-id idm-user-with-external-idp@idm.example.com \ --user-auth-type=idp --------------------------------- Modified user "idm-user-with-external-idp" --------------------------------- User login: idm-user-with-external-idp First name: Test Last name: User1 Home directory: /home/idm-user-with-external-idp Login shell: /bin/sh Principal name: idm-user-with-external-idp@idm.example.com Principal alias: idm-user-with-external-idp@idm.example.com Email address: idm-user-with-external-idp@idm.example.com UID: 35000003 GID: 35000003 User authentication types: idp External IdP configuration: keycloak External IdP user identifier: idm-user-with-external-idp@idm.example.com Account disabled: False Password: False Member of groups: ipausers Kerberos keys available: False
验证
验证该用户的
ipa user-show命令的输出是否显示对 IdP 的引用:[root@server ~]# ipa user-show idm-user-with-external-idp User login: idm-user-with-external-idp First name: Test Last name: User1 Home directory: /home/idm-user-with-external-idp Login shell: /bin/sh Principal name: idm-user-with-external-idp@idm.example.com Principal alias: idm-user-with-external-idp@idm.example.com Email address: idm-user-with-external-idp@idm.example.com ID: 35000003 GID: 35000003 User authentication types: idp External IdP configuration: keycloak External IdP user identifier: idm-user-with-external-idp@idm.example.com Account disabled: False Password: False Member of groups: ipausers Kerberos keys available: False
2.8. 以外部 IdP 用户身份检索 IdM 票据授予票据 复制链接链接已复制到粘贴板!
如果您已将身份管理(IdM)用户的身份验证委派给外部身份提供者(IdP),则 IdM 用户可以通过认证到外部 IdP 来请求 Kerberos 票据授予票据(TGT)。
完成此流程,来:
- 在本地检索和存储匿名 Kerberos 票据。
-
使用
kinit和-T选项为 idm-user-with-external-idp 用户请求 TGT,以通过 Secure Tunneling (FAST)渠道启用灵活的身份验证,来在 Kerberos 客户端和 Kerberos 分发中心(KDC)之间提供安全连接。
先决条件
- 您的 IdM 客户端和服务器使用 RHEL 9.1 或更高版本。
- 您的 IdM 客户端和服务器使用 SSSD 2.7.0 或更高版本。
- 您已在 IdM 中创建了到外部 IdP 的引用。请参阅创建对外部身份提供程序的引用。
- 您已与用户帐户关联了一个外部 IdP 参考。请参阅启用 IdM 用户以通过外部 IdP 进行身份验证。
- 您最初以其份登录的用户对本地文件系统中的目录有写权限。
步骤
使用 Anonymous PKINIT 获取 Kerberos 票据,并将其存储在名为
./fast.ccache的文件中。$ kinit -n -c ./fast.ccache可选:查看检索到的票据:
$ klist -c fast.ccache Ticket cache: FILE:fast.ccache Default principal: WELLKNOWN/ANONYMOUS@WELLKNOWN:ANONYMOUS Valid starting Expires Service principal 03/03/2024 13:36:37 03/04/2024 13:14:28 krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM以 IdM 用户身份开始身份验证,使用
-T选项启用 FAST 通信渠道。[root@client ~]# kinit -T ./fast.ccache idm-user-with-external-idp Authenticate at https://oauth2.idp.com:8443/auth/realms/master/device?user_code=YHMQ-XKTL and press ENTER.:- 在浏览器中,以命令输出中提供的网站的用户身份进行身份验证。
- 在命令行中,按 Enter 键来完成身份验证过程。
验证
显示您的 Kerberos ticket 信息,并确认对于带有外部 IdP 的预身份验证的行
config: pa_type显示152。[root@client ~]# klist -C Ticket cache: KCM:0:58420 Default principal: idm-user-with-external-idp@IDM.EXAMPLE.COM Valid starting Expires Service principal 05/09/22 07:48:23 05/10/22 07:03:07 krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM config: fast_avail(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = yes 08/17/2022 20:22:45 08/18/2022 20:22:43 krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM config: pa_type(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = 152pa_type = 152表示外部 IdP 身份验证。
2.9. 以外部 IdP 用户身份通过 SSH 登录到 IdM 客户端 复制链接链接已复制到粘贴板!
要通过 SSH 作为外部身份提供程序 (IdP) 用户身份登录 IdM 客户端,请在命令行中开始登录过程。出现提示时,在与 IdP 关联的网站上执行身份验证过程,并在 Identity Management (IdM) 客户端上完成该过程。
先决条件
- 您的 IdM 客户端和服务器使用 RHEL 9.1 或更高版本。
- 您的 IdM 客户端和服务器使用 SSSD 2.7.0 或更高版本。
- 您已在 IdM 中创建了到外部 IdP 的引用。请参阅创建对外部身份提供程序的引用。
- 您已与用户帐户关联了一个外部 IdP 参考。请参阅启用 IdM 用户以通过外部 IdP 进行身份验证。
步骤
尝试通过 SSH 登录到 IdM 客户端。
[user@client ~]$ ssh idm-user-with-external-idp@client.idm.example.com (idm-user-with-external-idp@client.idm.example.com) Authenticate at https://oauth2.idp.com:8443/auth/realms/main/device?user_code=XYFL-ROYR and press ENTER.- 在浏览器中,以命令输出中提供的网站的用户身份进行身份验证。
- 在命令行中,按 Enter 键来完成身份验证过程。
验证
显示您的 Kerberos ticket 信息,并确认对于带有外部 IdP 的预身份验证的行
config: pa_type显示152。[idm-user-with-external-idp@client ~]$ klist -C Ticket cache: KCM:0:58420 Default principal: idm-user-with-external-idp@IDM.EXAMPLE.COM Valid starting Expires Service principal 05/09/22 07:48:23 05/10/22 07:03:07 krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM config: fast_avail(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = yes 08/17/2022 20:22:45 08/18/2022 20:22:43 krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM config: pa_type(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = 152
2.10. ipa idp-* 命令中的 --provider 选项 复制链接链接已复制到粘贴板!
以下身份提供程序 (IdP) 支持 OAuth 2.0 设备授权流:
- Microsoft Identity Platform,包括 Azure AD
- GitHub
- Keycloak,包括 Red Hat Single Sign-On (SSO)
- Okta
当使用 ipa idp-add 命令创建对其中一个外部 IdP 的引用时,您可以使用 --provider 选项指定 IdP 类型,它扩展至额外的选项,如下所述:
--provider=microsoftMicrosoft Azure IdP 允许基于 Azure 租户 ID 进行半虚拟化 ID,您可以使用
--organization选项指定ipa idp-add命令。如果您需要对 live.com IdP 的支持,请指定--organization common的选项。选择
--provider=microsoft扩展以使用以下选项:--organization选项的值替换了表中的字符串${ipaidporg}。Expand 选项 值 --auth-uri=URIhttps://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/authorize--dev-auth-uri=URIhttps://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/devicecode--token-uri=URIhttps://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/token--userinfo-uri=URIhttps://graph.microsoft.com/oidc/userinfo--keys-uri=URIhttps://login.microsoftonline.com/common/discovery/v2.0/keys--scope=STRopenid email--idp-user-id=STRemail--provider=google选择
--provider=google扩展以使用以下选项:Expand 选项 值 --auth-uri=URIhttps://accounts.google.com/o/oauth2/auth--dev-auth-uri=URIhttps://oauth2.googleapis.com/device/code--token-uri=URIhttps://oauth2.googleapis.com/token--userinfo-uri=URIhttps://openidconnect.googleapis.com/v1/userinfo--keys-uri=URIhttps://www.googleapis.com/oauth2/v3/certs--scope=STRopenid email--idp-user-id=STRemail--provider=github选择
--provider=github展开以使用以下选项:Expand 选项 值 --auth-uri=URIhttps://github.com/login/oauth/authorize--dev-auth-uri=URIhttps://github.com/login/device/code--token-uri=URIhttps://github.com/login/oauth/access_token--userinfo-uri=URIhttps://openidconnect.googleapis.com/v1/userinfo--keys-uri=URIhttps://api.github.com/user--scope=STRuser--idp-user-id=STRlogin--provider=keycloak使用 Keycloak 时,您可以定义多个域或机构。由于它是自定义部署的一部分,基本 URL 和域 ID 都是必需的,因此您可以使用
--base-url和--organization选项指定它们到ipa idp-add命令:[root@client ~]# ipa idp-add MySSO --provider keycloak \ --org main --base-url keycloak.domain.com:8443/auth \ --client-id <your-client-id>选择
--provider=keycloak扩展以使用以下选项:您在--base-url选项中指定的值替换表中的字符串${ipaidpbaseurl},而您为--organization指定的选项替换字符串 `${ipaidporg}。Expand 选项 值 --auth-uri=URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/auth--dev-auth-uri=URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/auth/device--token-uri=URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/token--userinfo-uri=URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/userinfo--scope=STRopenid email--idp-user-id=STRemail--provider=okta在注册一个 Okta 中的新机构后,会关联一个新的基本 URL。您可以使用
ipa idp-add命令的--base-url选项指定这个基本 URL:[root@client ~]# ipa idp-add MyOkta --provider okta --base-url dev-12345.okta.com --client-id <your-client-id>选择
--provider=okta扩展以使用以下选项:您为--base-url选项指定的值替换了表中字符串${ipaidpbaseurl}。Expand 选项 值 --auth-uri=URIhttps://${ipaidpbaseurl}/oauth2/v1/authorize--dev-auth-uri=URIhttps://${ipaidpbaseurl}/oauth2/v1/device/authorize--token-uri=URIhttps://${ipaidpbaseurl}/oauth2/v1/token--userinfo-uri=URIhttps://${ipaidpbaseurl}/oauth2/v1/userinfo--scope=STRopenid email--idp-user-id=STRemail
第 3 章 在 IdM 域成员中设置 Samba 复制链接链接已复制到粘贴板!
您可以在加入到 Red Hat Identity Management (IdM)域的主机上设置 Samba。来自IdM的用户,以及来自受信任的 Active Directory(AD)域的用户(如果有的话)可以访问 Samba 提供的共享和打印机服务。
对 IdM 域成员使用 Samba 是一种不受支持的技术预览特性,且包含了某些限制。例如,IdM 信任控制器不支持 Active Directory 全局目录服务,它们不支持使用分布式计算环境/远程过程调用 (DCE/RPC) 协议解析 IdM 组。因此,AD 用户只能在登录到其他 IdM 客户端时访问托管在 IdM 客户端中的 Samba 共享和打印机 ; 登录到 Windows 机器的 AD 用户无法访问托管在 IdM 域成员中的 Samba 共享。
我们鼓励在 IdM 域成员中部署 Samba 的用户向红帽提供反馈意见。
如果 AD 域中的用户需要访问 Samba 提供的共享和打印机服务,请确保在 AD 中启用了 AES 加密类型。如需更多信息,请参阅 使用 GPO 在活动目录中启用 AES 加密类型。
先决条件
- 主机作为 IdM 域的客户端加入。
- IdM 服务器和客户端必须在 RHEL 9.0 或更高版本中运行。
3.1. 准备 IdM 域以便在域成员中安装 Samba 复制链接链接已复制到粘贴板!
在IdM客户端上设置Samba之前,必须在IdM服务器上使用ipa-adtrust-install工具来准备IdM域。
运行ipa-adtrust-install命令的任何系统都会自动成为 AD 信任控制器。但是,您必须在 IdM 服务器上只运行一次 ipa-adtrust-install 。
先决条件
- IdM 服务器已安装。
- 您有 root 特权来安装软件包,并重启 IdM 服务。
步骤
安装所需的软件包:
[root@ipaserver ~]# dnf install ipa-server-trust-ad samba-client以 IdM 管理用户身份进行身份验证:
[root@ipaserver ~]# kinit admin运行
ipa-adtrust-install工具:[root@ipaserver ~]# ipa-adtrust-install如果 IdM 安装了集成的 DNS 服务器,则会自动创建 DNS 服务记录。
如果您在没有集成 DNS 服务器的情况下安装了 IdM,
ipa-adtrust-install会打印一个服务记录列表,您必须手动将它们添加到 DNS ,然后才能继续操作。该脚本提示您
/etc/samba/smb.conf已存在,并将被重写:WARNING: The smb.conf already exists. Running ipa-adtrust-install will break your existing Samba configuration. Do you wish to continue? [no]: yes该脚本提示您配置
slapi-nis插件,这是一个兼容插件,允许旧的 Linux 客户端与受信任的用户一起工作:Do you want to enable support for trusted domains in Schema Compatibility plugin? This will allow clients older than SSSD 1.9 and non-Linux clients to work with trusted users. Enable trusted domains support in slapi-nis? [no]: yes系统会提示您运行 SID 生成任务,以便为任何现有用户创建 SID:
Do you want to run the ipa-sidgen task? [no]: yes这是一个资源密集型任务,因此如果您有大量的用户,您可以在其他时间运行此操作。
可选:默认情况下,对于 Windows Server 2008 及更高版本,动态 RPC 端口范围定义为
49152-65535。如果需要为您的环境定义一个不同的动态 RPC 端口范围,请将 Samba 配置为使用不同的端口,并在防火墙设置中开放这些端口。以下示例将端口范围设置为55000-65000。[root@ipaserver ~]# net conf setparm global 'rpc server dynamic port range' 55000-65000 [root@ipaserver ~]# firewall-cmd --add-port=55000-65000/tcp [root@ipaserver ~]# firewall-cmd --runtime-to-permanent重启
ipa服务:[root@ipaserver ~]# ipactl restart使用
smbclient工具来验证 Samba 是否响应 IdM 端的 Kerberos 身份验证:[root@ipaserver ~]# smbclient -L ipaserver.idm.example.com -U user_name --use-kerberos=required lp_load_ex: changing to config backend registry Sharename Type Comment --------- ---- ------- IPC$ IPC IPC Service (Samba 4.15.2) ...
3.2. 在 IdM 客户端中安装和配置 Samba 服务器 复制链接链接已复制到粘贴板!
您可以在 IdM 域注册的客户端上安装和配置 Samba。
先决条件
- IdM 服务器和客户端必须在 RHEL 9.0 或更高版本中运行。
- 已准备好 IdM 域,如 为在域成员上安装 Samba 准备 IdM 域 中所述。
- 如果 IdM 具有配置了 AD 的信任,请为 Kerberos 启用 AES 加密类型。例如,使用组策略对象(GPO)来启用 AES 加密类型。详情请参阅使用 GPO 在活动目录中启用 AES 加密。
流程
安装
ipa-client-samba软件包:[root@idm_client]# dnf install ipa-client-samba使用
ipa-client-samba工具准备客户端并创建初始 Samba 配置:[root@idm_client]# ipa-client-samba Searching for IPA server... IPA server: DNS discovery Chosen IPA master: idm_server.idm.example.com SMB principal to be created: cifs/idm_client.idm.example.com@IDM.EXAMPLE.COM NetBIOS name to be used: IDM_CLIENT Discovered domains to use: Domain name: idm.example.com NetBIOS name: IDM SID: S-1-5-21-525930803-952335037-206501584 ID range: 212000000 - 212199999 Domain name: ad.example.com NetBIOS name: AD SID: None ID range: 1918400000 - 1918599999 Continue to configure the system with these values? [no]: yes Samba domain member is configured. Please check configuration at /etc/samba/smb.conf and start smb and winbind services默认情况下,
ipa-client-samba会自动将[homes]部分添加到/etc/samba/smb.conf文件中,该文件在用户连接时动态共享用户的主目录。如果用户在这个服务器上没有主目录,或者您不想共享主目录,请从/etc/samba/smb.conf中删除以下行:[homes] read only = no共享目录和打印机。详情请查看以下部分:
在本地防火墙中打开 Samba 客户端所需的端口:
[root@idm_client]# firewall-cmd --permanent --add-service=samba-client [root@idm_client]# firewall-cmd --reload启用并启动
smb和winbind服务:[root@idm_client]# systemctl enable --now smb winbind
验证
在安装了 samba-client 软件包的不同的 IdM 域成员上运行以下验证步骤:
使用 Kerberos 身份验证列出 Samba 服务器中的共享:
$ smbclient -L idm_client.idm.example.com -U user_name --use-kerberos=required lp_load_ex: changing to config backend registry Sharename Type Comment --------- ---- ------- example Disk IPC$ IPC IPC Service (Samba 4.15.2) ...
3.3. 如果 IdM 信任新域,请手动添加 ID 映射配置 复制链接链接已复制到粘贴板!
Samba 需要一个 ID 映射配置,用户可从该域访问资源。在 IdM 客户端上运行的现有 Samba 服务器上,在管理员向 Active Directory(AD)域添加了新的信任后,您必须手动添加 ID 映射配置。
先决条件
- 您在 IdM 客户端中配置了 Samba。之后,IdM 增加了一个新的信任。
- 在可信 AD 域中必须禁用 Kerberos 的 DES 和 RC4 加密类型。为了安全起见,RHEL 9 不支持这些弱加密类型。
步骤
使用主机的 keytab 进行身份验证:
[root@idm_client]# kinit -k使用
ipa idrange-find命令来显示新域的基本 ID 和 ID 范围大小。例如,以下命令显示了ad.example.com域的值:[root@idm_client]# ipa idrange-find --name="AD.EXAMPLE.COM_id_range" --raw --------------- 1 range matched --------------- cn: AD.EXAMPLE.COM_id_range ipabaseid: 1918400000 ipaidrangesize: 200000 ipabaserid: 0 ipanttrusteddomainsid: S-1-5-21-968346183-862388825-1738313271 iparangetype: ipa-ad-trust ---------------------------- Number of entries returned 1 ----------------------------在后续步骤中,您需要
ipabaseid和ipaidrangesize属性的值。要计算可用最高的 ID,请使用以下公式:
maximum_range = ipabaseid + ipaidrangesize - 1使用上一步中的值,
ad.example.com域的最大可用 ID 是1918599999(1918400000 + 200000 - 1)。编辑
/etc/samba/smb.conf文件,并将域的 ID 映射配置添加到[global]部分:idmap config AD : range = 1918400000 - 1918599999 idmap config AD : backend = sss将
ipabaseid属性的值指定为最小值,将上一步中的计算值指定为该范围的最大值。重启
smb和winbind服务:[root@idm_client]# systemctl restart smb winbind
验证
使用 Kerberos 身份验证列出 Samba 服务器中的共享:
$ smbclient -L idm_client.idm.example.com -U user_name --use-kerberos=required lp_load_ex: changing to config backend registry Sharename Type Comment --------- ---- ------- example Disk IPC$ IPC IPC Service (Samba 4.15.2) ...
第 4 章 从 NIS 迁移到身份管理 复制链接链接已复制到粘贴板!
网络信息服务 (NIS) 服务器可以包含关于用户、组、主机、网络用户组和自动挂载映射的信息。作为系统管理员,您可以将这些条目类型、验证和授权从 NIS 服务器迁移到 Identity Management(IdM)服务器,以便在 IdM 服务器中执行所有用户管理操作。从 NIS 迁移到 IdM 还可让您使用更安全的协议,比如 Kerberos。
4.1. 在 IdM 中启用 NIS 复制链接链接已复制到粘贴板!
要允许 NIS 和 Identity Management (IdM) 服务器间的通信,您必须在 IdM 服务器中启用 NIS 兼容性选项。
先决条件
- 在 IdM 服务器中具有 root 访问权限。
步骤
在 IdM 服务器中启用 NIS 侦听程序和兼容性插件:
[root@ipaserver ~]# ipa-nis-manage enable [root@ipaserver ~]# ipa-compat-manage enable可选: 对于更严格的防火墙配置,请设置固定的端口。
例如,将端口设置为未使用的端口
514:[root@ipaserver ~]# ldapmodify -x -D 'cn=directory manager' -W dn: cn=NIS Server,cn=plugins,cn=config changetype: modify add: nsslapd-pluginarg0 nsslapd-pluginarg0: 514警告为了避免与其他服务冲突,不要使用任何超过 1024 的端口号。
启用并启动端口 mapper 服务:
[root@ipaserver ~]# systemctl enable rpcbind.service [root@ipaserver ~]# systemctl start rpcbind.service重启 Directory 服务器:
[root@ipaserver ~]# systemctl restart dirsrv.target
4.2. 将用户条目从 NIS 迁移到 IdM 复制链接链接已复制到粘贴板!
NIS passwd map 包含关于用户的信息,如名称、UID、主组、GECOS、shell 和主目录。使用这个数据将 NIS 用户帐户迁移到 Identity Management (IdM):
先决条件
- 在 NIS 服务器中具有 root 访问权限。
- IdM 中启用了 NIS。
- NIS 服务器被注册到 IdM。
- 您有可存储导入用户的 UID 的 ID 范围。
步骤
安装
yp-tools软件包:[root@nis-server ~]# dnf install yp-tools -y在 NIS 服务器中,使用以下内容创建
/root/nis-users.sh脚本:#!/bin/sh # $1 is the NIS domain, $2 is the primary NIS server ypcat -d $1 -h $2 passwd > /dev/shm/nis-map.passwd 2>&1 IFS=$'\n' for line in $(cat /dev/shm/nis-map.passwd) ; do IFS=' ' username=$(echo $line | cut -f1 -d:) # Not collecting encrypted password because we need cleartext password # to create kerberos key uid=$(echo $line | cut -f3 -d:) gid=$(echo $line | cut -f4 -d:) gecos=$(echo $line | cut -f5 -d:) homedir=$(echo $line | cut -f6 -d:) shell=$(echo $line | cut -f7 -d:) # Now create this entry echo passw0rd1 | ipa user-add $username --first=NIS --last=USER \ --password --gidnumber=$gid --uid=$uid --gecos="$gecos" --homedir=$homedir \ --shell=$shell ipa user-show $username done以 IdM
admin用户身份进行身份验证:[root@nis-server ~]# kinit admin运行脚本。例如:
[root@nis-server ~]# sh /root/nis-users.sh nisdomain nis-server.example.com重要此脚本在名字、姓氏中使用硬编码的值,并将密码设置为
passw0rd1。用户必须在下一次登录时更改临时密码。
4.3. 将用户组从 NIS 迁移到 IdM 复制链接链接已复制到粘贴板!
NIS group 映射包含有关组的信息,如组名称、GID 或组成员。使用此数据将 NIS 组迁移到 Identity Management (IdM):
先决条件
- 在 NIS 服务器中具有 root 访问权限。
- IdM 中启用了 NIS。
- NIS 服务器被注册到 IdM。
步骤
安装
yp-tools软件包:[root@nis-server ~]# dnf install yp-tools -y在 NIS 服务器中使用以下内容创建
/root/nis-groups.sh脚本:#!/bin/sh # $1 is the NIS domain, $2 is the primary NIS server ypcat -d $1 -h $2 group > /dev/shm/nis-map.group 2>&1 IFS=$'\n' for line in $(cat /dev/shm/nis-map.group); do IFS=' ' groupname=$(echo $line | cut -f1 -d:) # Not collecting encrypted password because we need cleartext password # to create kerberos key gid=$(echo $line | cut -f3 -d:) members=$(echo $line | cut -f4 -d:) # Now create this entry ipa group-add $groupname --desc=NIS_GROUP_$groupname --gid=$gid if [ -n "$members" ]; then useropts=$(eval echo --users={$members}) ipa group-add-member $groupname $useropts fi ipa group-show $groupname done注意确保您的用户名不包含任何特殊字符,以确保成功迁移用户组。
以 IdM
admin用户身份进行身份验证:[root@nis-server ~]# kinit admin运行脚本。例如:
[root@nis-server ~]# sh /root/nis-groups.sh nisdomain nis-server.example.com
4.4. 将主机条目从 NIS 迁移到 IdM 复制链接链接已复制到粘贴板!
NIS hosts 映射包含有关主机的信息,如主机名和 IP 地址。使用这个数据将 NIS 主机条目迁移到 Identity Management (IdM):
当您在 IdM 中创建主机组时,会自动创建对应的 shadow NIS 组。不要在这些影子 NIS 组中使用 ipa netgroup-* 命令。使用 ipa netgroup-* 命令仅管理通过 netgroup-add 命令创建的原生 netgroups。
先决条件
- 在 NIS 服务器中具有 root 访问权限。
- IdM 中启用了 NIS。
- NIS 服务器被注册到 IdM。
步骤
安装
yp-tools软件包:[root@nis-server ~]# dnf install yp-tools -y在 NIS 服务器中使用以下内容创建
/root/nis-hosts.sh脚本:#!/bin/sh # $1 is the NIS domain, $2 is the primary NIS server ypcat -d $1 -h $2 hosts | egrep -v "localhost|127.0.0.1" > /dev/shm/nis-map.hosts 2>&1 IFS=$'\n' for line in $(cat /dev/shm/nis-map.hosts); do IFS=' ' ipaddress=$(echo $line | awk '{print $1}') hostname=$(echo $line | awk '{print $2}') primary=$(ipa env xmlrpc_uri | tr -d '[:space:]' | cut -f3 -d: | cut -f3 -d/) domain=$(ipa env domain | tr -d '[:space:]' | cut -f2 -d:) if [ $(echo $hostname | grep "\." |wc -l) -eq 0 ] ; then hostname=$(echo $hostname.$domain) fi zone=$(echo $hostname | cut -f2- -d.) if [ $(ipa dnszone-show $zone 2>/dev/null | wc -l) -eq 0 ] ; then ipa dnszone-add --name-server=$primary --admin-email=root.$primary fi ptrzone=$(echo $ipaddress | awk -F. '{print $3 "." $2 "." $1 ".in-addr.arpa."}') if [ $(ipa dnszone-show $ptrzone 2>/dev/null | wc -l) -eq 0 ] ; then ipa dnszone-add $ptrzone --name-server=$primary --admin-email=root.$primary fi # Now create this entry ipa host-add $hostname --ip-address=$ipaddress ipa host-show $hostname done以 IdM
admin用户身份进行身份验证:[root@nis-server ~]# kinit admin运行脚本。例如:
[root@nis-server ~]# sh /root/nis-hosts.sh nisdomain nis-server.example.com注意此脚本不会迁移特殊主机配置,如别名。
4.5. 将网络组条目从 NIS 迁移到 IdM 复制链接链接已复制到粘贴板!
NIS netgroup 映射包含有关网络用户组的信息。使用这个数据将 NIS netgroups 迁移到 Identity Management (IdM):
先决条件
- 在 NIS 服务器中具有 root 访问权限。
- IdM 中启用了 NIS。
- NIS 服务器被注册到 IdM。
步骤
安装
yp-tools软件包:[root@nis-server ~]# dnf install yp-tools -y在 NIS 服务器中使用以下内容创建
/root/nis-netgroups.sh脚本:#!/bin/sh # $1 is the NIS domain, $2 is the primary NIS server ypcat -k -d $1 -h $2 netgroup > /dev/shm/nis-map.netgroup 2>&1 IFS=$'\n' for line in $(cat /dev/shm/nis-map.netgroup); do IFS=' ' netgroupname=$(echo $line | awk '{print $1}') triples=$(echo $line | sed "s/^$netgroupname //") echo "ipa netgroup-add $netgroupname --desc=NIS_NG_$netgroupname" if [ $(echo $line | grep "(," | wc -l) -gt 0 ]; then echo "ipa netgroup-mod $netgroupname --hostcat=all" fi if [ $(echo $line | grep ",," | wc -l) -gt 0 ]; then echo "ipa netgroup-mod $netgroupname --usercat=all" fi for triple in $triples; do triple=$(echo $triple | sed -e 's/-//g' -e 's/(//' -e 's/)//') if [ $(echo $triple | grep ",.*," | wc -l) -gt 0 ]; then hostname=$(echo $triple | cut -f1 -d,) username=$(echo $triple | cut -f2 -d,) domain=$(echo $triple | cut -f3 -d,) hosts=""; users=""; doms=""; [ -n "$hostname" ] && hosts="--hosts=$hostname" [ -n "$username" ] && users="--users=$username" [ -n "$domain" ] && doms="--nisdomain=$domain" echo "ipa netgroup-add-member $netgroup $hosts $users $doms" else netgroup=$triple echo "ipa netgroup-add $netgroup --desc=<NIS_NG>_$netgroup" fi done done以 IdM
admin用户身份进行身份验证:[root@nis-server ~]# kinit admin运行脚本。例如:
[root@nis-server ~]# sh /root/nis-netgroups.sh nisdomain nis-server.example.com
4.6. 将自动挂载映射从 NIS 迁移到 IdM 复制链接链接已复制到粘贴板!
自动挂载映射是一系列嵌套和相互相关的条目,它们定义位置(父条目)、关联的键和映射。将 NIS 自动挂载映射迁移到 Identity Management (IdM):
先决条件
- 在 NIS 服务器中具有 root 访问权限。
- IdM 中启用了 NIS。
- NIS 服务器被注册到 IdM。
步骤
安装
yp-tools软件包:[root@nis-server ~]# dnf install yp-tools -y在 NIS 服务器中使用以下内容创建
/root/nis-automounts.sh脚本:#!/bin/sh # $1 is for the automount entry in ipa ipa automountlocation-add $1 # $2 is the NIS domain, $3 is the primary NIS server, $4 is the map name ypcat -k -d $2 -h $3 $4 > /dev/shm/nis-map.$4 2>&1 ipa automountmap-add $1 $4 basedn=$(ipa env basedn | tr -d '[:space:]' | cut -f2 -d:) cat > /tmp/amap.ldif <<EOF dn: nis-domain=$2+nis-map=$4,cn=NIS Server,cn=plugins,cn=config objectClass: extensibleObject nis-domain: $2 nis-map: $4 nis-base: automountmapname=$4,cn=$1,cn=automount,$basedn nis-filter: (objectclass=\*) nis-key-format: %{automountKey} nis-value-format: %{automountInformation} EOF # $5 is the LDAP server ldapadd -x -h $5 -D "cn=Directory Manager" -W -f /tmp/amap.ldif IFS=$'\n' for line in $(cat /dev/shm/nis-map.$4); do IFS=" " key=$(echo "$line" | awk '{print $1}') info=$(echo "$line" | sed -e "s^$key[ \t]*") ipa automountkey-add nis $4 --key="$key" --info="$info" done注意该脚本导出 NIS 自动挂载信息,为自动挂载位置和关联映射生成 LDAP 数据交换格式 (LDIF),并将 LDIF 文件导入到 IdM Directory Server。
以 IdM
admin用户身份进行身份验证:[root@nis-server ~]# kinit admin运行脚本。例如:
[root@nis-server ~]# sh /root/nis-automounts.sh location nisdomain nis-server.example.com map_name
第 5 章 在 IdM 中使用自动挂载 复制链接链接已复制到粘贴板!
自动挂载是在多个系统间管理、组织和访问目录的一种方式。每当请求访问一个目录时,Automount 会自动挂载该目录。这在身份管理(IdM)域中工作良好,因为它允许您在域中的客户端上轻松共享目录。
这个示例使用以下场景:
- nfs-server.idm.example.com 是网络文件系统(NFS)服务器的完全限定域名(FQDN)。
为了简单起见,nfs-server.idm.example.com 是一个 IdM 客户端,为 raleigh 自动挂载位置提供映射。
注意自动挂载位置是一组唯一的 NFS 映射。理想情况下,这些映射都位于同一地理位置,例如:客户端可以从快速连接中受益,但这不是强制要求。
- NFS 服务器以读写形式导出 /exports/project 目录。
- 属于 developers 组的任何 IdM 用户都可以在使用 raleigh 自动挂载位置的任何 IdM 客户端中以 /devel/project/ 来访问导出的目录。
- idm-client.idm.example.com 是位于 raleigh 自动挂载位置的 IdM 客户端。
如果要使用 Samba 服务器而不是 NFS 服务器为 IdM 客户端提供共享,请参阅红帽知识库解决方案 如何在 IPA 环境中使用 Autofs 配置 Kerberos 化 CIFS 挂载?.
5.1. IdM 中的 autofs 和自动挂载 复制链接链接已复制到粘贴板!
autofs 服务可根据需要自动化目录的挂载,方法是在目录被访问时,将 automount 守护进程定向到挂载目录。此外,在不活动一段时间后,autofs 将automount 定向到未卸载的自动挂载的目录。与静态挂载不同,按需挂载可节省系统资源。
- 自动挂载映射
在使用
autofs的系统上,automount配置存储在几个不同的文件中。主要的automount配置文件是/etc/auto.master,其中包含系统上automount的主映射以及相关的资源。此映射称为 自动挂载映射。/etc/auto.master配置文件包含 主映射。它可以包含对其他映射的引用。这些映射可以是直接的,也可以是间接的。直接映射使用挂载点的绝对路径名,而间接映射则使用相对路径名。- IdM 中的自动挂载配置
虽然
automount通常从本地/etc/auto.master和相关文件检索其映射数据,但它也可以从其他源检索映射数据。一个通用源是 LDAP 服务器。在身份管理(IdM)环境中,这是一个 389 目录服务器。如果使用
autofs的系统是 IdM 域中的一个客户端,则automount配置不会存储在本地配置文件中。相反,autofs配置(如映射、位置和密钥)作为 LDAP 条目存储在 IdM 目录中。例如,对于idm.example.comIdM 域,默认的 主映射 存储如下:dn: automountmapname=auto.master,cn=default,cn=automount,dc=idm,dc=example,dc=com objectClass: automountMap objectClass: top automountMapName: auto.master
如果使用 Red Hat Enterprise Linux Identity Management (IdM),您可以将 NFS 服务器加入到 IdM 域中。这可让您集中管理用户和组,并使用 Kerberos 进行身份验证、完整性保护和流量加密。
先决条件
- NFS 服务器已在 Red Hat Enterprise Linux Identity Management (IdM)域中 注册。
- NFS 服务器正在运行并已配置。
流程
以 IdM 管理员身份获取 kerberos 票据:
# kinit admin创建一个
nfs/<FQDN>服务主体:# ipa service-add nfs/nfs_server.idm.example.com从 IdM 检索
nfs服务主体,并将其存储在/etc/krb5.keytab文件中:# ipa-getkeytab -s idm_server.idm.example.com -p nfs/nfs_server.idm.example.com -k /etc/krb5.keytab可选:显示
/etc/krb5.keytab文件中的主体:# klist -k /etc/krb5.keytab Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- -------------------------------------------------------------------------- 1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM 1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM 1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM 1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM 7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM 7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM 7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM 7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM默认情况下,当您将主机加入到 IdM 域时,IdM 客户端会将主机主体添加到
/etc/krb5.keytab文件中。如果缺少主机主体,请使用ipa-getkeytab -s idm_server.idm.example.com -p host/nfs_server.idm.example.com -k /etc/krb5.keytab命令添加它。使用
ipa-client-automount工具配置 IdM ID 的映射:# ipa-client-automount Searching for IPA server... IPA server: DNS discovery Location: default Continue to configure the system with these values? [no]: yes Configured /etc/idmapd.conf Restarting sssd, waiting for it to become available. Started autofs更新
/etc/exports文件,并将 Kerberos 安全方法添加到客户端选项中。例如:/nfs/projects/ 192.0.2.0/24(rw,sec=krb5i)如果您希望客户端可以从多个安全方法中选择,请使用冒号分割它们:
/nfs/projects/ 192.0.2.0/24(rw,sec=krb5:krb5i:krb5p)重新载入导出的文件系统:
# exportfs -r
5.3. 使用 IdM CLI 在 IdM 中配置自动挂载位置和映射 复制链接链接已复制到粘贴板!
位置是一组映射,全部存储在 auto.master 中。一个位置可以存储多个映射。位置条目仅充当映射条目的容器;它本身并不是一个自动挂载配置。
作为身份管理(IdM)中的系统管理员,您可以在 IdM 中配置自动挂载位置和映射,以便指定位置中的 IdM 用户可以通过导航到其主机上的特定挂载点来访问 NFS 服务器导出的共享。导出的 NFS 服务器目录和挂载点都在映射中指定。这个示例描述了如何配置 raleigh 位置和映射,其将 nfs-server.idm.example.com:/exports/project 共享作为读写目录,挂载到 IdM 客户端上的 /devel/ 挂载点。
先决条件
- 您以 IdM 管理员的身份登录到任何注册了 IdM 的主机上。
流程
创建 raleigh 自动挂载位置:
$ ipa automountlocation-add raleigh ---------------------------------- Added automount location "raleigh" ---------------------------------- Location: raleigh在 raleigh 位置创建一个 auto.devel 自动挂载映射:
$ ipa automountmap-add raleigh auto.devel -------------------------------- Added automount map "auto.devel" -------------------------------- Map: auto.devel添加 exports/ 共享的密钥和挂载信息:
为 auto.devel 映射添加密钥和挂载信息:
$ ipa automountkey-add raleigh auto.devel --key='*' --info='-sec=krb5p,vers=4 nfs-server.idm.example.com:/exports/&' ----------------------- Added automount key "*" ----------------------- Key: * Mount information: -sec=krb5p,vers=4 nfs-server.idm.example.com:/exports/&为 auto.master 映射添加密钥和挂载信息:
$ ipa automountkey-add raleigh auto.master --key=/devel --info=auto.devel ---------------------------- Added automount key "/devel" ---------------------------- Key: /devel Mount information: auto.devel
5.4. 在 IdM 客户端上配置自动挂载 复制链接链接已复制到粘贴板!
作为身份管理(IdM)系统管理员,您可以在 IdM 客户端上配置自动挂载服务,以便在用户登录客户端时 IdM 用户可以自动访问为已添加客户端的位置配置的 NFS 共享。这个示例描述了如何配置 IdM 客户端,以使用 raleigh 位置中可用的 automount 服务。
先决条件
-
您有访问 IdM 客户端的
root权限。 - 以 IdM 管理员身份登录。
- 自动挂载位置存在。示例位置为 raleigh。
流程
在 IdM 客户端上,输入
ipa-client-automount命令并指定位置。使用-U选项以无人值守方式运行脚本:# ipa-client-automount --location raleigh -U停止 autofs 服务,清除 SSSD 缓存,然后启动 autofs 服务来加载新的配置设置:
# systemctl stop autofs ; sss_cache -E ; systemctl start autofs