使用 SSSD 进行网络用户身份验证

2023-10-24 01:20

本文主要是介绍使用 SSSD 进行网络用户身份验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 使用 SSSD 进行网络用户身份验证
    • SSSD和Active Directory
      • 先决条件、假设和要求
      • 软件安装
      • 加域
    • SSSD配置
      • 自动创建HOME目录
    • 检查和验证
  • Kerberos票证
  • 已知的问题
    • 参考

使用 SSSD 进行网络用户身份验证

SSSD 代表系统安全服务守护程序,它实际上是处理来自各种网络源的身份验证、授权以及用户和组信息的守护程序集合。它的核心是支持:

  1. Active Directory
  2. LDAP
  3. Kerberos

SSSD 提供 PAM 和 NSS 模块,将这些远程源集成到您的系统中,并允许远程用户登录并被识别为有效用户,包括组成员身份。为了允许断开连接操作,SSSD还可以缓存此信息,以便用户可以在发生网络故障或其他类似问题时继续登录。

本文将重点介绍部署 SSSD 的最常见方案。

SSSD和Active Directory

本节介绍如何使用 sssd 通过使用 sssd 的“ad”提供程序对用户登录进行身份验证。最后,Active Directory 用户将能够使用其 AD 凭据登录主机。组成员身份也将保持。

先决条件、假设和要求

  1. 本文不解释Active Directory,它是如何工作的,如何设置一个,或如何维护它。
  2. 本文假定已配置有效的 Active Directory 域,并且您有权访问凭据以将计算机加入该域。
  3. 域控制器充当域的权威 DNS 服务器。
  4. 域控制器是主 DNS 解析器(请查阅 systemd-resolve --status
  5. 系统时间正确且同步,通过 chrony 或 ntp 等服务进行维护
  6. 此示例中使用的域是 yyaw.com 。

软件安装

安装以下软件包:

  1. sssd-ad
  2. sssd-tools
  3. realmd
  4. adcli

加域

我们将使用 realm realmd 软件包中的命令加入域并创建 sssd 配置。让我们验证域是否可通过 DNS 发现,运行:sudo realm -v discover yyaw.com,结果如下:

 * Resolving: _ldap._tcp.yyaw.com* Performing LDAP DSE lookup on: 192.1.4.9* Successfully discovered: yyaw.com
yyaw.comtype: kerberosrealm-name: yyaw.comdomain-name: yyaw.comconfigured: noserver-software: active-directoryclient-software: sssdrequired-package: sssd-toolsrequired-package: sssdrequired-package: libnss-sssrequired-package: libpam-sssrequired-package: adclirequired-package: samba-common-bin

这将执行多项检查并确定与 sssd 一起使用的最佳软件堆栈。SSSD 可以通过 PackageKit 安装缺少的软件包,但我们之前已经安装了它们。现在让我们加入域:sudo realm join yyaw.com。此命令没有消息输出。如果对此命令的内幕比较好奇,可以增加-v参数,输出如下:

 * Resolving: _ldap._tcp.yyaw.com* Performing LDAP DSE lookup on: 192.1.4.9* Successfully discovered: yyaw.com
Password for Administrator: * Unconditionally checking packages* Resolving required packages* LANG=C /usr/sbin/adcli join --verbose --domain yyaw.com --domain-realm yyaw.com --domain-controller 192.1.4.9 --login-type user --login-user Administrator --stdin-password* Using domain name: yyaw.com* Calculated computer account name from fqdn: AD-CLIENT* Using domain realm: yyaw.com* Sending NetLogon ping to domain controller: 192.1.4.9* Received NetLogon info from: nfs.yyaw.com* Wrote out krb5.conf snippet to /var/cache/realmd/adcli-krb5-hUfTUg/krb5.d/adcli-krb5-conf-hv2kzi* Authenticated as user: Administrator@yyaw.com* Looked up short domain name: AD1* Looked up domain SID: S-1-5-21-2660147319-831819607-3409034899* Using fully qualified name: ad-client.yyaw.com* Using domain name: yyaw.com* Using computer account name: AD-CLIENT* Using domain realm: yyaw.com* Calculated computer account name from fqdn: AD-CLIENT* Generated 120 character computer password* Using keytab: FILE:/etc/krb5.keytab* Found computer account for AD-CLIENT$ at: CN=AD-CLIENT,CN=Computers,DC=yyaw,DC=com* Sending NetLogon ping to domain controller: 192.1.4.9* Received NetLogon info from: nfs.yyaw.com* Set computer password* Retrieved kvno '3' for computer account in directory: CN=AD-CLIENT,CN=Computers,DC=yyaw,DC=com* Checking RestrictedKrbHost/ad-client.yyaw.com*    Added RestrictedKrbHost/ad-client.yyaw.com* Checking RestrictedKrbHost/AD-CLIENT*    Added RestrictedKrbHost/AD-CLIENT* Checking host/ad-client.yyaw.com*    Added host/ad-client.yyaw.com* Checking host/AD-CLIENT*    Added host/AD-CLIENT* Discovered which keytab salt to use* Added the entries to the keytab: AD-CLIENT$@yyaw.com: FILE:/etc/krb5.keytab* Added the entries to the keytab: host/AD-CLIENT@yyaw.com: FILE:/etc/krb5.keytab* Added the entries to the keytab: host/ad-client.yyaw.com@yyaw.com: FILE:/etc/krb5.keytab* Added the entries to the keytab: RestrictedKrbHost/AD-CLIENT@yyaw.com: FILE:/etc/krb5.keytab* Added the entries to the keytab: RestrictedKrbHost/ad-client.yyaw.com@yyaw.com: FILE:/etc/krb5.keytab* /usr/sbin/update-rc.d sssd enable* /usr/sbin/service sssd restart* Successfully enrolled machine in realm

默认情况下,realm将使用域的Administrator帐户来请求加入。如果您需要使用其他帐户,请使用 -U 该选项将其传递给该工具。加入域的另一种流行方式是使用 OTP 或一次性密码令牌。为此,请使用该 --one-time-password 选项。

SSSD配置

realm工具已经负责创建 sssd 配置、添加 pam 和 nss 模块以及启动必要的服务。/etc/sssd/sssd.conf文件已存在如下内容:

[sssd]
domains = yyaw.com
config_file_version = 2
services = nss, pam[domain/yyaw.com]
default_shell = /bin/bash
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = yyaw.com
realmd_tags = manages-system joined-with-adcli 
id_provider = ad
fallback_homedir = /home/%u@%d
ad_domain = yyaw.com
use_fully_qualified_names = True
ldap_id_mapping = True
access_provider = ad

我们要记住的非常重要的一点是,此文件必须具有权限 0600 且所有权为 root:root,否则 sssd 将拒绝启动!此配置文件的重点:

  1. cache_credentials:字面意思是缓存。这允许在无法访问AD服务器时登录
  2. home directory:默认情况下 /home/<user>@<domain> 。例如,AD 用户 tingting 将有一个主目录 /home/tingting@yyaw.com
  3. use_fully_qualified_names:用户的形式将是user@domain,而不仅仅是用户。仅当您确定没有其他域将通过几种可能的信任关系之一加入 AD 林时,才应更改此设置。

自动创建HOME目录

该工具 realm 没有为我们做的是 pam_mkhomedir 设置 ,以便网络用户在登录时可以获得主目录。剩余的步骤可以通过运行以下命令来完成:

sudo pam-auth-update --enable mkhomedir

检查和验证

现在,您应该能够获取有关 AD 用户的信息。在此示例中,tingting Smith 是 AD 用户,运行命令:getent passwd tingting@yyaw.com,应当看到输出:tingting@yyaw.com:*:1725801106:1725800513:tingting Smith:/home/tingting@yyaw.com:/bin/bash。再检查组权限:groups tingting@yyaw.com,结果输出:tingting@yyaw.com : domain users@yyaw.com engineering@yyaw.com。如果您刚刚更改了用户的组成员身份,则由于缓存,sssd 可能需要一段时间才能注意到。最后,我们尝试登录怎么样,运行:sudo login,结果:

ad-client login: tingting@yyaw.com
Password: 
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-24-generic x86_64)
...
Creating directory '/home/tingting@yyaw.com'.
tingting@yyaw.com@ad-client:~$ 

