Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

7.4. 身份和身份验证提供程序的其他配置

7.4.1. 调整用户名格式

7.4.1.1. 定义 Parsing Full User Names 的正则表达式

SSSD 将完整的用户名字符串解析到用户名和域组件中。默认情况下,SSSD 根据 Python 语法中的以下正则表达式,以 user_name@domain_name 格式解释完整的用户名:
(?P<name>[^@]+)@?(?P<domain>[^@]*$)
注意
对于身份管理和 Active Directory 提供程序,默认用户名格式为user_name @domain_nameNetBIOS_name \user_name
要调整 SSSD 如何解释完整用户名:
  1. 打开 /etc/sssd/sssd.conf 文件:
  2. 使用 re_expression 选项定义自定义正则表达式。
    1. 要为所有域全局定义正则表达式,请将 re_expression 添加到 sssd.conf[sssd] 部分。
    2. 要单独为特定域定义正则表达式,请将 re_expression 添加到 sssd.conf 的对应域部分。
例如,要为 LDAP 域配置正则表达式:
[domain/LDAP]
[... file truncated ...]
re_expression = (?P<domain>[^\\]*?)\\?(?P<name>[^\\]+$)
详情请查看 re_expression man page 的 SPECIAL SECTIONSDOMAIN SECTIONS 部分中的描述。sssd.conf(5)

7.4.1.2. 定义 SSSD 如何打印完整用户名

如果在 /etc/sssd/sssd.conf 文件中启用了 use_fully_qualified_names 选项,SSSD 会默认根据以下扩展以 name@domain 格式打印完整的用户名:
%1$s@%2$s
注意
如果没有为可信域设置 use_fully_qualified_names,或者明确设置为 false,则只打印用户名,且没有域组件。
要调整 SSSD 显示完整用户名的格式:
  1. 打开 /etc/sssd/sssd.conf 文件:
  2. 使用 full_name_format 选项定义完整用户名格式的扩展:
    1. 要为所有域全局定义扩展,请将 full_name_format 添加到 sssd.conf[sssd] 部分。
    2. 要单独为特定域定义扩展,请将 full_name_format 添加到 sssd.conf 的对应域部分。
详情请查看 full_name_format man page 的 SPECIAL SECTIONSDOMAIN SECTIONS 部分中的描述。sssd.conf(5)
在某些名称配置中,SSSD 可能会条带名称的域组件,这会导致身份验证错误。因此,如果您将 full_name_format 设置为非标准值,系统会提示您将其改为更标准的格式。

7.4.2. 启用离线身份验证

默认情况下,SSSD 不缓存用户凭证。在处理身份验证请求时,SSSD 始终联系身份提供程序。如果提供商不可用,用户身份验证会失败。
重要
SSSD 永远不会以纯文本形式缓存密码。它仅存储密码的哈希。
要确保即使在身份提供程序不可用时用户也可以进行身份验证,启用凭证缓存:
  1. 打开 /etc/sssd/sssd.conf 文件:
  2. 在 domain 部分,添加 cache_credentials = true 设置:
    [domain/domain_name]
    cache_credentials = true
  3. 可选,但推荐.为 SSSD 允许在身份提供程序不可用的情况下进行离线身份验证的时间限制。
    1. 配置 PAM 服务以使用 SSSD。请参阅 第 7.5.2 节 “配置服务:PAM”
    2. 使用 offline_credentials_expiration 选项指定时间限制。例如,指定用户自上次成功登录以来能够脱机验证 3 天:
      [pam]
      offline_credentials_expiration = 3
有关 offline_credentials_expiration 的详情,请查看 sssd.conf(5) man page。

7.4.3. 配置 DNS 服务发现

如果没有在 /etc/sssd/sssd.conf 文件中明确定义身份或身份验证服务器,SSSD 可以使用 DNS 服务发现动态发现服务器 [1].
例如,如果 sssd.conf 包含 id_provider = ldap 设置,但 ldap_uri 选项没有指定任何主机名或 IP 地址,SSSD 会使用 DNS 服务发现来动态发现服务器。
注意
SSSD 无法动态发现备份服务器,只有主服务器。

