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

对于/etc/passwd的一部分用户,我想configurationPAM(在Linux上)对LDAP服务器执行login密码检查部分,忽略这些用户实际上在/etc/passwd 。 特别是, /etc/passwd/etc/group应该在所有的情况下用于UID和GID,这样uidnumbergidnumber等属性不需要被添加到目录(这里是Active Directory)文档,如LDAP Implementation HOWTO 。

这甚至可能(没有自定义PAM模块开发)? 将属性添加到LDAP目录是不可行的。 我不是Active Directory域pipe理员,并且不断增加对该级别的介入超出了此项目的范围。 系统在大多数Windows服务器环境中运行的情况; 如果指定的Windows用户可以在有问题的系统上使用他们的AD密码,那将会很好。

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

感谢您更新您的问题,这个build议往往是错误的方式。

您的要求,因为我了解他们:

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

简短的版本是,这是可能的,但它需要真正了解这些子系统如何工作,而不是依靠在线HOWTO。 我将把你的现有答案引荐给你。 https://serverfault.com/a/538503/152073

NSS是执行UID和GID查找的系统。 如果你不修改/etc/nsswitch.conf并告诉它使用ldapsssd ,你的系统调用将依赖于本地文件。 LDAP的大部分PAM插件与LDAP的NSS插件共享一个configuration文件,但是如果NSS插件没有被NSS使用,这并不重要。

您只需要为特定用户执行此操作就更加棘手。 在auth required pam_unix.so之前,configurationPAM以尝试pam_ldap.so (或者pam_krb5.so ,或者pam_winbind.so …取决于您正在使用哪个版本) auth sufficient auth required pam_unix.sosufficient手段“够好,停在这里”。 required手段“如果我们得到这么多,这个testing失败,authentication失败”。

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

  1. 如果有人频繁地使用与他们的AD密码不匹配的本地密码进行authentication(即,他们没有像对其他系统经常对AD成功进行authentication)那么将导致AD密码locking。
  2. 如果您不希望某些用户使用有效的AD密码,那么这也不符合您的要求。

让我知道如果你确实真的只需要针对特定​​的用户列表进行LDAPauthentication。 这绝对是可能的,但是这会增加PAMconfiguration的复杂性,而且我已经在向你投入了相当多的信息。


按照要求扩展答案:

我build议严格控制对AD进行身份validation的人员是使用pam_access.so 。 为此,AD和Unix PAM模块必须按照相邻的顺序排列。 放置在他们面前的以下行:

 auth [success=ignore default=1] pam_access.so accessfile=/etc/security/somefile.conf noaudit 

success=ignore意味着“如果这个testing成功了,忽略这条线并照常进行”。 default=1意味着“在所有其他情况下,跳过下一行”。 您将需要创buildsomefile.conf并定义允许使用AD身份validation的用户列表。 查看access.conf的手册页获取更多详细信息。 您将定义此文件中所有用户的列表,或创build本地组并testing成员资格。 在所有情况下,第三个字段应该是ALL 。 (即+ : whatever : ALL

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

  1. 如果您的PAM模块允许您指定一个LDAP查询,将导致基于组成员身份跳过auth检查,请使用该模块。 这与通过account拒绝用户是不一样的,如果密码成功!
  2. 在GID查找中打击活动目录。 这意味着你将在/etc/nsswitch.conf中的ldap中查找点,但是你可以ldap行添加到group 。 必须configuration安全组对象,以便通过应用适当的objectClass(即posixGroup )或configurationNSS插件将其识别为一个,将其识别为Unix组。 除非你有很强的LDAP背景,否则你可能只想传递这个信息。

一旦您成功configuration了getent group显示AD​​组的点,您可以根据该组的成员资格修改您的访问文件以成功。