请注意主目录是如何自动创建的。您也可以使用 ssh,但请注意,由于多个 @ 符号,该命令看起来有点有趣。运行:ssh tingting@yyaw.com@192.1.4.8,结果:

Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-24-generic x86_64)
(...)
Last login: Thu Oct 16 21:22:55 2023
tingting@yyaw.com@ad-client:~$ 

在 ssh 示例中,使用了公钥身份验证,因此不需要密码。请记住,默认情况下,在 中 /etc/ssh/sshd_config 禁用 ssh 密码身份验证。

Kerberos票证

如果安装 krb5-user ,则 AD 用户还将在登录时获得 kerberos 票证。运行:klist,结果:

Ticket cache: FILE:/tmp/krb5cc_1725801106_9UxVIz
Default principal: tingting@yyaw.comValid starting     Expires            Service principal
04/16/20 21:32:12  04/17/20 07:32:12  krbtgt/yyaw.com@yyaw.comrenew until 04/17/20 21:32:12

在安装 krb5-user 时应该不会有进一步的配置提示,因为realm已提前配置。让我们使用 smbclient 使用 kerberos 身份验证进行测试,以列出域控制器的共享。运行:smbclient -k -L nfs.yyaw.com,结果:

	Sharename       Type      Comment---------       ----      -------ADMIN$          Disk      Remote AdminC$              Disk      Default shareIPC$            IPC       Remote IPCNETLOGON        Disk      Logon server share SYSVOL          Disk      Logon server share 
SMB1 disabled -- no workgroup available
Ticket cache: FILE:/tmp/krb5cc_1725801106_9UxVIz
Default principal: tingting@yyaw.comValid starting     Expires            Service principal
10/16/23 21:32:12  10/17/23 07:32:12  krbtgt/yyaw.com@yyaw.comrenew until 10/17/23 21:32:12
10/16/23 21:32:21  10/17/23 07:32:12  cifs/nfs.yyaw.com@yyaw.com

已知的问题

登录加入Active Directory域的系统时, sssd (负责此集成的软件包)将默认尝试应用组策略。在某些情况下,如果缺少特定策略,登录将被拒绝。这在BUG #1934997 中被跟踪。在修复程序可用之前,请参阅该错误报告中的注释 #5 以了解现有的解决方法。

参考

  1. https://sssd.io/
作者:岬淢箫声
日期:2023年10月23日
版本:1.0
链接:http://caowei.blog.csdn.net

这篇关于使用 SSSD 进行网络用户身份验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/271729

相关文章

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项