对于我的用户的一个子集/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 安全组中)。
感谢您更新您的问题,该建议经常被错误地采纳。
据我了解,您的要求是:
UID
/GID
查找所有用户必须针对本地文件运行。简而言之,是的,这是可能的,但它需要实际了解这些子系统的工作方式,而不是依赖在线 HOWTO。我将向您推荐我的现有答案作为入门。https://serverfault.com/a/538503/152073
NSS
是执行 UID 和 GID 查找的系统。如果您不修改/etc/nsswitch.conf
并告诉它使用ldap
or 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
意思是“如果我们到此为止并且此测试失败,则身份验证失败”。
这是最简单的方法,但是有问题:
如果您真的、真的、真的只需要针对特定用户列表对 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 安全组控制)可以通过以下两种方式之一实现:
auth
根据组成员资格跳过检查,请使用该查询。这与account
如果密码成功则拒绝用户不同!passwd
查找指向ldap
in /etc/nsswitch.conf
,但您会将ldap
行添加到group
. 必须配置安全组对象,以便通过应用适当的 objectClass(即posixGroup
)或配置 NSS 插件将其识别为一个 Unix 组,从而将其识别为 Unix 组。除非您有很强的 LDAP 背景,否则您可能只想传递这一点。一旦您成功地将内容配置到getent group
显示 AD 组的点,您可以根据该组的成员身份修改您的访问文件以成功。