在 RHEL 中配置身份验证和授权
大约 75 分钟
在 RHEL 中配置身份验证和授权
来源:官方文档 原始多页入口:在 RHEL 中配置身份验证和授权 内容规模:约 66,696 字符,90 个章节标题,211 个命令/代码块,41 条提示框
阅读提要
- 副标题:使用 SSSD、authselect 和 sssctl 配置身份验证和授权
- 摘要:您可以配置 Red Hat Enterprise Linux (RHEL)来对身份管理(IdM)、Active Directory (AD)和 LDAP 目录验证和授权用户,RHEL 使用系统安全服务守护进程(SSSD)与这些服务通信。'authselect' 和 'sssctl' 工具帮助您配置 SSSD、可插拔验证模块(PAM)和名称服务切换(NSS)。
- 主要章节:使用 SSSD、authselect 和 sssctl 配置身份验证和授权;对红帽文档提供反馈;第 1 章 系统身份验证简介;第 2 章 使用 authselect 配置用户身份验证;第 3 章 了解 SSSD 及其优势;第 4 章 配置 SSSD 以使用 LDAP 并需要 TLS 身份验证;第 5 章 配置 SSSD 以使用通用身份提供程序;第 6 章 其他身份和身份验证供应商配置;第 7 章 SSSD 客户端侧的视图;第 8 章 配置 RHEL 主机以使用 AD 作为身份验证提供程序;第 9 章 使用 SSSD 报告主机的用户访问权限;第 10 章 使用 SSSD 查询域信息
- 推荐阅读顺序:先看“阅读提要”和目录,再按章节查看“关键点/命令/注意”;需要原文细节时点击来源链接。
章节笔记
概览
- 该章节主要为下一级主题的入口。
使用 SSSD、authselect 和 sssctl 配置身份验证和授权
- 要点:摘要
对红帽文档提供反馈
- 要点:我们致力于为您提供高质量的文档,您的反馈将对我们有很大帮助。为帮助我们改进,您可以通过 Red Hat Jira 跟踪系统提交建议或报告错误。
- 要点:流程
- 列表:登录到 Jira 网站。 如果您还没有帐户,请创建一个。
- 列表:单击顶部导航栏中的 Create。
- 列表:在 Summary 字段中输入描述性标题。
- 列表:在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 列表:点窗口底部的 Create。
第 1 章 系统身份验证简介
- 要点:安全网络需要在授予访问权限前验证用户身份。Red Hat Enterprise Linux 提供了用于管理这些身份的工具,包括本地系统文件到 Kerberos 和 Samba 等外部域。
1.1. RHEL 中的身份验证方法
- 要点:身份验证使用凭据来验证身份,而授权则决定访问权限。RHEL 支持多种验证机制,包括密码、证书和令牌,以确保网络交互安全。
- 要点:身份验证要求实体提供某种凭据来验证其身份。所需的凭证类型由正在使用的身份验证机制定义。
1.1.1. 系统上本地用户的身份验证类型
- 要点:这是基于证书的身份验证的变体。智能卡(或令牌)存储用户证书 ; 当用户将令牌插入系统时,系统会读取证书并授予访问权限。使用智能卡的单点登录需要经过三个步骤:
- 要点:基于智能卡的身份验证构建在 Kerberos 构建的简单身份验证层上,方法是将证书添加为额外的识别机制,以及添加物理访问要求。
- 列表:用户将智能卡插入到读卡器中。Red Hat Enterprise Linux 上的可插拔验证模块(PAM)检测插入的智能卡。
- 列表:系统将证书映射到用户条目,然后将智能卡上提供的证书(其使用私钥进行了加密,如基于证书的身份验证中所述)与用户条目中存储的证书进行比较。
- 列表:如果证书针对密钥分发中心(KDC)成功进行了验证,则允许用户登录。
- 列表:管理智能卡验证
- 列表:身份管理中的一次性密码(OTP)身份验证
- 列表:在 IdM 环境中启用 passkey 身份验证
1.2. RHEL 中的单点登录概述
- 要点:单点登录(SSO)整合凭据,允许用户一次登录以访问所有网络资源。RHEL 通过 Kerberos 和智能卡实施 SSO,创建集中的身份存储来提高方便和安全。
- 要点:Red Hat Enterprise Linux 支持 SSO 用于多个资源,包括登录到工作站、解锁屏幕保护程序,以及使用 Mozilla Firefox 访问安全的 Web 页面。通过其他可用的系统服务,如 Privileged Access Management (PAM)、名称服务交换(NSS)和 Kerberos,其他系统应用程序可以被配置为使用这些身份源。
- 列表:通过 Kerberos 域和活动目录域的基于 Kerberos 的身份验证
- 列表:基于智能卡的身份验证
1.3. 可用于本地用户身份验证的服务
- 要点:Red Hat Enterprise Linux 提供配置本地用户身份验证的特定服务。使用这些工具管理身份后端,控制低级系统调用,以及强制执行身份验证策略。
- 要点:也提供了其他服务和应用程序,但这些是常见的。
- 列表:身份验证配置工具 authselect 为系统设置不同的身份后端和身份验证的方法(如密码、指纹或智能卡)。
- 列表:安全系统服务守护进程(SSSD)设置多个身份提供者,主要是基于 LDAP 的目录,如 Microsoft 活动目录或 IdM。本地系统和应用程序都可以使用这些身份提供者进行身份验证。SSSD 缓存密码和票据,允许通过重复使用凭证进行离线身份验证和单点登录。
- 列表:realmd 服务是一个命令行工具,允许您配置身份验证后端,它是 IdM 的 SSSD。realmd 服务根据 DNS 记录检测可用的 IdM 域,配置 SSSD,然后以账户身份将系统加入到域。
- 列表:名称服务切换(NSS)是一种用于低级系统调用的机制,其返回有关用户、组或主机的信息。NSS 确定应使用什么源,也就是哪个模块来获取所需的信息。例如,用户信息可以位于传统的 UNIX 文件中,如 /etc/passwd 文件,或在基于 LDAP 的目录中,而主机地址可从文件读取,如 /etc/hosts 文件或 DNS 记录;NSS 定位信息存储在哪里。
- 列表:可插拔验证模块(PAM)提供一个系统来配置身份验证策略。使用 PAM 进行身份验证的应用程序加载控制身份验证不同方面的不同模块;应用程序使用的 PAM 模块取决于应用程序是如何配置的。可用的 PAM 模块包括 Kerberos、Winbind、SSSD 或基于本地 UNIX 文件的身份验证。
第 2 章 使用 authselect 配置用户身份验证
- 要点:authselect 工具简化了系统身份和身份验证配置。使用特定配置集自动管理 PAM 和 NSS 设置,确保本地和远程用户具有一致的访问控制。
2.1. authselect 的作用
- 要点:authselect 通过提供可用的配置配置文件简化了系统身份管理。选择一个配置文件来自动生成必要的 PAM 和 NSS 设置,确保跨本地和远程源进行一致的身份验证。
- 要点:您可以使用默认的配置文件集或创建一个自定义配置文件。请注意,您必须手动更新自定义配置文件,以使它们与您的系统保持最新状态。
- 命令/配置摘录:
$ authselect current Profile ID: sssd Enabled features: - with-sudo - with-mkhomedir - with-smartcard- 注意:警告 如果出现以下情况,您不需要使用 authselect : 您的主机是 Red Hat Enterprise Linux 身份管理(IdM)的一部分。使用 ipa-client-install 命令将您的主机加入 IdM 域会自动在主机上配置 SSSD 身份验证。 您的主机通过 SSSD 加入 Active Directory。调用 realm join 命令将您的主机加入 Active Directory 域会自动在您的主机上配置 SSSD 身份验证。 红帽建议不要更改 ipa-client-install 或 realm join 配置的 authselect 配置文件。如果您需要修改它们,请在进行任何修改之前显示当前的设置,以便在需要时将它们恢复回来: $ authselect current Profile ID: sssd Enabled features: - with-sudo - with-mkhomedir - with-smartcard
2.1.1. authselect 修改的文件和目录
- 要点:authselect 只修改一组有限的配置文件,以便更轻松地管理身份验证设置并进行故障排除。
- 要点:其他资源
- 列表:创建并部署您自己的 authselect 配置文件
- 表格样本(共 3 行):
- /etc/nsswitch.conf | GNU C 库和其他应用使用此名称服务交换机 (NSS) 配置文件来确定从中获取一系列类别中的名称服务信息的来源,以及顺序。每个类别的信息都由一个数据库名来标识。
- /etc/pam.d/* 文件 | Linux-PAM(可插拔验证模块)是处理系统中应用程序(服务)验证任务的模块系统。验证的特性是动态可配置的:系统管理员可以选择如何单独提供服务提供应用程序验证用户。 /etc/pam.d/ 目录中的配置文件列出了将执行服务所需身份验证任务的 PAM,以及在单个 PAM 失败时 PAM-API 相应行为。 这些文件还包含以下信息: 用户密码锁定规则 使用智能卡进行身份验证的能力 使用指纹读取器进行身份验证的能力
- /etc/dconf/db/distro.d/* 文件 | 此目录包含 dconf 实用程序的配置集,可用于管理 GNOME 桌面图形用户界面 (GUI) 的设置。
2.2. 选择一个 authselect 配置文件
- 要点:选择特定的 authselect 配置集来在主机上强制验证策略。此进程将系统配置为为所有用户登录使用所选身份提供程序。
- 要点:先决条件
- 列表:运行 authselect 命令需要 root 凭证
- 列表:选择适合您的身份验证供应商的 authselect 配置集。将 <profile> 替换为您要使用的配置文件名称: # authselect select <profile>
- 列表:可选:您可以通过启用或禁用所选配置文件提供的功能来修改默认的配置文件设置。 # authselect select <profile> <feature> 例如,除了密码验证,要选择 sssd 配置文件并启用智能卡验证: # authselect select sssd with-smartcard
- 列表:验证 /etc/nsswitch.conf 中是否存在 SSSD 的 sss 条目: passwd: sss files group: sss files netgroup: sss files automount: sss files services: sss files ...
- 列表:在 pam_sss.so 条目中查看 /etc/pam.d/system-auth 文件的内容: # Do not modify this file manually, use authselect instead. Any user changes will be overwritten. # You can stop authselect from managing your configuration by calling 'authselect opt-out'. # See authselect(8) for more details. auth required pam_env.so auth required pam…
- 列表:authselect 的作用
- 命令/配置摘录:
# authselect select <profile>
# authselect select <profile> <feature>- 注意:注意 在完成 authselect select 过程前,请确定正确配置了与您的配置集相关的配置文件。例如,如果 sssd 守护进程没有正确配置并处于活动状态,则运行 authselect select 会导致只有本地用户可以使用 pam_unix 进行身份验证。
2.3. 创建并部署您自己的 authselect 配置集
- 要点:通过复制默认模板来满足特定要求,创建自定义配置集。这种方法允许详细的配置更改,同时保持系统兼容性。应用配置集为所有用户强制实施这些设置。
- 要点:流程
- 列表:要创建自定义配置文件,请运行 authselect create-profile 命令。将 <custom_profile> 替换为所需的配置文件名称。例如,要基于现有的sssd 配置文件创建一个配置文件,并选择自己配置 /etc/nsswitch.conf 文件中的项目,请使用以下命令: # authselect create-profile <custom_profile> -b sssd --symlink-meta --symlink-pam New profile was created at /etc/authselect/custom/<custom_profile> 警告 如果您计划修改 /etc/authsele…
- 列表:配置 /etc/authselect/custom/<custom_profile>/nsswitch.conf 文件。
- 列表:通过运行 custom/<custom_profile> 作为参数的 authselect select 命令来选择自定义配置文件: # authselect select custom/<custom_profile> 为您的机器选择 <custom_profile> 配置文件意味着,如果以后红帽更新了 sssd 配置文件,您可以从所有更新(除了对 /etc/nsswitch.conf 文件所做的更新)中获益。 根据 sssd 配置集创建自定义配置集示例: 您可以基于 sssd 配置文件创建一个配置文件,它只咨询本地静态表来查找 /etc/hosts 文件中的主机名,而不是 dns 或 myhostname 数据库中的主机名。 …
- 列表:编辑 /etc/nsswitch.conf 文件,修改以下行: hosts: files
- 列表:基于 sssd 创建自定义配置集,它排除了对 /etc/nsswitch.conf 的更改: # authselect create-profile custom-sssd-profile -b sssd --symlink-meta --symlink-pam
- 列表:选择配置集: # authselect select custom/custom-sssd-profile
- 命令/配置摘录:
# authselect create-profile <custom_profile> -b sssd --symlink-meta --symlink-pam
New profile was created at /etc/authselect/custom/<custom_profile>- 注意:警告 如果您计划修改 /etc/authselect/custom/<custom_profile>/{password-auth,system-auth,fingerprint-auth,smartcard-auth,postlogin},然后输入以上没有 --symlink-pam 选项的命令。这是为了确保在升级 authselect-libs 过程中修改持久。
- 注意:注意 运行 authselect select sssd 将会产生 hosts: files dns myhostname
2.4. 选择不使用 authselect
- 要点:您无法卸载 authselect,但可以选择停止它管理配置。此操作会将 PAM 和 NSS 文件恢复到其默认位置,从而返回对验证设置的完整手动控制。
- 要点:流程
- 列表:要从管理您系统的配置中停止 authselect : # authselect opt-out 要再次使用 authselect,请运行 authselect select <profile_name>。
- 命令/配置摘录:
# authselect opt-out- 注意:重要 authselect 确保系统身份验证和身份配置的一致且受支持的管理。不选择可能会导致不支持或不一致的配置,这可能会导致身份验证问题。如果您需要特殊的配置,请考虑在 authselect 框架中创建一个自定义配置文件。
第 3 章 了解 SSSD 及其优势
- 要点:系统安全服务守护进程(SSSD)将本地系统连接到远程身份提供程序,包括 LDAP 和 Active Directory。它检索并缓存凭证以启用离线身份验证,减少网络流量,并简化系统服务的访问控制。
3.1. SSSD 如何工作
- 要点:通过将本地客户端链接到外部后端供应商来确保 SSSD 功能。该服务分为两个阶段:连接到远程源以检索身份数据,然后创建一个本地缓存以在不创建永久本地帐户的情况下验证凭证。
- 要点:SSSD 支持多个身份和身份验证提供者,例如:
- 列表:LDAP 目录
- 列表:身份管理(IdM)域
- 列表:活动目录(AD)域
- 列表:Kerberos 领域
- 列表:它将客户端连接到远程供应商以检索身份和验证信息。
- 列表:它使用获得的验证信息来创建客户端用户和凭证的本地缓存。
- 注意:注意 仅使用 SSSD 服务来缓存用户信息。在同一系统上运行名称服务缓存守护进程(NSCD)和 SSSD 进行缓存可能会导致性能问题和冲突。
3.2. 使用 SSSD 的好处
- 要点:系统安全服务守护进程(SSSD)通过在本地缓存凭证来提高系统效率。这个功能启用了离线身份验证,最小化远程提供程序的流量,并将网络访问整合到单个用户帐户中。
- 要点:使用 SSSD 时,不需要同时维护中央帐户和本地用户帐户进行离线身份验证。条件为:
- 列表:在特定的会话中,用户必须至少登录一次:当用户第一次登录时,客户端必须连接到远程供应商。
- 列表:SSSD 中必须启用缓存。 在没有 SSSD 时,远程用户通常会有多个用户帐户。例如,要连接到虚拟专用网络(VPN),远程用户需要有一个本地系统帐户,以及另外一个 VPN 帐户。在这种情况下,您必须首先在私有网络中进行身份验证,以便从远程服务器获取用户,并在本地缓存用户凭证。 使用 SSSD 时,利用缓存和离线身份验证,远程用户只需向本地机器验证即可连接到网络资源。然后,SSSD 维护其网络凭证。
3.3. 基于每个客户端有多个 SSSD 配置文件
- 要点:系统安全服务守护进程(SSSD)通过将主文件与 conf.d 目录中的模块文件相结合来构建其配置。这个结构可帮助您在为单个客户端应用特定的覆盖或扩展时维护全局默认值。
- 要点:SSSD 的默认配置文件为 /etc/sssd/sssd.conf。除了这个文件外,SSSD 还可以从 /etc/sssd/conf.d/ 目录中的所有 *.conf 文件中读取其配置。
- 列表:主 /etc/sssd/sssd.conf 文件。
- 列表:/etc/sssd/conf.d/ 中的其他 *.conf 文件,按字母顺序处理。
- 注意:注意 SSSD 不读取 conf.d 目录中的隐藏文件(以 .开头的文件)。
3.4. SSSD 的身份和验证供应商
- 要点:SSSD 将本地客户端链接到外部后端,如 LDAP、身份管理(IdM)、Active Directory (AD)和 Kerberos。将这些连接配置为域,分配特定的提供程序来处理身份、身份验证或访问控制任务。
3.4.1. 身份识别和验证提供者作为 SSSD 域
- 要点:在 /etc/sssd/sssd.conf 中定义 SSSD 域,以将后端映射到特定功能。您可以配置单个域来处理身份查找、身份验证请求和访问控制。
- 要点:提供者列在文件的 [domain/<domain_name>] or [domain/default] 部分。
- 列表:identity provider,它提供用户信息,如 UID 和 GID。 使用 /etc/sssd/sssd.conf 文件的 [domain/<domain_name>] 部分中的 id_provider 选项将一个域指定为 identity provider。
- 列表:使用 /etc/sssd/sssd.conf 文件的 [domain/<domain_name>] 部分中的 id_provider 选项将一个域指定为 identity provider。
- 列表:authentication provider,其处理身份验证请求。 使用 /etc/sssd/sssd.conf 的 [domain/<domain_name>] 部分中的 auth_provider 选项将一个域指定为 authentication provider。
- 列表:使用 /etc/sssd/sssd.conf 的 [domain/<domain_name>] 部分中的 auth_provider 选项将一个域指定为 authentication provider。
- 列表:access control provider,其处理授权请求。 使用 /etc/sssd/sssd.conf 的 [domain/<domain_name>] 部分中的 access_provider 选项将一个域指定为 access control provider。默认情况下,选项设置为 permit,这将始终允许所有访问。详情请查看 sssd.conf(5)man page。
- 列表:使用 /etc/sssd/sssd.conf 的 [domain/<domain_name>] 部分中的 access_provider 选项将一个域指定为 access control provider。默认情况下,选项设置为 permit,这将始终允许所有访问。详情请查看 sssd.conf(5)man page。
- 注意:注意 您可以为 SSSD 配置多个域。您必须至少配置一个域,否则 SSSD 不会启动。
3.4.2. 代理提供者
- 要点:代理供应商充当 SSSD 资源的中介程序,无法直接访问。SSSD 连接到代理服务来加载外部库,实现与传统系统(如 NIS 和替代验证硬件)的集成。
- 要点:您可以将 SSSD 配置为使用代理提供商来启用:
- 列表:其他验证方法,如指纹扫描仪
- 列表:传统系统,如 NIS
- 列表:在 /etc/passwd 文件中定义的本地系统帐户作为身份提供程序和远程身份验证提供程序,如 Kerberos
- 列表:使用智能卡验证本地用户
3.4.3. 身份和身份验证提供者的可用组合
- 要点:使用 SSSD,您可以为身份和身份验证任务混合特定的供应商。您可以配置统一后端,如 Active Directory 或混合设置,如将 LDAP 目录与 Kerberos 域合并。
- 要点:其他资源
- 列表:使用 authselect 配置用户身份验证
- 列表:使用 SSSD 查询域信息
- 列表:使用 SSSD 报告主机的用户访问权限
- 表格样本(共 9 行):
- 用户身份提供程序 | 身份验证供应商
- 身份管理 [a] | 身份管理
- Active Directory | Active Directory
- LDAP | LDAP
第 4 章 配置 SSSD 以使用 LDAP 并需要 TLS 身份验证
- 要点:配置系统安全服务守护进程(SSSD),以针对独立 LDAP 服务器验证用户身份。强制 TLS 加密可确保安全通信,保护身份数据在检索期间被截获。
- 注意:注意 ldap_id_use_start_tls 的默认值被设置为 true 来强制执行 TLS,因为不使用未加密的通信是不安全的。 将此值设置为 false 可禁用 TLS 加密,从而强制通过未加密的 ldap:// 进行身份查找。这会将系统公开给中间人(MITM)攻击,攻击者可以截获和修改 LDAP 搜索结果(如 UID 或 GID 值),以便模拟用户并获得未授权的访问权限。 在为 id_provider = ldap 选择未加密的通信前,请验证您的环境是否受信任。请注意,id_provider = ad 和 id_provider = ipa 通过 SASL 和 GSSAPI 维护加密连接。
4.1. 使用 SSSD 的 OpenLDAP 客户端以加密的方式从 LDAP 检索数据
- 要点:SSSD 作为客户端运行,以从 OpenLDAP 服务器检索身份数据。此配置利用加密连接,并支持通过 Kerberos 票据或标准 LDAP 密码进行身份验证。
- 注意:重要 使用 LDAP 配置 SSSD 是一个复杂的流程,需要对 SSSD 和 LDAP 有非常专业的知识。考虑改为使用集成和自动化解决方案,如 Active Directory 或 Identity Management (IdM)。
4.2. 配置 SSSD 以使用 LDAP 并需要 TLS 身份验证
- 要点:通过将 SSSD 配置为强制实施 TLS,在 Red Hat Enterprise Linux (RHEL)和 OpenLDAP 服务器之间建立安全连接。此过程可确保所有身份数据检索和验证请求在加密通道上发生。
- 要点:使用以下客户端配置:
- 列表:RHEL 系统验证存储在 OpenLDAP 用户帐户数据库中的用户。
- 列表:RHEL 系统使用系统安全服务守护进程 (SSSD) 服务检索用户数据。
- 列表:RHEL 系统通过 TLS 加密的连接与 OpenLDAP 服务器通信。
- 列表:OpenLDAP 服务器安装并配置了用户信息。
- 列表:您在要配置为 LDAP 客户端的主机上具有 root 权限。
- 列表:在您要配置为 LDAP 客户端的主机上,已创建并配置了 /etc/sssd/sssd.conf 文件,以将 ldap 指定为 autofs_provider 和 id_provider。
- 命令/配置摘录:
# dnf -y install openldap-clients sssd sssd-ldap oddjob-mkhomedir
# authselect select sssd with-mkhomedir- 注意:注意 您还可以使用此流程将 RHEL 系统配置为 Red Hat Directory Server 的客户端。
第 5 章 配置 SSSD 以使用通用身份提供程序
- 要点:在红帽企业 Linux (RHEL) 中,系统安全服务守护程序 (SSSD) 支持与使用 OAuth 2.0 和 OpenID Connect (OIDC) 协议的现代身份提供商 (IdP) 直接集成。这目前允许您针对红帽构建的 Keycloak 或 Microsoft Entra ID 对用户进行身份验证,而无需传统的 LDAP 或 Active Directory 基础架构。
- 注意:重要 通用身份提供程序只是技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
5.1. 先决条件
- 列表:ssd-idp 软件包安装在 RHEL 系统上。有关更多详细信息,请参阅 ssd-idp 手册页。
- 列表:您对您的身份提供程序(Keycloak 或 Entra ID)具有管理员访问权限。
- 列表:RHEL系统可以通过HTTPS到达IdP的发现和令牌端点。
5.2. SSSD 如何使用通用 IdP 进行身份验证
- 要点:SSSD(系统安全服务守护程序)使用OAuth 2.0设备授权授予流程来处理带有通用IDP的身份验证,其中Web浏览器无法被目录呈现,例如RHEL终端会话。
- 列表:SSSD 会生成用户友好的 URL 和唯一的设备代码。
- 列表:用户在单独的设备(如智能手机或笔记本电脑)上打开 URL。
- 列表:用户输入代码授权 RHEL 登录会话,如果用户尚未登录,则使用 IdP 进行身份验证。
- 列表:SSSD 自动检测授权并授予 RHEL 会话的访问权限。
- 注意:注意 如果 URL 由服务器端提供,则 SSSD 可能会显示单个 URL,其中代码已经包含在 URL 中,例如,https://master.keycloak.test:8443/auth/realms/device?user_code=NVCT-RUFA 而不是 URL https://master.keycloak.test:8443/auth/realms/device 和单独提供的 NVCT-RUFA 代码。
5.3. 在 Keycloak 的红帽构建中注册 SSSD 客户端
- 要点:配置 SSSD 之前,必须在 Keycloak 中注册 SSSD 客户端。此客户端通过设备授权授予管理用户身份验证,并代表 SSSD 执行用户和组查找。
- 要点:先决条件
- 列表:Keycloak 的红帽版本已安装和配置。
- 列表:您对 Keycloak 管理员控制台的红帽版本具有管理员访问权限。
- 列表:如果对 IdP 使用 HTTPS,则系统具有有效的 SSL/TLS 证书。
- 列表:登录到 Keycloak 管理员控制台并选择您的领域。
- 列表:导航到客户端 > 创建客户端,并选择OpenID Connect作为客户端类型。
- 列表:指定客户端 ID,例如 RHELSSSDClient,然后单击下一步。
5.4. 在 Microsoft Entra ID 中注册 SSSD 客户端
- 要点:配置 SSSD 之前,必须在 IdP 中注册 SSSD 客户端。Microsoft Entra ID 中的此客户端通过设备授权授予处理用户身份验证,并代表 SSSD 执行必要的用户和组查找。在 Microsoft Entra 中注册您的应用程序,在您的应用程序和 Microsoft 身份平台之间建立信任关系。
- 要点:先决条件
- 列表:已配置您的 Microsoft Entra ID 租户,并且您具有管理员访问权限。
- 列表:如果对 IdP 使用 HTTPS,则系统具有有效的 SSL/TLS 证书。
- 列表:登录到 Microsoft Entra 管理中心。
- 列表:转到身份 > 应用程序 > 应用程序注册 > 新注册。
- 列表:为您的应用程序输入有意义的名称,例如 RHELSSSDClient,然后选择支持的帐户类型。
- 列表:"在""身份验证""下,选择以下选项之一:" "如果您使用的是没有秘密的设备代码流,请确保将""允许公共客户端流""设置为""是""。" 如果要配置机密客户端,请导航到证书和机密并创建客户端机密。
- 注意:注意 您必须授予 User.Read 的管理员同意。如果没有它,如果 SSSD 选项 idp_auth_scope 排除了 user.read 作用域,则用户身份验证可能会失败。
5.5. 为通用 IdP 身份验证配置 SSSD
- 要点:配置系统安全服务守护程序 (SSSD) 以直接针对现代身份提供程序对用户进行身份验证。通过修改 /etc/ssd/ssd.conf,您可以在 RHEL 和您所选择的符合 OIDC 的提供商之间实现安全通信,目前这些提供商要么是 Keycloak 构建的红帽,要么是 Microsoft Entra ID。
- 要点:先决条件
- 列表:sssd-idp 软件包已安装。
- 列表:要启用通用 IdP 提供程序,请在文本编辑器中打开 /etc/ssd/ssd.conf。
- 列表:使用 id_provider=idp 选项定义 Keycloak 红帽构建或 Microsoft Entra ID 的域配置。 要定义 Keycloak 红帽构建的配置,请在 sssd.conf 文件中添加以下内容: [sssd] services = nss, pam domains = keycloak [domain/keycloak] idp_type = keycloak:https://master.keycloak.test:8443/auth/admin/realms/master/ id_provider = idp auto_private_groups = true use_fully_qualified_n…
- 列表:要定义 Keycloak 红帽构建的配置,请在 sssd.conf 文件中添加以下内容: [sssd] services = nss, pam domains = keycloak [domain/keycloak] idp_type = keycloak:https://master.keycloak.test:8443/auth/admin/realms/master/ id_provider = idp auto_private_groups = true use_fully_qualified_names = true idp_client_id = <RHELSSSDClient> idp_client_secret =…
- 列表:要定义 Microsoft Entra ID 的配置,请在 sssd.conf 文件中添加以下内容: [sssd] services = nss, pam domains = entra_id [domain/entra_id] id_provider = idp auto_private_groups = true use_fully_qualified_names = true idp_client_id = <UUID_of_your_Entra_ID_client> idp_client_id = <Password_of_your_Entra_ID_client> idp_token_endpoint = https:/…
- 列表:删除所有剩余的日志并清除缓存: # sssctl logs-remove # sssctl cache-remove -ops
- 命令/配置摘录:
[sssd] services = nss, pam domains = keycloak [domain/keycloak] idp_type = keycloak:https://master.keycloak.test:8443/auth/admin/realms/master/ id_provider = idp auto_private_groups = true use_fully_qualified_names = true idp_client_id = <RHELSSSDClient> idp_client_secret = <RHELSSSDClientPassword> idp_token_endpoint = https://master.keycloak.test:8443/auth/realms/master/protocol/openid-connect/token idp_userinfo_endpoint = https://master.keycloak.test:8443/auth/realms/master/protocol/openid-connect/userinfo idp_device_auth_endpoint = https://master.keycloak.test:8443/auth/realms/master/protocol/openid-connect/auth/device idp_id_scope = prof…
[sssd] services = nss, pam domains = entra_id [domain/entra_id] id_provider = idp auto_private_groups = true use_fully_qualified_names = true idp_client_id = <UUID_of_your_Entra_ID_client> idp_client_id = <Password_of_your_Entra_ID_client> idp_token_endpoint = https://login.microsoftonline.com/<your_Entra_ID_tennant_UUID>/oauth2/v2.0/token idp_device_auth_endpoint = https://login.microsoftonline.com/<your_Entra_ID_tennant_UUID>/oauth2/v2.0/devicecode idp_userinfo_endpoint = https://graph.microsoft.com/v1.0/me idp_id_scope = https%3A%2F%2Fgraph.microsoft.com%2F.default idp_auth_scope = openid profile email [nss] default_shell = /bin/bash fall…- 注意:注意 确保您未以其他用户身份登录到 Keycloak 管理员控制台,否则此登录尝试失败。
第 6 章 其他身份和身份验证供应商配置
- 要点:通过修改 /etc/sssd/sssd.conf 文件,扩展系统安全服务守护进程(SSSD)功能,超过基本连接。高级配置包括自定义用户名格式、启用离线访问、通过 DNS 动态发现服务器,以及实施细粒度访问控制规则。
- 列表:调整 SSSD 如何解析并打印完整用户名,以启用离线身份验证。
- 列表:配置 DNS 服务发现、简单访问提供程序规则和 SSSD 以应用 LDAP 访问过滤器。
6.1. 调整 SSSD 如何解释完整用户名
- 要点:系统安全服务守护进程(SSSD)使用 Python 兼容的正则表达式将用户输入解析为名称和域组件。您可以使用 re_expression 参数定义自定义模式来覆盖默认的解析逻辑,以匹配特定的机构命名约定。
- 要点:默认情况下,SSSD 根据 Python 语法的以下正则表达式,解释 <user_name>@<domain_name> 格式的完整用户名:
- 列表:root 访问权限
- 列表:打开 /etc/sssd/sssd.conf 文件:
- 列表:使用 re_expression 选项定义自定义正则表达式。 要全局定义所有域的正则表达式,请将 re_expression 添加到 sssd.conf 文件的 [sssd] 部分。 您可以使用以下全局表达式来定义 <domain>_<username>_ 或 <domain>@<user_name> 格式的用户名: [sssd] [... file truncated ...] re_expression = (?P_<domain>[\]*?)\?(?P<name>_[\]+$) 要单独为特定域定义正则表达式,请将 re_expression 添加到 sssd.conf 文件的对应域部分: 您可以使用以下全局表达式…
- 列表:要全局定义所有域的正则表达式,请将 re_expression 添加到 sssd.conf 文件的 [sssd] 部分。 您可以使用以下全局表达式来定义 <domain>_<username>_ 或 <domain>@<user_name> 格式的用户名: [sssd] [... file truncated ...] re_expression = (?P_<domain>[\]*?)\?(?P<name>_[\]+$)
- 列表:要单独为特定域定义正则表达式,请将 re_expression 添加到 sssd.conf 文件的对应域部分: 您可以使用以下全局表达式定义 LDAP 域的 <domain>_<username>_ 或 <domain>@<user_name> 格式的用户名: [domain/LDAP] [... file truncated ...] re_expression = (?P_<domain>[\]*?)\?(?P<name>_[\]+$)
- 命令/配置摘录:
(?P_<name>_[^@]+)@?(?P_<domain>_[^@]*$)
[sssd] [... file truncated ...] re_expression = (?P_<domain>_[\\]*?)\\?(?P_<name>_[\\]+$)- 注意:注意 对于身份管理和活动目录提供者,默认用户名格式为 <user_name>@<domain_name> 或 <NetBIOS_name><user_name>。
6.2. 调整 SSSD 如何打印完整用户名
- 要点:当 use_fully_qualified_names 为 active 时,系统安全服务守护进程(SSSD)默认显示完全限定的用户名,如 user@domain。您可以使用 full_name_format 选项自定义此输出格式,以匹配传统要求,如显示 domain\user。
- 要点:如果在 /etc/sssd/sssd.conf 文件中启用了 use_fully_qualified_names 选项,SSSD 默认会根据以下扩展打印 <name>@<domain> 格式的完整用户名:
- 列表:root 访问权限
- 列表:以 root 身份,打开 /etc/sssd/sssd.conf 文件。
- 列表:要为所有域定义全局扩展,请将 full_name_format 添加到 sssd.conf 的 [sssd] 部分: [sssd] [... file truncated ...] full_name_format = %1$s@%2$s 在这种情况下,用户名显示为 user@domain.test。
- 列表:要定义特定域的用户名打印格式,请将 full_name_format 添加到 sssd.conf 的对应域部分。 要使用 %2$s%1$s 为活动目录(AD)域配置扩展: [domain/ad.domain] [... file truncated ...] full_name_format = %2$s%1$s 在本例中,用户名显示为 ad.domain\user。 要使用 %3$s%1$s 为活动目录(AD)域配置扩展: [domain/ad.domain] [... file truncated ...] full_name_format = %3$s%1$s 在这种情况下,如果活动目录域的扁平域名被设为 AD,则用…
- 列表:要使用 %2$s%1$s 为活动目录(AD)域配置扩展: [domain/ad.domain] [... file truncated ...] full_name_format = %2$s%1$s 在本例中,用户名显示为 ad.domain\user。
- 列表:要使用 %3$s%1$s 为活动目录(AD)域配置扩展: [domain/ad.domain] [... file truncated ...] full_name_format = %3$s%1$s 在这种情况下,如果活动目录域的扁平域名被设为 AD,则用户名显示为 AD\user。
- 命令/配置摘录:
%1$s@%2$s
[sssd] [... file truncated ...] full_name_format = %1$s@%2$s- 注意:注意 如果未为受信任的域设置 use_fully_qualified_names,或者明确设置为 false,则仅打印没有域部分的用户名。
- 注意:注意 SSSD 可在某些名称配置中剥离名称的域组件,这可能会导致身份验证错误。如果将 full_name_format 设置为非标准值,您会收到警告提示您将其更改为标准格式。
6.3. 启用离线验证
- 要点:当身份提供程序无法访问时,系统安全服务守护进程(SSSD)需要凭证缓存才能启用身份验证。启用 cache_credentials 允许用户在网络中断期间使用本地存储的密码哈希登录,确保业务连续性。
- 要点:您可以通过在 /etc/sssd/sssd.conf 文件中将 cache_credentials 设置为 true 来启用凭证缓存。如果使用双因素身份验证,缓存的凭证指的是密码和第一个身份验证因素。请注意,对于 passkey 和智能卡身份验证,您不需要将 cache_credentials 设置为 true 或设置任何其它配置;只要缓存中记录了成功的在线身份验证,它们就可以离线工作。
- 列表:root 访问权限
- 列表:打开 /etc/sssd/sssd.conf 文件:
- 列表:在 domain 部分中,添加 cache_credentials = true 设置: [domain/<domain_name>] cache_credentials = true
- 列表:可选,但推荐:在身份提供程序不可用时为 SSSD 允许离线身份验证的时长配置时间限制: 配置 PAM 服务以使用 SSSD。 使用 offline_credentials_expiration 选项来指定时间限制。 请注意,限制以天数为单位。 例如,要指定用户在上一次成功登录后 3 天可以离线验证,请使用: [pam] offline_credentials_expiration = 3
- 列表:配置 PAM 服务以使用 SSSD。
- 列表:使用 offline_credentials_expiration 选项来指定时间限制。 请注意,限制以天数为单位。 例如,要指定用户在上一次成功登录后 3 天可以离线验证,请使用: [pam] offline_credentials_expiration = 3
- 命令/配置摘录:
[domain/<domain_name>] cache_credentials = true
[pam] offline_credentials_expiration = 3- 注意:重要 SSSD 永远不会以纯文本形式缓存密码。它仅存储密码的哈希。 虽然凭证存储为 salted SHA-512 哈希,但如果攻击者打算访问缓存文件并使用暴力攻击破解密码,这可能会构成安全风险。访问缓存文件需要特权访问权限,这是 RHEL 中的默认设置。
6.4. 配置 DNS 服务发现
- 要点:DNS 服务发现允许系统安全服务守护进程(SSSD)使用 SRV 记录自动查找身份服务器。此配置不再需要硬编码服务器 IP 地址,通过查询 DNS 基础架构来启用动态故障转移和负载平衡。
- 要点:如果在 /etc/sssd/sssd.conf 文件中未明确定义身份或身份验证服务器,SSSD 可以使用 DNS 服务发现动态发现服务器。
- 列表:root 访问权限
- 列表:打开 /etc/sssd/sssd.conf 文件:
- 列表:将主服务器值设置为 srv。 对于 LDAP 供应商,使用 ldap_uri 选项设置主服务器: [domain/<ldap_domain_name>] id_provider = ldap ldap_uri = srv
- 列表:设置服务类型,在密码更改供应商中启用服务发现: [domain/<ldap_domain_name>] id_provider = ldap ldap_uri = srv chpass_provider = ldap ldap_chpass_dns_service_name = ldap
- 列表:可选:默认情况下,服务发现使用系统主机名的域部分作为域名。要使用不同的 DNS 域,请使用 dns_discovery_domain 选项指定域名。
- 列表:可选:默认情况下,服务发现扫描 LDAP 服务类型。要使用不同的服务类型,请使用 ldap_dns_service_name 选项指定类型。
- 命令/配置摘录:
[domain/<ldap_domain_name>] id_provider = ldap ldap_uri = _srv_
[domain/<ldap_domain_name>] id_provider = ldap ldap_uri = _srv_ chpass_provider = ldap ldap_chpass_dns_service_name = ldap- 注意:注意 SSSD 无法动态发现备份服务器,只有主服务器。
6.5. 配置简单的访问提供程序规则
- 要点:简单 访问提供程序根据用户或组的明确列表限制系统登录访问权限。在 sssd.conf 中直接配置 allow 或 deny 规则,以便在不修改远程后端目录的情况下在本地强制执行安全策略。
- 要点:例如,您可以使用 simple 访问供应商限制对特定用户或组的访问。即使他们针对配置的身份验证提供程序成功进行身份验证,也不允许其他用户或组登录。
- 列表:root 访问权限
- 列表:打开 /etc/sssd/sssd.conf 文件:
- 列表:将 access_provider 选项设置为 simple : [domain/<domain_name>] access_provider = simple
- 列表:为用户定义访问控制规则。 要允许访问用户,请使用 simple_allow_users 选项。 若要拒绝用户访问,可使用 simple_deny_users 选项。 重要 如果您拒绝对特定用户的访问,则会自动允许对所有其他用户的访问。因此,允许访问特定用户通常被认为比拒绝对特定用户的访问更安全。
- 列表:要允许访问用户,请使用 simple_allow_users 选项。
- 列表:若要拒绝用户访问,可使用 simple_deny_users 选项。
- 命令/配置摘录:
[domain/<domain_name>] access_provider = simple
[domain/<domain_name>] access_provider = simple simple_allow_users = alice, bob simple_allow_groups = engineers- 注意:重要 如果您拒绝对特定用户的访问,则会自动允许对所有其他用户的访问。因此,允许访问特定用户通常被认为比拒绝对特定用户的访问更安全。
- 注意:重要 如果您拒绝访问特定组,则会自动允许访问其他任何组。因此,允许访问特定组通常被认为比拒绝对特定组的访问更安全。
6.6. 配置 SSSD 以应用 LDAP 访问过滤器
- 要点:LDAP 访问过滤器通过在目录条目中需要特定属性匹配来优化授权。SSSD 在登录期间评估这些过滤器,只有在用户对象满足定义的条件(如特定组中的成员资格)时才会授予访问权限。
- 要点:如果在 /etc/sssd/sssd.conf 中设置 access_provider 选项,SSSD 会使用指定的访问提供程序来评估哪些用户被授予系统访问权限。如果您正在使用的访问提供商是 LDAP 提供商类型的扩展,您也可以指定一个 LDAP 访问控制过滤器,用户必须匹配才能允许访问系统。
- 列表:root 访问权限
- 列表:打开 /etc/sssd/sssd.conf 文件:
- 列表:在 [domain] 部分中,指定访问控制过滤器。 对于 LDAP,请使用 ldap_access_filter 选项。 对于 AD,请使用 ad_access_filter 选项。另外,您必须通过将 ad_gpo_access_control 选项设置为 disabled 来禁用基于 GPO 的访问控制。 例如,要只允许对属于 admins 用户组且具有 unixHomeDirectory 属性集的 AD 用户进行访问,请使用: [domain/<ad_domain_name>] access provider = ad [... file truncated ...] ad_access_filter = (&(memberO…
- 列表:对于 LDAP,请使用 ldap_access_filter 选项。
- 列表:对于 AD,请使用 ad_access_filter 选项。另外,您必须通过将 ad_gpo_access_control 选项设置为 disabled 来禁用基于 GPO 的访问控制。 例如,要只允许对属于 admins 用户组且具有 unixHomeDirectory 属性集的 AD 用户进行访问,请使用: [domain/<ad_domain_name>] access provider = ad [... file truncated ...] ad_access_filter = (&(memberOf=cn=admins,ou=groups,dc=example,dc=com)(unixHomeDirectory=*)…
- 命令/配置摘录:
[domain/<ad_domain_name>] access provider = ad [... file truncated ...] ad_access_filter = (&(memberOf=cn=admins,ou=groups,dc=example,dc=com)(unixHomeDirectory=*)) ad_gpo_access_control = disabled
[domain/example.com] access_provider = ldap ldap_access_filter = memberOf=cn=allowedusers,ou=Groups,dc=example,dc=com ldap_access_order = filter, host, authorized_service- 注意:注意 访问过滤器仅应用于 LDAP 用户条目。因此,在嵌套组上使用这种类型的访问控制可能无法正常工作。要对嵌套组应用访问控制,请参阅 配置 简单 访问提供者规则。
- 注意:重要 在使用脱机缓存时,SSSD 会检查用户最近的在线登录尝试是否成功。在最近一次在线登录期间成功登录的用户仍将能够脱机登录,即使他们与访问过滤器不匹配。
第 7 章 SSSD 客户端侧的视图
- 要点:sss_override 工具可帮助您创建用户数据的本地视图。此工具修改特定计算机上的 POSIX 属性,而不更改中央身份提供程序、处理冲突或本地要求。
- 要点:您可以为所有 id_provider 值配置覆盖,但 ipa 除外。
- 列表:使用 ID 视图来覆盖 IdM 客户端上的用户属性值
- 列表:ID 视图对 SSSD 性能的潜在负面影响
7.1. 覆盖 LDAP username 属性
- 要点:LDAP 用户名可能与本地系统策略或命名约定冲突。使用 sss_override 命令将远程 LDAP 用户名映射到不同的本地别名,确保与特定主机兼容。
- 要点:先决条件
- 列表:root 访问权限
- 列表:已安装了 sssd-tools 软件包
- 列表:显示用户的当前信息: # id <ldap_username> 将 <ldap_username> 替换为用户的 LDAP username。例如: # id sjones uid=1001(sjones) gid=6003 groups=6003,10(wheel)
- 列表:添加本地用户名: # sss_override user-add <ldap_username> -n <local_username> 将 <ldap_username> 替换为 LDAP username,并将 <local_username> 替换为所需的本地用户名。例如: # sss_override user-add sjones -n sarah
- 列表:使用 sss_override user-add 命令创建第一次覆盖后,重启 SSSD 以使更改生效: # systemctl restart sssd
- 列表:验证本地用户名是否已添加: # id <local_username> 例如: # id sarah uid=1001(sjones) gid=6003(sjones) groups=6003(sjones),10(wheel) # sss_override user-show sjones user@ldap.example.com:sarah::::::
- 命令/配置摘录:
# id <ldap_username>
# id sjones7.2. 覆盖 LDAP UID 属性
- 要点:冲突的数字标识符可能会导致文件权限错误。您可以使用 sss_override,使用特定本地值覆盖 LDAP 提供的唯一标识符(UID),确保用户与本地文件所有权要求匹配。
- 要点:先决条件
- 列表:root 访问权限
- 列表:已安装了 sssd-tools 软件包
- 列表:显示用户当前的 UID: # id -u <ldap_username> 将 <ldap_username> 替换为用户的 LDAP username。例如: # id -u sarah 1001
- 列表:覆盖用户帐户的 UID: # sss_override user-add <ldap_username> -u <local_uid> 将 <ldap_username> 替换为用户的 LDAP username,并将 <local_uid> 替换为新的 UID 号。例如: # sss_override user-add sarah -u 6666
- 列表:使内存缓存过期: # sss_cache --users
- 列表:使用 sss_override user-add 命令创建第一次覆盖后,重启 SSSD 以使更改生效: # systemctl restart sssd
- 命令/配置摘录:
# id -u <ldap_username>
# id -u sarah7.3. 覆盖 LDAP GID 属性
- 要点:您可以为本地系统上的 LDAP 用户更改组标识符(GID)。此操作可确保用户的主组与特定的本地要求匹配,从而促进正确的文件访问和组成员资格。
- 要点:先决条件
- 列表:root 访问权限
- 列表:已安装 sssd-tools
- 列表:显示用户当前的 GID: # id -g <ldap_username> 将 <ldap_username> 替换为用户的名称。例如: # id -g sarah 6003
- 列表:覆盖用户帐户的 GID: # sss_override user-add <ldap_username> -g <local_gid> 将 <ldap_username> 替换为用户的名称,将 <local_gid> 替换为本地 GID 号。例如: # sss_override user-add sarah -g 6666
- 列表:使内存缓存过期: # sss_cache --users
- 列表:使用 sss_override user-add 命令创建第一次覆盖后,重启 SSSD 以使更改生效: # systemctl restart sssd
- 命令/配置摘录:
# id -g <ldap_username>
# id -g sarah7.4. 覆盖 LDAP 主目录属性
- 要点:每个客户端计算机上通常不存在远程主目录路径。覆盖此属性可帮助您将用户映射到有效的本地路径,确保用户在登录时将其置于现有目录中。
- 要点:先决条件
- 列表:root 访问权限
- 列表:已安装 sssd-tools
- 列表:显示本地存储的用户的当前主目录: # getent passwd <ldap_username> <ldap_username>❌XXXX:XXXX::/home/<home_directory>:/bin/bash 将 <ldap_username> 替换为用户的名称。输出显示了本地所看到的主目录值,这可能与 LDAP 记录不同。例如: # getent passwd sarah sarah❌1001:6003::sarah:/bin/bash
- 列表:覆盖用户的主目录: # sss_override user-add <ldap_username> -h <new_home_directory> 将 <ldap_username> 替换为用户的名称,将 <new_home_directory> 替换为新的主目录。例如: # sss_override user-add sarah -h admin
- 列表:重启 SSSD 以使更改生效: # systemctl restart sssd
- 列表:验证是否定义了新主目录: # getent passwd <ldap_username> <ldap_username>❌XXXX:XXXX::/home/<new_home_directory>:/bin/bash
- 命令/配置摘录:
# getent passwd <ldap_username>
<ldap_username>:x:XXXX:XXXX::/home/<home_directory>:/bin/bash7.5. 覆盖 LDAP shell 属性
- 要点:在 LDAP 中分配的默认 shell 可能受特定客户端的限制或不可用。您可以覆盖此属性来分配有效的本地 shell,如 /bin/bash 或 /sbin/nologin,适用于主机的特定目的。
- 要点:先决条件
- 列表:root 访问权限
- 列表:已安装 sssd-tools
- 列表:显示本地存储的用户的当前 shell: # getent passwd <ldap_username> <ldap_username>❌XXXX:XXXX::/home/<home_directory>:<currentshell> 将 <ldap_username> 替换为用户的名称。
- 列表:覆盖用户的 shell: # sss_override user-add <ldap_username> -s <new_shell> 将 <ldap_username> 替换为用户的名称,将 <new_shell> 替换为新的 shell。
- 列表:重启 SSSD 以使更改生效: # systemctl restart sssd
- 列表:验证是否定义了新 shell: # getent passwd <ldap_username> <ldap_username>❌XXXX:XXXX::/home/<home_directory>:<new_shell>
- 命令/配置摘录:
# getent passwd <ldap_username>
<ldap_username>:x:XXXX:XXXX::/home/<home_directory>:_<currentshell>_7.6. 列出主机上的覆盖
- 要点:您必须审核本地修改以确保配置一致性。sss_override 工具提供搜索功能,用于列出存储在本地缓存中的所有当前活动的用户和组覆盖。
- 要点:先决条件
- 列表:root 访问权限
- 列表:已安装 sssd-tools
- 列表:列出所有用户覆盖: # sss_override user-find user1@ldap.example.com::8000::::/bin/zsh: user2@ldap.example.com::8001::::/bin/bash: ...
- 列表:列出所有组覆盖: # sss_override group-find group1@ldap.example.com::7000 group2@ldap.example.com::7001 ...
- 命令/配置摘录:
# sss_override user-find
user1@ldap.example.com::8000::::/bin/zsh: user2@ldap.example.com::8001::::/bin/bash: ...7.7. 删除本地覆盖
- 要点:删除覆盖会将用户或组属性恢复到中央目录提供的值。使用删除命令清理过时的配置或立即恢复默认身份数据。
- 要点:先决条件
- 列表:root 访问权限
- 列表:已安装 sssd-tools
- 列表:要删除用户帐户的覆盖,请使用: # sss_override user-del <local_username> 将 <local_username> 替换为用户的名称。更改会立即生效。
- 列表:要为组群删除覆盖,请使用: # sss_override group-del <group_name>
- 列表:使用 sss_override user-del 或 sss_override group-del 命令删除第一次覆盖后,重启 SSSD 以使更改生效: # systemctl restart sssd 当您为用户或组群删除覆盖时,此对象的所有覆盖都会被删除。
- 命令/配置摘录:
# sss_override user-del <local_username>
# sss_override group-del <group_name>7.8. 导出和导入本地视图
- 要点:本地覆盖位于 SSSD 缓存中,并在缓存清除过程中删除风险。将这些配置导出到备份文件可帮助您在系统维护或迁移后快速恢复自定义视图。
- 要点:先决条件
- 列表:root 访问权限
- 列表:已安装 sssd-tools
- 列表:要备份用户和组视图,请使用: # sss_override user-export /var/lib/sss/backup/sssd_user_overrides.bak # sss_override group-export /var/lib/sss/backup/sssd_group_overrides.bak
- 列表:要恢复用户和组视图,请使用: # sss_override user-import /var/lib/sss/backup/sssd_user_overrides.bak # sss_override group-import /var/lib/sss/backup/sssd_group_overrides.bak
- 命令/配置摘录:
# sss_override user-export /var/lib/sss/backup/sssd_user_overrides.bak # sss_override group-export /var/lib/sss/backup/sssd_group_overrides.bak
# sss_override user-import /var/lib/sss/backup/sssd_user_overrides.bak # sss_override group-import /var/lib/sss/backup/sssd_group_overrides.bak第 8 章 配置 RHEL 主机以使用 AD 作为身份验证提供程序
- 要点:配置 Red Hat Enterprise Linux (RHEL)以在没有域加入的情况下针对 Active Directory (AD)进行身份验证。此方法利用 SSSD 代理和 Kerberos 来验证凭证,允许集中身份验证同时保留本地管理控制。
- 要点:在以下情况下使用此方法:
- 列表:您不希望 AD 管理员控制启用和禁用主机。
- 列表:主机(可以是一个公司 PC)只表示被您公司中的某一用户使用。
- 列表:您有访问 rhel_host 的 root 权限。
- 列表:AD_user 用户帐户存在于 example.com 域中。
- 列表:Kerberos realm 是 EXAMPLE.COM。
- 列表:rhel_host 尚未使用 realm join 命令加入到 AD。
- 命令/配置摘录:
# dnf install sssd-proxy
# useradd AD_user- 注意:重要 只有在您有具体的原因避免将主机加入 AD 时,才使用此方法。 考虑将系统完全加入到 AD 或 Identity Management (IdM)。将 RHEL 主机加入到域中可方便管理设置。如果您关注与将客户端直接加入 AD 中的客户端访问许可证,请考虑利用与 AD 信任协议中的 IdM 服务器。有关 IdM-AD 信任的更多信息,请参阅 规划 IdM 和 AD 之间的跨林信任 和 在 IdM 和 AD 之间安装信任。
第 9 章 使用 SSSD 报告主机的用户访问权限
- 要点:安全系统服务守护进程(SSSD)跟踪跨网络客户端的用户访问权限。使用 sssctl 命令行工具生成详细的访问控制报告,以及用于安全合规的审计用户数据。
9.1. 先决条件
- 列表:SSSD 软件包安装在网络环境中
9.2. sssctl 命令
- 要点:sssctl 工具提供了一个统一的接口来监控安全系统服务守护进程(SSSD)状态。使用此工具管理缓存、查看日志和审计域状态或用户身份验证访问。
- 要点:您可以使用 sssctl 工具收集有关的信息:
- 列表:域状态
- 列表:客户端用户身份验证
- 列表:对特定域的客户端的用户访问
- 列表:有关缓存内容的信息
- 列表:管理 SSSD 缓存
- 列表:管理日志
- 注意:注意 sssctl 工具取代了 sss_cache 和 sss_debuglevel 工具。
9.3. 使用 sssctl 生成访问控制报告
- 要点:安全系统服务守护进程(SSSD)在本地机器上强制实施登录权限。生成访问控制报告会列出当前应用到主机的特定规则,可帮助您验证活动的安全策略。
- 要点:先决条件
- 列表:您必须使用管理员特权登录。
- 列表:要生成访问控制报告,请运行以下命令,替换 <domain_name> : [root@client1 ~]# sssctl access-report <domain_name> 1 rule cached Rule name: example.user Member users: example.user Member services: sshd
- 命令/配置摘录:
[root@client1 ~]# sssctl access-report <domain_name>
1 rule cached Rule name: example.user Member users: example.user Member services: sshd- 注意:注意 访问报告不准确,因为这个工具不会跟踪由密钥发布中心(KDC)锁定的用户。
9.4. 使用 sssctl 显示用户授权详情
- 要点:sssctl user-checks 命令针对 PAM 服务验证特定的用户权限。运行此诊断工具,对登录失败进行故障排除,并从 Name Service Switch (NSS)或 InfoPipe 响应器查看数据。
- 要点:运行 sssctl user-checks <user_name> 以显示名称服务切换(NSS)和 D-Bus 接口的 InfoPipe 响应器中提供的用户数据。输出显示用户是否被授权使用 system-auth 可插拔验证模块(PAM)服务登录。
- 列表:-a 用于 PAM 操作
- 列表:-s 用于 PAM 服务
- 列表:您必须使用管理员特权登录。
- 列表:要显示特定用户的用户数据,请输入: [root@client1 ~]# sssctl user-checks -a acct -s sshd <user_name> user: example.user action: acct service: sshd ...
- 命令/配置摘录:
[root@client1 ~]# sssctl user-checks -a acct -s sshd <user_name>
user: example.user action: acct service: sshd ...第 10 章 使用 SSSD 查询域信息
- 要点:sssctl 工具从系统安全服务守护进程(SSSD)检索域数据,涵盖了身份管理和可信 Active Directory 域。使用此工具审核可用的域,并验证连接状态以进行故障排除。
10.1. 使用 sssctl 列出域
- 要点:sssctl domain-list 命令输出所有检测到的身份域,包括本地文件和可信外部目录。此列表可帮助您验证域拓扑并确保身份源的完全可见性。
- 要点:先决条件
- 列表:您必须使用管理员特权登录。
- 列表:可选:要显示 sssctl 命令的帮助,请输入: [user@client1 ~]$ sssctl --help ...
- 列表:要显示可用域列表,请输入: [root@client1 ~]# sssctl domain-list implicit_files idm.example.com ad.example.com sub1.ad.example.com 该列表包含 Active Directory 和 Identity Management 间的跨林信任域。
- 命令/配置摘录:
[user@client1 ~]$ sssctl --help ...
[root@client1 ~]# sssctl domain-list- 注意:注意 这个状态可能立即不可用。如果该域不可见,请重复该命令。
10.2. 使用 sssctl 验证域状态
- 要点:sssctl domain-status 命令检查特定域的实时连接。这个工具确认服务器可访问性和在线状态,可帮助您诊断网络或配置失败。
- 要点:先决条件
- 列表:您必须使用管理员特权登录。
- 列表:可选:要显示 sssctl 命令的帮助,请输入: [user@client1 ~]$ sssctl --help
- 列表:要显示特定域的用户数据,请将 <domain_name> 替换为实际的域名,并输入: [root@client1 ~]# sssctl domain-status <domain_name> 域 idm.example.com 的输出示例 Online status: Online Active servers: IPA: server.idm.example.com Discovered IPA servers: - server.idm.example.com 域 idm.example.com 在线,并在可应用命令的客户端可见。 如果域不可用,则结果为: [root@client1 ~]# sssctl domain-sta…
- 命令/配置摘录:
[user@client1 ~]$ sssctl --help
[root@client1 ~]# sssctl domain-status <domain_name>- 注意:注意 这个状态可能立即不可用。如果该域不可见,请重复该命令。
第 11 章 使用 SSSD 限制 PAM 服务的域
- 要点:系统安全服务守护进程(SSSD)会根据运行该服务的用户限制可插拔验证模块(PAM)服务对特定身份域的访问。通过这种评估机制,您可以实施精细的控制,确保服务仅与授权的身份提供程序交互。
11.1. PAM 简介
- 要点:可插拔验证模块(PAM)为系统身份验证提供模块化框架。应用程序卸载身份验证以集中配置的 PAM 堆栈,可帮助您实施涉及 Kerberos、SSSD 或本地文件的灵活策略。
- 要点:PAM 可插拔,因为存在用于不同类型身份验证源(如 Kerberos、SSSD、NIS 或本地文件系统)的 PAM 模块。您可以对不同的身份验证源进行优先排序。
- 列表:PAM 提供一种常见身份验证方案,可用于各种应用。
- 列表:PAM 为系统管理员提供了对身份验证的显著灵活性和控制力。
- 列表:PAM 提供单个全文档库,使开发人员无需创建自己的身份验证方案即可编写程序。
11.1.1. PAM 配置文件格式
- 要点:可插拔验证模块(PAM)配置文件由控制模块行为的指令组成。每行指定接口类型、控制标志、模块库名称和可选参数,指示系统如何处理特定的身份验证任务。
- 要点:例如:
- 命令/配置摘录:
module_type control_flag <module_name> <module_arguments>
auth required pam_unix.so- 注意:注意 当模块的控制标志使用 sufficient 或 requisite 值时,列出的模块的顺序对身份验证过程非常重要。
11.2. 域访问限制选项
- 要点:通过在 sssd.conf 中使用 pam_trusted_users 和 pam_public_domains 来管理控制域访问权限。此外,PAM 配置文件中的 domain 选项会将特定的服务限制为定义的身份验证提供程序列表。
- 要点:要限制对所选域的访问,您可以使用以下选项:
- 命令/配置摘录:
auth required pam_sss.so domains=- 注意:注意 PAM 配置文件中定义的域限制仅适用于身份验证操作,不适用于用户查找。
11.3. 限制 PAM 服务的域
- 要点:您可以将特定的 PAM 服务锁定到可用 SSSD 域的子集。此配置强制服务仅针对指定的提供程序进行身份验证,从而将关键应用与其他身份源隔离。
- 要点:先决条件
- 列表:SSSD 已安装并运行。
- 列表:配置 SSSD 以访问所需的域。在 /etc/sssd/sssd.conf 文件中的 domain 选项中定义 SSSD 可对其进行身份验证的域: [sssd] domains = <idm.example.com>, <ad.example.com>, <ldap.example.com>
- 列表:通过在 PAM 配置文件中设置'domains' 选项,指定 PAM 服务可以向其进行身份验证的域。例如: auth sufficient pam_sss.so forward_pass domains=<idm.example.com> account [default=bad success=ok user_unknown=ignore] pam_sss.so password sufficient pam_sss.so use_authtok 此配置将 PAM 服务限制为只向 <idm.example.com> 进行身份验证。
- 列表:向 <idm.example.com> 进行身份验证。它必须成功。
- 命令/配置摘录:
[sssd] domains = <idm.example.com>, <ad.example.com>, <ldap.example.com>
auth sufficient pam_sss.so forward_pass domains=<idm.example.com> account [default=bad success=ok user_unknown=ignore] pam_sss.so password sufficient pam_sss.so use_authtok11.4. 关于 PAM 配置文件
- 要点:/etc/pam.d/ 中的 PAM 配置文件为各个应用程序定义策略。每个文件都堆栈特定的模块来强制实施安全要求,如密码质量检查或根访问限制,用于其控制的服务。
- 要点:例如,login 程序有一个名为 /etc/pam.d/login 的相应的 PAM 配置文件。
- 命令/配置摘录:
#%PAM-1.0 auth required pam_securetty.so auth required pam_unix.so nullok auth required pam_nologin.so account required pam_unix.so password required pam_pwquality.so retry=3 password required pam_unix.so shadow nullok use_authtok session required pam_unix.so- 注意:警告 手动编辑 PAM 配置文件可能导致身份验证和访问问题。使用 authselect 工具配置 PAM。
- 注意:注意 在本例中,所有三个 auth 模块都检查了,即使第一个 auth 模块失败了。这是一个很好的安全方法,可防止潜在的攻击者了解其身份验证在哪个阶段失败。
第 12 章 在本地 SSSD 配置中消除拼写错误
- 要点:使用 sssctl config-check 命令来验证 SSSD 配置文件的语法。此工具检测 /etc/sssd/sssd.conf 中的拼写错误和无效的参数,确保在重启该服务前进行清理。
- 要点:先决条件
- 列表:以 root 身份登录。
- 列表:sssd-tools 软件包已安装。
- 列表:输入 sssctl config-check 命令: # sssctl config-check Issues identified by validators: 1 [rule/allowed_domain_options]: Attribute 'ldap_search' is not allowed in section 'domain/<domain_name>'. Check for typos. Messages generated during configuration merging: 0 Used configuration snippet files: 0
- 列表:打开 /etc/sssd/sssd.conf 文件并更正拼写错误。例如,如果您收到上一步中的出错信息,将 ldap_search 替换为 ldap_search_base: [...] [domain/<domain_name>] ldap_search_base = dc=<domain_component>,dc=<tld> [...]
- 列表:保存这个文件。
- 列表:重启 SSSD: # systemctl restart sssd
- 命令/配置摘录:
# sssctl config-check
Issues identified by validators: 1 [rule/allowed_domain_options]: Attribute 'ldap_search' is not allowed in section 'domain/<domain_name>'. Check for typos. Messages generated during configuration merging: 0 Used configuration snippet files: 0第 13 章 IdM 中 SSSD 身份验证故障排除
- 要点:通过分析客户端、后端服务器和身份验证协议之间的交互来对 SSSD 进行故障排除。追踪数据流有助于隔离身份管理基础架构中特定组件的故障。
- 要点:在 Identity Management(IdM)环境中的身份验证涉及许多组件:
- 列表:SSSD 服务。
- 列表:Name Services Switch (NSS)。
- 列表:可插拔验证模块 (PAM)。
- 列表:IdM 目录服务器。
- 列表:IdM Kerberos 密钥分发中心 (KDC)。
- 列表:AD 域控制器上的目录服务器。
13.1. 使用 SSSD 获取 IdM 用户信息时的数据流
- 要点:SSSD 通过 NSS 响应程序路由 libc 请求到后端进程来检索用户数据。服务首先检查本地缓存,只有在需要获取当前身份信息时才查询远程 IdM 服务器。
- 要点:下图使用 getent passwd <idm_user_name> 命令在请求 IdM 用户信息的过程中简化 IdM 客户端和 IdM 服务器之间的信息流。
- 列表:getent 命令会触发来自 libc 库的 getpwnam 调用。
- 列表:libc 库引用 /etc/nsswitch.conf 配置文件来检查哪个服务负责提供用户信息,并发现 SSSD 服务的条目。
- 列表:libc 库打开 ss_sss 模块。
- 列表:nss_sss 模块检查内存映射缓存以获取用户信息。如果缓存中存在数据,则 ss_sss 模块会返回它。
- 列表:如果用户信息不在内存映射缓存中,则会将请求传递给 SSSD sssd_nss 响应程序进程。
- 列表:SSSD 服务检查其缓存。如果缓存中存在数据并有效,sssd_nss 响应程序会从缓存中读取数据并将其返回到应用。
13.2. 使用 SSSD 获取 AD 用户信息时的数据流
- 要点:检索 Active Directory (AD)数据涉及充当网桥的 IdM 服务器。客户端 SSSD 服务查询 IdM 服务器,它会触发 extdom_extop 插件从 AD 域控制器获取身份记录。
- 要点:如果您在 IdM 环境和 AD 域之间建立了跨林信任,检索 IdM 客户端的 AD 用户信息时的信息流与检索 IdM 用户信息时的信息流非常相似,以及联系 AD 用户数据库的额外步骤。
- 列表:IdM 客户端为 AD 用户信息查找其本地 SSSD 缓存。
- 列表:如果 IdM 客户端没有用户信息,或者信息是 stale,客户端上的 SSSD 服务会联系 IdM 服务器上的 extdom_extop 插件来执行 LDAP 扩展操作并请求信息。
- 列表:IdM 服务器上的 SSSD 服务在其本地缓存中查找 AD 用户信息。
- 列表:如果 IdM 服务器在其 SSSD 缓存中没有用户信息,或者其信息为过时,它将执行 LDAP 搜索,以从 AD 域控制器请求用户信息。
- 列表:IdM 服务器上的 SSSD 服务从 AD 域控制器接收 AD 用户信息,并将其存储在其缓存中。
- 列表:extdom_extop 插件从 IdM 服务器上的 SSSD 服务接收信息,该服务完成 LDAP 扩展操作。
13.3. 以 IdM 中的 SSSD 用户身份进行身份验证时的数据流
- 要点:服务调用可插拔验证模块(PAM)堆栈来启动身份验证。SSSD 通过生成子进程来处理这些请求,以针对 IdM Kerberos 密钥分发中心(KDC)验证凭证,支持标准密码和智能卡验证方法。
- 要点:以 IdM 服务器或客户端中的用户身份进行身份验证涉及以下组件:
- 列表:启动身份验证请求的服务,如 sshd 服务。
- 列表:PAM 库及其模块。
- 列表:SSSD 服务、其响应者和后端。
- 列表:智能卡读取器(如果配置了智能卡验证)。
- 列表:身份验证服务器: IdM 用户通过 IdM KDC 进行身份验证。 Active Directory (AD) 用户通过 AD 域控制器 (DC) 进行身份验证。
- 列表:IdM 用户通过 IdM KDC 进行身份验证。
- 命令/配置摘录:
auth sufficient pam_sss.so13.4. 缩小身份验证问题的范围
- 要点:诊断登录失败需要逐步验证身份验证链。在分析特定授权规则前,验证网络连接、服务状态和 KDC 可访问性。
- 要点:要成功验证用户,您必须能够使用 SSSD 服务从存储用户信息的数据库检索用户信息。按照以下步骤测试身份验证流程的不同组件,以便在用户无法登录时缩小身份验证问题的范围。
- 列表:验证 SSSD 服务及其进程是否正在运行。 [root@client ~]# pstree -a | grep sssd |-sssd -i --logger=files | |-sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files | |-sssd_be --domain <domain_name> --uid 0 --gid 0 --logger=files | |-sssd_ifp --uid 0 --gid 0 --logger=files | |-sssd_nss --uid 0 --gid 0 --logger=files | |-ss…
- 列表:验证客户端是否可以通过其 IP 地址联系用户数据库服务器。 [user@client ~]$ ping <IP_address_of_the_database_server> 如果此步骤失败,请检查您的网络和防火墙设置是否允许 IdM 客户端和服务器之间进行直接通信。请参阅使用和配置 firewalld。
- 列表:验证客户端是否可以使用其完全限定主机名发现并联系 IdM LDAP 服务器(用于 IdM 用户)或 AD 域控制器(用于 AD 用户)。 [user@client ~]$ dig -t SRV ldap._tcp.<domain>@<server_name> [user@client ~]$ ping <fully_qualified_host_name_of_the_server> 如果此步骤失败,请检查您的 Dynamic Name Service (DNS) 设置,包括 /etc/resolv.conf 文件。请参阅配置 DNS 服务器顺序。 注意 默认情况下,SSSD 服务会尝试通过 DNS 服务 (SRV) 记录自动发现…
- 列表:验证客户端是否可以对 LDAP 服务器进行身份验证,并使用 ldapsearch 命令检索用户信息。 如果您的 LDAP 服务器是 IdM 服务器,如 server.example.com,检索主机的 Kerberos 票据,并使用主机 Kerberos 主体进行身份验证数据库搜索: [user@client ~]$ kinit -k 'host/client.example.com@EXAMPLE.COM' [user@client ~]$ ldapsearch -LLL -Y GSSAPI -h server.example.com -b "dc=example,dc=com" uid=<idm_user> 如果您的 LDAP…
- 列表:如果您的 LDAP 服务器是 IdM 服务器,如 server.example.com,检索主机的 Kerberos 票据,并使用主机 Kerberos 主体进行身份验证数据库搜索: [user@client ~]$ kinit -k 'host/client.example.com@EXAMPLE.COM' [user@client ~]$ ldapsearch -LLL -Y GSSAPI -h server.example.com -b "dc=example,dc=com" uid=<idm_user>
- 列表:如果您的 LDAP 服务器是 Active Directory (AD) 域控制器 (DC),如 server.ad.example.com,请检索主机的 Kerberos 票据,并使用主机 Kerberos 主体执行数据库搜索: [user@client ~]$ kinit -k 'CLIENT$@AD.EXAMPLE.COM' [user@client ~]$ ldapsearch -LLL -Y GSSAPI -h server.ad.example.com -b "dc=example,dc=com" sAMAccountname=<idm_user>
- 命令/配置摘录:
[root@client ~]# pstree -a | grep sssd
|-sssd -i --logger=files | |-sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files | |-sssd_be --domain <domain_name> --uid 0 --gid 0 --logger=files | |-sssd_ifp --uid 0 --gid 0 --logger=files | |-sssd_nss --uid 0 --gid 0 --logger=files | |-sssd_pac --uid 0 --gid 0 --logger=files | |-sssd_pam --uid 0 --gid 0 --logger=files | |-sssd_ssh --uid 0 --gid 0 --logger=files | `-sssd_sudo --uid 0 --gid 0 --logger=files |-sssd_kcm --uid 0 --gid 0 --logger=files- 注意:注意 默认情况下,SSSD 服务会尝试通过 DNS 服务 (SRV) 记录自动发现 LDAP 服务器和 AD DC。要将 SSSD 限制到特定的服务器,请使用以下选项在 sssd.conf 配置文件中定义它们: ipa_server = <fully_qualified_host_name_of_the_server> ad_server = <fully_qualified_host_name_of_the_server> ldap_uri = <fully_qualified_host_name_of_the_server> 如果使用这些选项,请验证您可以联系它们中列出的服务器。
13.5. SSSD 日志文件和日志记录级别
- 要点:SSSD 根据 /var/log/sssd/ 目录中的域和组件隔离日志。配置调试级别,范围从 0 到 9 来控制详细程度,平衡磁盘使用情况及诊断详情。
- 要点:对于 example.com IdM 域中的 IdM 服务器,其日志文件可能类似这样:
- 命令/配置摘录:
[root@server ~]# ls -l /var/log/sssd/
total 620 -rw-------. 1 root root 0 Mar 29 09:21 krb5_child.log -rw-------. 1 root root 14324 Mar 29 09:50 ldap_child.log -rw-------. 1 root root 212870 Mar 29 09:50 sssd_example.com.log -rw-------. 1 root root 0 Mar 29 09:21 sssd_ifp.log -rw-------. 1 root root 0 Mar 29 09:21 sssd_implicit_files.log -rw-------. 1 root root 0 Mar 29 09:21 sssd.log -rw-------. 1 root root 219873 Mar 29 10:03 sssd_nss.log -rw-------. 1 root root 0 Mar 29 09:21 sssd_pac.log -rw-------. 1 root root 13105 Mar 29 09:21 sssd_pam.log -rw-------. 1 root root 9390 Mar 29 09:21 sssd_ssh.log -rw-------. 1 root root 0 Mar 29 09:21 sssd_sudo.log13.5.1. SSSD 日志文件用途
- 要点:每个 SSSD 组件维护一个专用的日志文件,以隔离特定的操作。这些文件从帮助程序进程、响应者和域后端捕获数据,简化了相关错误消息的搜索。
- 要点:对于 sssd.conf 文件中的每个域部分,SSSD 服务会将与 LDAP 服务器通信的信息记录到单独的日志文件中。例如,在名为 example.com 的 IdM 域环境中,SSSD 服务将其信息记录到名为 sssd_example.com.log 的文件中。如果主机直接与名为 ad.example.com 的 AD 域集成,信息将记录到名为 sssd_ad.example.com.log 的文件中。
- 注意:注意 如果您有一个 IdM 环境以及与 AD 域的跨林信任,则有关 AD 域的信息仍会记录到 IdM 域的日志文件中。 类似地,如果主机直接集成到 AD 域,则任何子域的信息都会写入到主域的日志文件中。
13.5.2. SSSD 日志记录级别
- 要点:调试级别定义记录的事件的粒度。更高的整数值捕获越来越详细的 trace 消息和内部功能数据,而较低级别记录仅记录严重或严重服务失败。
- 要点:设置一个 debug 级别后,也会启用它以下的所有 debug 级别。例如,把 debug 级别设置为 6 后,也会启用 debug 级别 0 到 5。
- 表格样本(共 11 行):
- 级别 | Description
- 0 | 致命故障。阻止 SSSD 服务启动或导致它终止的错误。
- 1 | 关键故障。错误没有导致 SSSD 服务被终止,但至少有一个主要功能无法正常工作。
- 2 | 严重故障。这个错误声明特定请求或操作失败。这是默认的调试日志级别。
13.6. 在 sssd.conf 文件中为 SSSD 启用详细日志记录
- 要点:通过修改 sssd.conf 文件启用永久详细的日志记录。在特定配置部分中设置 debug_level 参数可捕获服务重启后的详细数据。
- 要点:默认情况下,SSSD 服务仅记录严重故障(调试级别 2),但它不会记录对身份验证问题进行故障排除所需的详情。
- 列表:您需要 root 密码来编辑 sssd.conf 配置文件并重新启动 SSSD 服务。
- 列表:在文本编辑器中打开 /etc/sssd/sssd.conf 文件。
- 列表:将 debug_level 选项添加到文件的每个部分,并将 debug 级别设置为您选择的详细程度。 [domain/<domain_name>] debug_level = 6 id_provider = ipa ... [sssd] debug_level = 6 services = nss, pam, ifp, ssh, sudo domains = <domain_name> [nss] debug_level = 6 [pam] debug_level = 6 [sudo] debug_level = 6 [ssh] debug_level = 6 [pac] debug_level = 6 [ifp] debug_l…
- 列表:保存并关闭 sssd.conf 文件。
- 列表:重启 SSSD 服务以加载新的配置设置。 [root@server ~]# systemctl restart sssd
- 列表:SSSD 日志文件和日志记录级别
- 命令/配置摘录:
[domain/<domain_name>] debug_level = 6 id_provider = ipa ... [sssd] debug_level = 6 services = nss, pam, ifp, ssh, sudo domains = <domain_name> [nss] debug_level = 6 [pam] debug_level = 6 [sudo] debug_level = 6 [ssh] debug_level = 6 [pac] debug_level = 6 [ifp] debug_level = 6
[root@server ~]# systemctl restart sssd13.7. 使用 sssctl 命令为 SSSD 启用详细的日志记录
- 要点:sssctl 工具会在不编辑配置文件的情况下立即调整日志详细程度。通过此命令,您可以提高调试级别,以便在活跃的故障排除会话期间捕获特定的事件。
- 要点:默认情况下,SSSD 服务仅记录严重故障(调试级别 2),但它不会记录对身份验证问题进行故障排除所需的详情。
- 列表:您需要 root 密码来运行 sssctl 命令。
- 列表:使用 sssctl debug-level 命令将 debug 级别设置为您所需的详细程度。例如: [root@server ~]# sssctl debug-level 6
- 列表:SSSD 日志文件和日志记录级别
- 命令/配置摘录:
[root@server ~]# sssctl debug-level 613.8. 从 SSSD 服务收集调试日志,对 IdM 服务器的身份验证问题进行故障排除
- 要点:解决服务器端身份验证错误涉及在重新生产尝试期间捕获一组干净的日志。在触发故障以生成集中数据集前清除旧日志和缓存。
- 要点:如果您在尝试以 IdM 用户身份对 IdM 服务器进行身份验证时遇到问题,请在服务器上的 SSSD 服务中启用详细的调试日志,并收集尝试检索用户信息的日志。
- 列表:您有 root 权限。
- 列表:在 IdM 服务器上启用详细的 SSSD 调试日志。 [root@server ~]# sssctl debug-level 6
- 列表:对于遇到身份验证问题的用户,在 SSSD 缓存中使相关的对象无效,这样使您不会绕过 LDAP 服务器来从缓存的 SSSD 中获取信息。 [root@server ~]# sssctl cache-expire -u <idm_user>
- 列表:通过删除旧的 SSSD 日志来最大程度减少数据集的故障排除。 [root@server ~]# sssctl logs-remove
- 列表:尝试切换至遇到身份验证问题的用户,同时在尝试前后收集时间戳。这些时间戳进一步缩小了数据集的范围。 [root@server sssd]# date; su <idm_user>; date Mon Mar 29 15:33:48 EDT 2021 su: user idm_user does not exist Mon Mar 29 15:33:49 EDT 2021
- 列表:可选:如果您不想继续收集详细的 SSSD 日志,请降低 debug 级别。 [root@server ~]# sssctl debug-level 2
- 命令/配置摘录:
[root@server ~]# sssctl debug-level 6
[root@server ~]# sssctl cache-expire -u <idm_user>13.9. 从 SSSD 服务收集调试日志,以对 IdM 客户端的身份验证问题进行故障排除
- 要点:客户端问题需要同时分析客户端和服务器日志。将客户端配置为联系特定的服务器,同步日志捕获,以便在网络上追踪请求。
- 要点:如果您在尝试以 IdM 用户身份向 IdM 客户端进行身份验证时遇到问题,请验证您是否可以检索有关 IdM 服务器的用户信息。如果您无法检索有关 IdM 服务器的用户信息,您将无法在 IdM 客户端(其从 IdM 服务器检索信息)上检索它。
- 列表:用户仅在 IdM 客户端而不是 IdM 服务器中存在身份验证问题。
- 列表:您需要 root 密码来运行 sssctl 命令并重新启动 SSSD 服务。
- 列表:在客户端上: 在文本编辑器中打开 /etc/sssd/sssd.conf 文件。
- 列表:在客户端上: 将 ipa_server 选项添加到文件的 [domain] 部分中,并使用其完全限定域名(FQDN)将其设置为 IdM 服务器。这可避免 IdM 客户端自动发现其他 IdM 服务器,从而将此测试限制为一个客户端和一个服务器。 [domain/<idm_domain_name>] ipa_server = <idm_server_fqdn> ...
- 列表:在客户端上: 保存并关闭 sssd.conf 文件。
- 列表:在客户端上:重启 SSSD 服务以加载配置更改。 [root@client ~]# systemctl restart sssd
- 命令/配置摘录:
[domain/<idm_domain_name>] ipa_server = <idm_server_fqdn> ...
[root@client ~]# systemctl restart sssd13.10. 跟踪 SSSD 后端中的客户端请求
- 要点:SSSD 分配唯一的 Request ID (RID)和客户端 ID (CID)来异步跟踪操作。通过后端日志跟踪这些标识符,以关联复杂的内部事件序列。
- 要点:要在后端日志中跟踪客户端请求,您可以使用唯一的请求标识符 RID#<integer> 和客户端 ID `[CID #<integer>]。这些标识符帮助隔离日志,以遵循来自多个 SSSD 组件的跨日志文件的从头到尾的请求。
- 列表:您已启用了调试日志,并且已从 IdM 客户端提交了请求。
- 列表:您有 root 特权。
- 列表:要查看 SSSD 日志文件,请使用 less 工具打开日志文件 /var/log/sssd/sssd_<domain_name>.log。例如: [root@server ~]# less /var/log/sssd/sssd_example.com.log
- 列表:查看 SSSD 日志,以获取有关客户端请求的信息。 (2021-07-26 18:26:37): [be[testidm.com]] [dp_req_destructor] (0x0400): [RID#3] Number of active DP request: 0 (2021-07-26 18:26:37): [be[testidm.com]] [dp_req_reply_std] (0x1000): [RID#3] DP Request AccountDomain #3: Returning [Internal Error]: 3,1432158301,GetAccountDomain() not supported (2…
- 命令/配置摘录:
[root@server ~]# less /var/log/sssd/sssd_example.com.log
(2021-07-26 18:26:37): [be[testidm.com]] [dp_req_destructor] (0x0400): [RID#3] Number of active DP request: 0 (2021-07-26 18:26:37): [be[testidm.com]] [dp_req_reply_std] (0x1000): [RID#3] DP Request AccountDomain #3: Returning [Internal Error]: 3,1432158301,GetAccountDomain() not supported (2021-07-26 18:26:37): [be[testidm.com]] [dp_attach_req] (0x0400): [RID#4] DP Request Account #4: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001]. (2021-07-26 18:26:37): [be[testidm.com]] [dp_attach_req] (0x0400): [RID#4] Number of active DP request: 113.11. 使用日志分析器工具跟踪客户端请求
- 要点:系统安全服务守护进程(SSSD)日志分析器工具解析详细日志来重建请求链。此实用程序过滤输出以仅显示特定客户端请求的相关条目,从而简化对高密度日志文件的分析。
- 要点:您可以使用工具跟踪跨多个 SSSD 组件的日志文件从头到尾的请求。
13.11.1. 日志分析器工具如何工作
- 要点:分析器链接跨多个 SSSD 进程的 NSS 和 PAM 请求。它使用客户端 ID 跟踪请求的生命周期,帮助您隔离特定的身份验证或查找尝试。
- 要点:通过使用日志解析工具,您可以跟踪跨多个 SSSD 组件日志文件的从头到尾的请求。您可以使用 sssctl analyze 命令运行分析器工具。
- 注意:注意 从 SSSD 内存缓存返回的请求不会被记录,且不能被日志分析器工具跟踪。
13.11.2. 运行日志分析器工具
- 要点:使用 sssctl analyze 列出最近的请求并显示其关联的日志。此工作流标识了唯一的客户端 ID,并提取故障排除所需的特定日志条目。
- 要点:先决条件
- 列表:您必须在 [$responder] 部分中将 debug_level 至少设置为 7,并设置 /etc/sssd/sssd.conf 文件的 [domain/$domain] 部分以启用日志解析功能。
- 列表:分析的日志必须来自使用 libtevent 链 ID 支持构建的 SSSD 的兼容版本,它是 RHEL 8.5 及之后版本中的 SSSD。
- 列表:在 list 模式下运行日志分析器工具以确定您在跟踪的请求的客户端 ID,添加 -v 选项以显示详细输出: # sssctl analyze request list -v 此时会显示最近发出的对 SSSD 的客户端请求的详细列表。 注意 如果分析 PAM 请求,请使用 --pam 选项运行 ssssctl analyze request list 命令。
- 列表:使用 show [unique client ID] 选项运行日志分析器工具,以显示与指定客户端 ID 号相关的日志: # sssctl analyze request show 20
- 列表:如果需要,您可以针对日志文件运行日志分析器工具,例如: # sssctl analyze --logdir=/tmp/var/log/sssd request list
- 命令/配置摘录:
# sssctl analyze request list -v
# sssctl analyze request show 20- 注意:注意 如果分析 PAM 请求,请使用 --pam 选项运行 ssssctl analyze request list 命令。
13.12. 其他资源
- 列表:常规 SSSD 调试过程(红帽知识库)
第 14 章 为单点登录配置应用程序
- 要点:单点登录(SSO)允许用户通过一个登录流程访问多个系统来简化身份验证。配置浏览器和电子邮件客户端等应用程序,以接受 Kerberos 票据、SSL 证书或令牌作为有效凭据。
- 要点:不同应用程序的配置可能有所不同。本章演示了以 Mozilla Thunderbird 电子邮件客户端和 Mozilla Firefox Web 浏览器为例,来如何配置 SSO 身份验证模式。
14.1. 先决条件
- 要点:在尝试配置前,验证目标系统是否托管了 Mozilla Firefox 和 Mozilla Thunderbird 所需的版本。确保这些应用程序已安装并可以被用户访问。 Mozilla Firefox 版本 88 Mozilla Thunderbird 版本 78
14.2. 将 Firefox 配置为使用 Kerberos 进行单点登录
- 要点:将 Firefox 配置为与内部网站点协商 Kerberos 身份验证。将特定域添加到配置设置中的可信 URI 列表中,允许浏览器自动将现有的 Kerberos 凭据传递给密钥分发中心(KDC)。
- 要点:流程
- 列表:在 Firefox 的地址栏中,输入 about:config 来显示当前配置选项的列表。
- 列表:在 Filter 字段中,键入 negotiate 来限制选项列表。
- 列表:双击 network.negotiate-auth.trusted-uris 项。
- 列表:输入要进行身份验证的域的名称,包括前面的句点(.)。如果要添加多个域,请在逗号分隔的列表中输入它们。 手动 Firefox 配置
- 列表:在 Web UI 中登录到 IdM: 使用 Kerberos 票据
- 命令/配置摘录:
[jsmith@host ~] $ kinit
Password for jsmith@EXAMPLE.COM:- 注意:注意 即使将 Firefox 配置为传递 Kerberos 凭据,您仍然需要一个有效的 Kerberos 票据。要生成 Kerberos 票据,请使用 kinit 命令并在 KDC 上提供用户密码。 [jsmith@host ~] $ kinit Password for jsmith@EXAMPLE.COM:
14.3. 查看 Firefox 中的证书
- 要点:通过检查证书管理器,用户可以验证当前已安装的授权机构和个人凭据。此审计确保浏览器具有安全连接所需的信任定位符。
- 要点:您可以查看存储在 Mozilla Firefox 中的证书,以验证身份验证设置。
- 列表:在 Mozilla Firefox 中,打开 Firefox 菜单并选择 Preferences。
- 列表:在左侧面板中,选择 Privacy & Security 部分。
- 列表:向下滚动到 证书 部分。
- 列表:点 View Certificates 打开 Certificate Manager。
14.4. 在 Firefox 中导入 CA 证书
- 要点:导入证书颁发机构(CA)证书与外部服务器建立信任。将 CA 文件添加到浏览器的存储中,可启用对该机构发布的网站和应用程序的安全、加密连接。
- 要点:先决条件
- 列表:您的设备上已有一个 CA 证书。
- 列表:打开证书管理器。
- 列表:选择 Authorities 标签页,点 Import。 图 14.1. 在 Firefox 中导入 CA 证书
- 列表:从您的设备中选择下载的 CA 证书。
14.5. 在 Firefox 中编辑证书信任设置
- 要点:修改信任设置以定义浏览器如何与特定证书交互。调整这些权限决定了浏览器是否为识别 Web 站点或电子邮件用户验证证书。
- 要点:先决条件
- 列表:您已成功导入了证书。
- 列表:打开证书管理器。
- 列表:在 Authorities 选项卡下,选择适当的证书,再单击 Edit Trust。
- 列表:编辑证书信任设置。 图 14.2. 在 Firefox 中编辑证书信任设置
14.6. 在 Firefox 中导入用于身份验证的个人证书
- 要点:个人证书将用户标识到远程 Web 服务。将这些文件导入到浏览器中可进行客户端身份验证,从而允许访问需要在简单密码之外进行身份验证的安全站点。
- 要点:先决条件
- 列表:您的设备上已存储了一个个人证书。
- 列表:打开证书管理器。
- 列表:选择 您的证书 选项卡,然后单击 导入。 图 14.3. 在 Firefox 中导入用于身份验证的个人证书
- 列表:从您的计算机导入合适的证书。
14.7. 查看 Thunderbird 中的证书
- 要点:通过访问 Thunderbird 中的证书管理器,用户可以审核存储的安全凭据。检查这些文件可确保电子邮件客户端包含加密通信的正确授权和个人密钥。
- 要点:流程
- 列表:在 Thunderbird 中,打开主菜单并选择 Preferences。 图 14.4. 从菜单中选择 Preferences
- 列表:在左侧面板中,选择 Privacy & Security 部分。 图 14.5. 选择 security 部分
- 列表:向下滚动到 证书 部分。
- 列表:点 Manage Certificates 打开 Certificate Manager。 图 14.6. 打开证书管理器
14.8. 在 Thunderbird 中导入证书
- 要点:导入证书颁发机构(CA)文件可让电子邮件客户端验证安全连接。添加这些机构可确保 Thunderbird 在数据交换期间信任邮件服务器提供的 SSL/TLS 证书。
- 要点:先决条件
- 列表:您的设备上已存储了一个 CA 证书。
- 列表:打开证书管理器。
- 列表:选择 Authorities 标签页,点 Import。 图 14.7. 在 Thunderbird 中导入 CA 证书
- 列表:选择下载的 CA 证书。
14.9. 在 Thunderbird 中编辑证书信任设置
- 要点:修改信任属性可控制 Thunderbird 如何为特定操作验证证书。调整这些设置,以明确授权标识邮件服务器或签署电子邮件消息的权威。
- 要点:先决条件
- 列表:您已成功导入了证书。
- 列表:打开证书管理器。
- 列表:在 Authorities 选项卡下,选择适当的证书,再单击 Edit Trust。
- 列表:编辑证书信任设置。 图 14.8. 编辑 Thunderbird 中的证书信任设置
14.10. 在 Thunderbird 中导入个人证书
- 要点:个人证书启用了 S/MIME 功能,用于签名和加密电子邮件。通过将这些密钥导入到个人存储中,客户端便可证明发送者的身份并解密传入的安全消息。
- 要点:先决条件
- 列表:您的设备上已存储了一个个人证书。
- 列表:打开证书管理器。
- 列表:在您的 证书选项卡 下,单击 导入。 图 14.9. 在 Thunderbird 中导入用于身份验证的个人证书
- 列表:从您的计算机导入所需的证书。
- 列表:关闭 Certificate Manager。
- 列表:打开主菜单并选择Account Settings。 图 14.10. 从菜单中选择 Account Settings
- 注意:注意 如果您忘记导入有效证书,您可以使用 Manage S/MIME certificate 选项直接打开 Certificate Manager。
完整目录
- 使用 SSSD、authselect 和 sssctl 配置身份验证和授权
- 对红帽文档提供反馈
- 第 1 章 系统身份验证简介
- 1.1. RHEL 中的身份验证方法
- 1.1.1. 系统上本地用户的身份验证类型
- 1.2. RHEL 中的单点登录概述
- 1.3. 可用于本地用户身份验证的服务
- 1.1. RHEL 中的身份验证方法
- 第 2 章 使用 authselect 配置用户身份验证
- 2.1. authselect 的作用
- 2.1.1. authselect 修改的文件和目录
- 2.2. 选择一个 authselect 配置文件
- 2.3. 创建并部署您自己的 authselect 配置集
- 2.4. 选择不使用 authselect
- 2.1. authselect 的作用
- 第 3 章 了解 SSSD 及其优势
- 3.1. SSSD 如何工作
- 3.2. 使用 SSSD 的好处
- 3.3. 基于每个客户端有多个 SSSD 配置文件
- 3.4. SSSD 的身份和验证供应商
- 3.4.1. 身份识别和验证提供者作为 SSSD 域
- 3.4.2. 代理提供者
- 3.4.3. 身份和身份验证提供者的可用组合
- 第 4 章 配置 SSSD 以使用 LDAP 并需要 TLS 身份验证
- 4.1. 使用 SSSD 的 OpenLDAP 客户端以加密的方式从 LDAP 检索数据
- 4.2. 配置 SSSD 以使用 LDAP 并需要 TLS 身份验证
- 第 5 章 配置 SSSD 以使用通用身份提供程序
- 5.1. 先决条件
- 5.2. SSSD 如何使用通用 IdP 进行身份验证
- 5.3. 在 Keycloak 的红帽构建中注册 SSSD 客户端
- 5.4. 在 Microsoft Entra ID 中注册 SSSD 客户端
- 5.5. 为通用 IdP 身份验证配置 SSSD
- 第 6 章 其他身份和身份验证供应商配置
- 6.1. 调整 SSSD 如何解释完整用户名
- 6.2. 调整 SSSD 如何打印完整用户名
- 6.3. 启用离线验证
- 6.4. 配置 DNS 服务发现
- 6.5. 配置简单的访问提供程序规则
- 6.6. 配置 SSSD 以应用 LDAP 访问过滤器
- 第 7 章 SSSD 客户端侧的视图
- 7.1. 覆盖 LDAP username 属性
- 7.2. 覆盖 LDAP UID 属性
- 7.3. 覆盖 LDAP GID 属性
- 7.4. 覆盖 LDAP 主目录属性
- 7.5. 覆盖 LDAP shell 属性
- 7.6. 列出主机上的覆盖
- 7.7. 删除本地覆盖
- 7.8. 导出和导入本地视图
- 第 8 章 配置 RHEL 主机以使用 AD 作为身份验证提供程序
- 第 9 章 使用 SSSD 报告主机的用户访问权限
- 9.1. 先决条件
- 9.2. sssctl 命令
- 9.3. 使用 sssctl 生成访问控制报告
- 9.4. 使用 sssctl 显示用户授权详情
- 第 10 章 使用 SSSD 查询域信息
- 10.1. 使用 sssctl 列出域
- 10.2. 使用 sssctl 验证域状态
- 第 11 章 使用 SSSD 限制 PAM 服务的域
- 11.1. PAM 简介
- 11.1.1. PAM 配置文件格式
- 11.2. 域访问限制选项
- 11.3. 限制 PAM 服务的域
- 11.4. 关于 PAM 配置文件
- 11.1. PAM 简介
- 第 12 章 在本地 SSSD 配置中消除拼写错误
- 第 13 章 IdM 中 SSSD 身份验证故障排除
- 13.1. 使用 SSSD 获取 IdM 用户信息时的数据流
- 13.2. 使用 SSSD 获取 AD 用户信息时的数据流
- 13.3. 以 IdM 中的 SSSD 用户身份进行身份验证时的数据流
- 13.4. 缩小身份验证问题的范围
- 13.5. SSSD 日志文件和日志记录级别
- 13.5.1. SSSD 日志文件用途
- 13.5.2. SSSD 日志记录级别
- 13.6. 在 sssd.conf 文件中为 SSSD 启用详细日志记录
- 13.7. 使用 sssctl 命令为 SSSD 启用详细的日志记录
- 13.8. 从 SSSD 服务收集调试日志,对 IdM 服务器的身份验证问题进行故障排除
- 13.9. 从 SSSD 服务收集调试日志,以对 IdM 客户端的身份验证问题进行故障排除
- 13.10. 跟踪 SSSD 后端中的客户端请求
- 13.11. 使用日志分析器工具跟踪客户端请求
- 13.11.1. 日志分析器工具如何工作
- 13.11.2. 运行日志分析器工具
- 13.12. 其他资源
- 第 14 章 为单点登录配置应用程序
- 14.1. 先决条件
- 14.2. 将 Firefox 配置为使用 Kerberos 进行单点登录
- 14.3. 查看 Firefox 中的证书
- 14.4. 在 Firefox 中导入 CA 证书
- 14.5. 在 Firefox 中编辑证书信任设置
- 14.6. 在 Firefox 中导入用于身份验证的个人证书
- 14.7. 查看 Thunderbird 中的证书
- 14.8. 在 Thunderbird 中导入证书
- 14.9. 在 Thunderbird 中编辑证书信任设置
- 14.10. 在 Thunderbird 中导入个人证书
