本文主要是介绍使用 SSSD 进行网络用户身份验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 使用 SSSD 进行网络用户身份验证
- SSSD和Active Directory
- 先决条件、假设和要求
- 软件安装
- 加域
- SSSD配置
- 自动创建HOME目录
- 检查和验证
- Kerberos票证
- 已知的问题
- 参考
使用 SSSD 进行网络用户身份验证
SSSD 代表系统安全服务守护程序,它实际上是处理来自各种网络源的身份验证、授权以及用户和组信息的守护程序集合。它的核心是支持:
- Active Directory
- LDAP
- Kerberos
SSSD 提供 PAM 和 NSS 模块,将这些远程源集成到您的系统中,并允许远程用户登录并被识别为有效用户,包括组成员身份。为了允许断开连接操作,SSSD还可以缓存此信息,以便用户可以在发生网络故障或其他类似问题时继续登录。
本文将重点介绍部署 SSSD 的最常见方案。
SSSD和Active Directory
本节介绍如何使用 sssd 通过使用 sssd 的“ad”提供程序对用户登录进行身份验证。最后,Active Directory 用户将能够使用其 AD 凭据登录主机。组成员身份也将保持。
先决条件、假设和要求
- 本文不解释Active Directory,它是如何工作的,如何设置一个,或如何维护它。
- 本文假定已配置有效的 Active Directory 域,并且您有权访问凭据以将计算机加入该域。
- 域控制器充当域的权威 DNS 服务器。
- 域控制器是主 DNS 解析器(请查阅
systemd-resolve --status
) - 系统时间正确且同步,通过 chrony 或 ntp 等服务进行维护
- 此示例中使用的域是 yyaw.com 。
软件安装
安装以下软件包:
sssd-ad
sssd-tools
realmd
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 将拒绝启动!此配置文件的重点:
cache_credentials
:字面意思是缓存。这允许在无法访问AD服务器时登录home directory
:默认情况下/home/<user>@<domain>
。例如,AD 用户 tingting 将有一个主目录/home/tingting@yyaw.com
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 以了解现有的解决方法。
参考
- https://sssd.io/
作者: | 岬淢箫声 |
日期: | 2023年10月23日 |
版本: | 1.0 |
链接: | http://caowei.blog.csdn.net |
这篇关于使用 SSSD 进行网络用户身份验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!