在过去的几天中,我已经build立了一些使用LDAPauthentication的Linux系统,一切正常,但在经过大量的研究之后,我仍然不能理解NSS和PAM。
举例:
NSS允许pipe理员指定将存储和searchauthentication文件,主机名和其他信息的来源列表
和
PAM是一组库,为应用程序和底层操作系统提供可configuration的身份validation平台
我不明白的是,PAM和NSS是如何工作和互动的。 在本书中 ,体系结构解释得非常好:我将PAMconfiguration为使用LDAP帐户的pam_ldap和本地帐户的pam_unix ,然后configurationnsswitch.conf以从本地文件和LDAP中获取信息。
如果我理解正确,LDAP将被使用两次:第一次使用pam_ldap ,然后使用本身从pam_unix调用的NSS。 是对的吗? LDAP真的使用两次? 但为什么我需要configurationNSS和PAM? 我的解释是,PAM执行不同于NSS的任务,并被其他程序使用。 但是,那么应该可以只使用NSS或者只使用PAM,就像我在这个页面上看到的一样。
所以我尝试了一下,我首先尝试从nsswitch.conf删除LDAP(并且authentication停止工作,就好像只有pam_ldap不足以完成这项工作)。 然后,我在NSS中重新启用了LDAP,并从PAMconfiguration中删除了它(这一次一切正常, 好像pam_ldap没用,NSS足以validation用户)。
有没有人能帮我澄清一下? 提前谢谢了。
我刚刚尝试了一些东西。 我再次删除所有pamconfiguration字段中的所有pam_ldap条目,并且还从nsswitch.conf删除了shadow: ldap 。 就像现在在所有系统中一样,只有行: passwd: ldap files和group: ldap files在nsswitch.conf group: ldap files 。 那么…与LDAP用户login完美的作品,这两行(加上/etc/ldap.conf )足以configurationLDAP身份validation。
从我的知识PAM独立于NSS,但我的testing显示它不是。 所以我问自己是否可以完全禁用NSS并只使用PAM?
它有助于在你的脑海里把事情分解成这样:
NSS – 一个基于模块的系统,用于控制各种操作系统级数据库在内存中的组装方式。 这包括(但不限于) passwd , group , shadow (这一点很重要)和hosts 。 UID查找使用passwd数据库,GID查找使用group数据库。
PAM – 基于模块的系统,允许基于服务的authentication和记帐。 与NSS不同,您不扩展现有的数据库; PAM模块可以使用任何他们喜欢的逻辑,尽pipeshelllogin仍然依赖于NSS的passwd和group数据库。 (你总是需要UID / GID查找)
最重要的区别是,PAM自己什么都不做。 如果应用程序没有链接到PAM库并对其进行调用,则PAM将永远不会被使用。 NSS是操作系统的核心,数据库对OS的正常运行是相当普遍的。
现在我们已经做到了,这里是曲线球:而pam_ldap是对LDAP进行身份validation的stream行方式,而不是唯一的方法。
shadow指向/etc/nsswitch.conf中的ldap服务,那么如果这些影子字段映射(特别是encryption的密码字段)的属性存在于LDAP中,并且允许login,则针对影子数据库运行的任何validation都将成功。
pam_unix.so可能会导致对LDAP进行身份validation,因为它会根据影子数据库进行身份validation。 (由NSSpipe理,可能指向LDAP) pam_sss.so ,它挂接了sssd ),那么可能会引用LDAP。 NSS在那里列举关于服务/用户的信息(你属于哪个组,你的主目录是哪里等)。 PAM决定如何处理这些信息。
如果您想使用LDAP进行身份validation ,则需要使用 pam_ldap。 如果你正在使用别的东西(本地帐户,Kerberos等),那么你可能不会。
所以他们做不同的事情。 NSS获取信息,PAM确定一旦获得信息,允许谁做什么。