如何使用 PAM 检查某些用户的 LDAP 密码,但始终使用本地文件中的 UID/GID?

Jas*_*aty 6 linux ldap pam

对于我的用户的一个子集/etc/passwd,我想配置PAM(在Linux上)做登录的密码确认部分对LDAP服务器,忽略这些用户实际上是被列为禁用的/etc/passwd。特别是,/etc/passwd并且/etc/group应该在所有情况下用于 UID 和 GID,以便不需要将诸如uidnumber和 之类的属性gidnumber添加到目录(此处为 Active Directory)中,这与LDAP 实现 HOWTO等文档中通常显示的内容不同。

这甚至可能吗(没有自定义 PAM 模块开发)?向 LDAP 目录添加属性是不可行的。我不是 Active Directory 域管理员,将参与升级到该级别超出了本项目的范围。这是系统在主要是 Windows 服务器的环境中运行的情况;如果指定的 Windows 用户可以在相关系统上使用他们的 AD 密码,那就太好了。

根据用户的不同,用户应该通过 UNIX auth 或 LDAP auth 进行检查,但不能同时进行。我可能不会向 Active Directory 中的用户添加属性,但可能会将它们添加到安全组(实际上还想进一步要求 LDAP 用户位于特定的 LDAP 安全组中)。

And*_*w B 9

感谢您更新您的问题,该建议经常被错误地采纳。

据我了解,您的要求是:

  • UID/GID查找所有用户必须针对本地文件运行。
  • 特定用户的身份验证必须首先尝试 LDAP (Active Directory)。

简而言之,是的,这是可能的,但它需要实际了解这些子系统的工作方式,而不是依赖在线 HOWTO。我将向您推荐我的现有答案作为入门。https://serverfault.com/a/538503/152073

NSS是执行 UID 和 GID 查找的系统。如果您不修改/etc/nsswitch.conf并告诉它使用ldapor sssd,您的系统调用将依赖于本地文件。大多数用于 LDAP 的 PAM 插件与用于 LDAP 的 NSS 插件共享一个配置文件,但是如果 NSS 插件没有被 NSS 使用,这将无关紧要。

您只对特定用户执行此操作的要求比较棘手。配置PAM尝试pam_ldap.so(或pam_krb5.so,或pam_winbind.so......取决于你正在使用)的auth sufficient,之前auth required pam_unix.sosufficient意思是“足够好,停在这里”。required意思是“如果我们到此为止并且此测试失败,则身份验证失败”。

这是最简单的方法,但是有问题:

  1. 如果有人经常使用与他们的 AD 密码不匹配的本地密码进行身份验证(即他们没有像其他系统那样经常成功地针对 AD 进行身份验证),则会导致 AD 密码锁定。
  2. 如果您不希望为某些用户考虑有效的 AD 密码,这也不能满足您的要求。

如果您真的、真的、真的只需要针对特定​​用户列表对 LDAP 进行身份验证,请告诉我。这绝对是可能的,但它会增加 PAM 配置的复杂性,我已经向您提供了相当多的信息。


根据要求扩展答案:

我对严格控制谁对 AD 进行身份验证的建议是使用pam_access.so. 为此,AD 和 Unix PAM 模块必须相邻,并按此顺序排列。将以下行放在它们前面:

auth    [success=ignore default=1] pam_access.so accessfile=/etc/security/somefile.conf noaudit
Run Code Online (Sandbox Code Playgroud)

success=ignore意思是“如果这个测试成功,忽略这一行并照常进行”。default=1意思是“在所有其他情况下,跳过下一行”。您将需要创建somefile.conf和定义允许使用 AD 身份验证的用户列表。access.conf有关更多详细信息,请查看联机帮助页。您将在此文件中定义所有用户的列表,或者创建一个本地组并测试成员资格。在所有情况下,第三个字段应该是ALL。(即+ : whatever : ALL

您的可选要求(使用 AD 安全组控制)可以通过以下两种方式之一实现:

  1. 如果您的 PAM 模块允许您指定一个 LDAP 查询,该查询将导致auth根据组成员资格跳过检查,请使用该查询。这与account如果密码成功则拒绝用户不同!
  2. 在 GID 查找命中活动目录时妥协。这意味着您将passwd查找指向ldapin /etc/nsswitch.conf,但您会将ldap行添加到group. 必须配置安全组对象,以便通过应用适当的 objectClass(即posixGroup)或配置 NSS 插件将其识别为一个 Unix 组,从而将其识别为 Unix 组。除非您有很强的 LDAP 背景,否则您可能只想传递这一点。

一旦您成功地将内容配置到getent group显示 AD 组的点,您可以根据该组的成员身份修改您的访问文件以成功。