为 DNS 服务发现配置 SSSD

  1. 打开 /etc/sssd/sssd.conf 文件:
  2. 将主服务器值设置为 _srv_。对于 LDAP 供应商,主服务器使用 ldap_uri 选项设置:
    [domain/domain_name]
    id_provider = ldap
    ldap_uri = _srv_
  3. 设置服务类型,在密码更改供应商中启用服务发现:
    [domain/domain_name]
    id_provider = ldap
    ldap_uri = _srv_
    
    chpass_provider = ldap
    ldap_chpass_dns_service_name = ldap
  4. 可选。默认情况下,服务发现使用系统主机名的域部分作为域名。要使用不同的 DNS 域,在 dns_discovery_domain 选项指定域名。
  5. 可选。默认情况下,服务发现扫描 LDAP 服务类型。要使用不同的服务类型,在 ldap_dns_service_name 选项指定类型。
  6. 可选。默认情况下,SSSD 会尝试查找 IPv4 地址。如果尝试失败,SSSD 会尝试查找 IPv6 地址。要自定义此行为,使用 lookup_family_order 选项。详情请查看 sssd.conf(5) man page。
  7. 对于您要使用服务发现的每个服务,在 DNS 服务器中添加 DNS 记录:
    _service._protocol._domain TTL priority weight port host_name

7.4.4. 使用 简单 访问提供程序定义访问控制

simple 访问提供程序会基于用户名或组允许或拒绝访问。它可让您限制对特定机器的访问。
例如,在公司笔记本电脑中,您可以使用 简单 访问提供程序限制对特定用户或特定组的访问。即使他们针对配置的身份验证提供程序成功进行身份验证,也不允许其他用户或组登录。

配置 简单的 访问提供程序规则

  1. 打开 /etc/sssd/sssd.conf 文件:
  2. access_provider 选项设置为 simple
    [domain/domain_name]
    access_provider = simple
  3. 为用户定义访问控制规则。选择以下任意一项:
    1. 要允许用户访问用户,使用 simple_allow_users 选项。
    2. 要拒绝对用户的访问,使用 simple_deny_users 选项。
      重要
      因此,允许访问特定用户通常被认为比拒绝对特定用户的访问更安全。如果您拒绝对特定用户的访问,则会自动允许对所有其他用户的访问。
  4. 定义组的访问控制规则。选择以下任意一项:
    1. 要允许访问组,使用 simple_allow_groups 选项。
    2. 要拒绝对组的访问,使用 simple_deny_groups 选项。
      重要
      因此,允许访问特定组通常被认为比拒绝对特定组的访问更安全。如果您拒绝访问特定组,则会自动允许访问其他任何组。
以下示例允许访问 user 1、user2group1 的成员,同时拒绝对所有其他用户的访问。
[domain/domain_name]
access_provider = simple
simple_allow_users = user1, user2
simple_allow_groups = group1
详情请查看 sssd-simple(5) man page。

7.4.5. 使用 LDAP 访问过滤器定义访问控制

当在 /etc/sssd/sssd.conf 中设置 access_provider 选项时,SSSD 会使用指定的访问提供程序来评估哪些用户被授予系统访问权限。如果您正在使用的访问提供程序是 LDAP 供应商类型的扩展,您也可以指定用户必须匹配的 LDAP 访问控制过滤器才能允许访问该系统。
例如,当使用 Active Directory(AD)服务器作为访问提供程序时,您可以将 Linux 系统的访问权限限制为指定的 AD 用户。与指定过滤器不匹配的所有其他用户将被拒绝访问。
注意
访问过滤器仅应用于 LDAP 用户条目。因此,在嵌套组上使用这种类型的访问控制可能无法正常工作。要在嵌套组中应用访问控制,请参阅 第 7.4.4 节 “使用 简单 访问提供程序定义访问控制”
重要
使用脱机缓存时,SSSD 会检查用户最近的在线登录尝试是否成功。在最近一次在线登录期间成功登录的用户仍将能够脱机登录,即使他们与访问过滤器不匹配。

配置 SSSD 以应用 LDAP 访问过滤器

  1. 打开 /etc/sssd/sssd.conf 文件:
  2. [domain] 部分中,指定 LDAP 访问控制过滤器。
    • 对于 LDAP 访问供应商,使用 ldap_access_filter 选项。详情请查看 sssd-ldap(5) man page。
    • 对于 AD 访问供应商,使用 ad_access_filter 选项。详情请查看 sssd-ad(5) man page。
    例如,要只允许访问属于 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=*))
SSSD 也可以通过条目中的 authorizedServicehost 属性检查结果。实际上,所有选项 - LDAP 过滤器、authorizedServicehost - 可以根据用户条目和配置进行评估。ldap_access_order 参数列出了要使用的所有访问控制方法,以符合应如何评估它们。
[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
可以自定义用于评估授权服务或允许的主机的用户条目中的属性。sssd-ldap (5) man page 中列出了其他访问控制参数。


[1] DNS 服务发现使应用程序能够检查给定域中特定类型的特定服务的 SRV 记录,然后返回与所需类型匹配的服务器。DNS 服务发现在 RFC 2782 中定义。