编辑#1

编辑#1

我已经花了很多很多快乐的花费数小时探索集成 RHEL7 和 Active Directory 所需的 sssd 配置。其中很大一部分时间是查看这里关于 SSSD 和 AD 集成的许多帖子,特别是与 AD 中的本地 UID 查找有关的帖子。虽然这些帖子很有启发性,但似乎没有一个能涵盖我的场景。

我目前的问题是,我可以使用 Windows 用户通过 SSH 登录(使用 Windows 用户的密码登录“DOMAIN1\sales1”),SSSD 将正确验证 Windows 用户的状态。如果 Windows 用户被禁用,或者帐户已过期,则登录失败 - 一切正常。

如果我使用与 Windows 用户具有相同 ID 的 Linux 用户通过 SSH 登录(“sales1”,使用 Linux 用户的密码),SSSD 将在 AD 中查找并匹配 Windows 用户,但不是验证 AD 帐户。我已将 Linux 用户 UID 应用于 Windows 用户的 uidNumber 属性,以帮助 AD-linux 用户匹配,但我尝试的任何方法似乎都无法影响使用 Linux 用户凭据登录时 AD 用户状态验证。

sssd.conf

[sssd]
domains = domain1.local
config_file_version = 2
services = nss, pam
debug_level = 7


[domain/domain1.local]
ad_domain = domain1.local
krb5_realm = DOMAIN1.LOCAL
realmd_tags = manages-system joined-with-adcli 

id_provider = ad
auth_provider = ad
access_provider = ad
chpass_provider = ad

## We do NOT want offline caching of Windows authentications
cache_credentials = False
krb5_store_password_if_offline = False

## Found this ticket for sssd: https://fedorahosted.org/sssd/ticket/2851
## might be the GC lookup that is stopping expired users from being denied access
ad_enable_gc = False
ldap_id_mapping = False
override_homedir = /home/%u
default_shell = /bin/bash
debug_level = 8

nsswitch.conf

passwd:     files sss
shadow:     files sss
group:      files sss
hosts:      files dns
bootparams: nisplus [NOTFOUND=return] files
ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files sss
netgroup:   files sss
publickey:  nisplus
automount:  files
aliases:    files nisplus

pam.d/密码验证-ac

(由 authconfig 配置)

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        [default=1 success=ok] pam_localuser.so
auth        [success=done ignore=ignore default=die] pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     optional      pam_oddjob_mkhomedir.so umask=0077
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so

我尝试使用 SSSD 实现的目标可行吗?

编辑#1

我对 sssd 以及 AD 集成对 RHEL 系统的影响还很陌生,所以我认为我解决我的需求的方法完全是错误的。

我有一个现有的 RHEL 独立服务器,运行使用 Linux 用户身份验证(passwd、shadow、groups)的应用程序。我被要求在广告中验证应用程序用户,然后才允许他们访问 Linux 应用程序。该应用程序必须继续使用现有的 Linux 用户和组 ID,因为它目前无法处理长 Windows 用户或带有“@”的用户 ID,并且很大一部分 acl 行为都是建立在现有组上的。

我原来的方法(导致提出这个问题)是使用 sssd 和 realm 将 RHEL 加入 AD,然后(通过 pam/sssd )获取 linux 登录名来为 linux 用户找到匹配的 AD 用户,最有可能使用 windows 用户上的 POSIX 属性,并验证他们的 AD 帐户。

我认为我真正需要实现的是
- 在 AD 用户和使用该应用程序的本地 Linux 用户之间建立映射/关系

当存在这样的映射/关系时:
- 仅在登录时需要 AD 密码
- 验证 AD 帐户访问状态(帐户已启用/未过期/ GPO 登录权限/正确 AD 组的成员)
- 始终使用映射用户的本地用户名、uid 和 gid

我认为使用将允许我将 AD 用户登录限制到特定的 AD 组(除了上述应用程序用例之外,我们目前不希望 Windows 用户登录 Linux)。 我不确定将 AD 用户映射到现有 Linux 用户的最佳方法是什么。该应用程序当前创建并维护 Linux 用户帐户,因此任何解决方案都需要能够处理此问题。realm permit --groups [email protected]

从过去两周我读过的内容来看,我认为我的选择是:
- 使用 SSSD 本地覆盖来映射 AD 和 Linux 用户。
我没有这方面的经验,所以我依赖以下文章SSSD 本地覆盖作为可行的指标
- 依赖于在 AD 用户上定义的 POSIX 属性。
这确实意味着用户将在他们连接到的每个服务器上使用这些值,这些服务器也引用了 POSIX 属性。我不确定从长远来看这是否合理。测试表明,当用户登录 Linux 时,在 Windows 用户上定义的 uid、uidNumber 和 gidNumber 会使用这些值。这确实需要维护工作来确保在 AD 用户上定义这些值。-
安装 IPA 并使用 id 视图。
我没有安装或设置它的经验,但我的阅读表明这是一个可能的选择。使用此选项似乎确实会有额外的安装、配置和维护成本。

所以我认为我现在需要确认这些是否确实是唯一的选择,或者是否还有其他我不知道的选项,以及哪些可用选项最适合我的最低 AD 集成需求。

答案1

是的,这是正确的。事实上,SSSD 的设计决定是只关心 SSSD 本身能够服务的用户(getent passwd -s sss $someuser)。

如果您想继续使用具有远程密码的本地用户(但是为什么?sssd 有缓存……)您需要使用 id_provider=proxy 和远程 auth_provider。例如,请参阅我关于此主题的博客文章:https://jhrozek.wordpress.com/2015/07/17/get-rid-of-calling-manually-calling-kinit-with-sssds-help/

相关内容