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

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

对于 中的部分用户/etc/passwd,我想配置 PAM(在 Linux 上)以针对 LDAP 服务器执行登录的密码检查部分,而忽略这些用户实际上在 中被列为已禁用/etc/passwd。具体来说,/etc/passwd/etc/group在所有情况下都应用作 UID 和 GID,这样就不需要将uidnumber和等属性gidnumber添加到目录(此处为 Active Directory)中,这与文档中通常显示的内容不同,例如LDAP 实施指南

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

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

答案1

感谢您更新您的问题,这个建议常常被误解。

据我了解,您的要求是:

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

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

NSS是执行 UID 和 GID 查找的系统。如果您不修改/etc/nsswitch.conf并告诉它使用ldapsssd,您的系统调用将依赖于本地文件。大多数 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

success=ignore表示“如果此测试成功,则忽略此行并正常进行”。default=1表示“在所有其他情况下,跳过下一行”。您需要创建somefile.conf并定义允许使用 AD 身份验证的用户列表。查看手册页以access.conf了解更多详细信息。您可以在此文件中定义所有用户的列表,或者创建本地组并测试成员资格。在所有情况下,第三个字段应为ALL。(即+ : whatever : ALL

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

  1. 如果您的 PAM 模块允许您指定 LDAP 查询,该查询将导致基于组成员身份的检查被跳过,请使用该查询。这与如果密码成功则auth拒绝用户不同!account
  2. 妥协 GID 查找命中活动目录。这意味着您将有查找passwd指向,但您ldap/etc/nsswitch.confldap行添加到group。必须配置安全组对象,以便可以将其识别为 Unix 组,方法是应用适当的 objectClass(即posixGroup)或配置 NSS 插件以将其识别为 Unix 组。除非您在 LDAP 方面有深厚的背景,否则您可能只想忽略这一点。

一旦您成功配置了显示 AD 组的点getent group,您就可以根据该组的成员身份修改访问文件以取得成功。

相关内容