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_name或 NetBIOS_name
\user_name
。
要调整 SSSD 如何解释完整用户名:
- 打开
/etc/sssd/sssd.conf
文件: - 使用
re_expression
选项定义自定义正则表达式。- 要为所有域全局定义正则表达式,请将
re_expression
添加到sssd.conf
的[sssd]
部分。 - 要单独为特定域定义正则表达式,请将
re_expression
添加到sssd.conf
的对应域部分。
例如,要为 LDAP 域配置正则表达式:
[domain/LDAP]
[... file truncated ...]
re_expression = (?P<domain>[^\\]*?)\\?(?P<name>[^\\]+$)
详情请查看
re_expression
man page 的 SPECIAL SECTIONS
和 DOMAIN 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 显示完整用户名的格式:
- 打开
/etc/sssd/sssd.conf
文件: - 使用
full_name_format
选项定义完整用户名格式的扩展:- 要为所有域全局定义扩展,请将
full_name_format
添加到sssd.conf
的[sssd]
部分。 - 要单独为特定域定义扩展,请将
full_name_format
添加到sssd.conf
的对应域部分。
详情请查看
full_name_format
man page 的 SPECIAL SECTIONS
和 DOMAIN SECTIONS
部分中的描述。sssd.conf(5)
在某些名称配置中,SSSD 可能会条带名称的域组件,这会导致身份验证错误。因此,如果您将
full_name_format
设置为非标准值,系统会提示您将其改为更标准的格式。
7.4.2. 启用离线身份验证
默认情况下,SSSD 不缓存用户凭证。在处理身份验证请求时,SSSD 始终联系身份提供程序。如果提供商不可用,用户身份验证会失败。
重要
SSSD 永远不会以纯文本形式缓存密码。它仅存储密码的哈希。
要确保即使在身份提供程序不可用时用户也可以进行身份验证,启用凭证缓存:
- 打开
/etc/sssd/sssd.conf
文件: - 在 domain 部分,添加
cache_credentials = true
设置:[domain/domain_name]
cache_credentials = true
- 可选,但推荐.为 SSSD 允许在身份提供程序不可用的情况下进行离线身份验证的时间限制。
- 配置 PAM 服务以使用 SSSD。请参阅 第 7.5.2 节 “配置服务:PAM”。
- 使用
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
- 打开
/etc/sssd/sssd.conf
文件: - 将主服务器值设置为
_srv_
。对于 LDAP 供应商,主服务器使用ldap_uri
选项设置:[domain/domain_name] id_provider = ldap
ldap_uri = _srv_
- 设置服务类型,在密码更改供应商中启用服务发现:
[domain/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
选项指定类型。 - 可选。默认情况下,SSSD 会尝试查找 IPv4 地址。如果尝试失败,SSSD 会尝试查找 IPv6 地址。要自定义此行为,使用
lookup_family_order
选项。详情请查看 sssd.conf(5) man page。 - 对于您要使用服务发现的每个服务,在 DNS 服务器中添加 DNS 记录:
_service._protocol._domain TTL priority weight port host_name
7.4.4. 使用 简单
访问提供程序定义访问控制
simple
访问提供程序会基于用户名或组允许或拒绝访问。它可让您限制对特定机器的访问。
例如,在公司笔记本电脑中,您可以使用
简单
访问提供程序限制对特定用户或特定组的访问。即使他们针对配置的身份验证提供程序成功进行身份验证,也不允许其他用户或组登录。
配置 简单的
访问提供程序规则
- 打开
/etc/sssd/sssd.conf
文件: - 将
access_provider
选项设置为simple
:[domain/domain_name]
access_provider = simple
- 为用户定义访问控制规则。选择以下任意一项:
- 要允许用户访问用户,使用
simple_allow_users
选项。 - 要拒绝对用户的访问,使用
simple_deny_users
选项。重要因此,允许访问特定用户通常被认为比拒绝对特定用户的访问更安全。如果您拒绝对特定用户的访问,则会自动允许对所有其他用户的访问。
- 定义组的访问控制规则。选择以下任意一项:
- 要允许访问组,使用
simple_allow_groups
选项。 - 要拒绝对组的访问,使用
simple_deny_groups
选项。重要因此,允许访问特定组通常被认为比拒绝对特定组的访问更安全。如果您拒绝访问特定组,则会自动允许访问其他任何组。
以下示例允许访问
user
1、user2
和 group1
的成员,同时拒绝对所有其他用户的访问。
[domain/domain_name] access_provider = simplesimple_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 访问过滤器
- 打开
/etc/sssd/sssd.conf
文件: - 在
[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 也可以通过条目中的
authorizedService
或 host
属性检查结果。实际上,所有选项 - LDAP 过滤器、authorizedService
和 host
- 可以根据用户条目和配置进行评估。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 中列出了其他访问控制参数。