对于 中的部分用户/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
并告诉它使用ldap
或sssd
,您的系统调用将依赖于本地文件。大多数 LDAP 的 PAM 插件与 LDAP 的 NSS 插件共享一个配置文件,但如果 NSS 未使用 NSS 插件,那就无关紧要了。
仅对特定用户执行此操作的要求比较棘手。将 PAM 配置为尝试pam_ldap.so
(或pam_krb5.so
,或pam_winbind.so
...取决于您使用的)作为auth sufficient
,紧接在之前auth required pam_unix.so
。sufficient
表示“足够好,在此停止”。required
表示“如果我们到了这一步并且此测试失败,则身份验证失败”。
这是最简单的方法,但是存在问题:
- 如果有人频繁使用与其 AD 密码不匹配的本地密码进行身份验证(即,他们无法像在其他系统上那样成功地通过 AD 身份验证),则会导致 AD 密码锁定。
- 如果您不希望为某些用户考虑有效的 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 安全组控制)可以通过以下两种方式之一实现:
- 如果您的 PAM 模块允许您指定 LDAP 查询,该查询将导致基于组成员身份的检查被跳过,请使用该查询。这与如果密码成功则
auth
拒绝用户不同!account
- 妥协 GID 查找命中活动目录。这意味着您将有查找
passwd
指向,但您ldap
/etc/nsswitch.conf
会将ldap
行添加到group
。必须配置安全组对象,以便可以将其识别为 Unix 组,方法是应用适当的 objectClass(即posixGroup
)或配置 NSS 插件以将其识别为 Unix 组。除非您在 LDAP 方面有深厚的背景,否则您可能只想忽略这一点。
一旦您成功配置了显示 AD 组的点getent group
,您就可以根据该组的成员身份修改访问文件以取得成功。