这是否可行(没有自定义PAM模块开发)?向LDAP目录添加属性是不可行的.我不是Active Directory域管理员,升级到该级别的参与超出了本项目的范围.系统在大多数Windows服务器的环境中运行;如果指定的Windows用户可以在相关系统上使用他们的AD密码,那将是很好的.
根据用户的不同,应该通过UNIX auth或LDAP auth检查用户,但不能同时检查两者.我可能不会向Active Directory中的用户添加属性,但可能会将它们添加到安全组(实际上还希望进一步要求LDAP用户位于特定的LDAP安全组中).
解决方法
您理解他们的要求:
>所有用户的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,在auth所需的pam_unix.so之前.足够的意思是“足够好,停在这里”.必需的意思是“如果我们到目前为止这个测试失败了,那么认证失败”.
这是最简单的方法,但存在问题:
>如果有人经常使用与其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. (即:无论如何:全部)
您的可选要求(使用AD安全组控制它)可以通过以下两种方式之一实现:
>如果您的PAM模块允许您指定将导致基于组成员身份跳过身份验证检查的LDAP查询,请使用该查询.如果密码成功,这与通过帐户拒绝用户不同!
>妥协GID查找命中活动目录.这意味着您将在/etc/nsswitch.conf中的ldap指向passwd查找,但是您可以将ldap行添加到group.必须配置安全组对象,以便通过应用适当的objectClass(即posixGroup)或配置NSS插件将其识别为一个来识别它为Unix组.除非你有强大的LDAP背景,否则你可能只想传递这个.