Col*_*RiX 23 ldap authentication pam nss
在过去的几天里,我设置了一些带有 LDAP 身份验证的 Linux 系统,一切正常,但是经过大量研究,我仍然无法真正理解 NSS 和 PAM。
引用:
NSS 允许管理员指定将存储和搜索身份验证文件、主机名和其他信息的源列表
和
PAM 是一组库,为应用程序和底层操作系统提供可配置的身份验证平台
我不明白的是 PAM 和 NSS 如何一起工作和交互。在这本书的架构是解释得很好:我PAM配置为使用pam_ldapLDAP的帐户和pam_unix本地帐户,然后我配置nsswitch.conf来从本地文件和LDAP信息。
如果我理解正确,LDAP 使用了两次:首先pam_ldap由 NSS使用,然后由 NSS 调用,它本身从pam_unix. 那正确吗?LDAP 真的使用了两次吗?但是为什么我需要同时配置 NSS 和 PAM?我的解释是 PAM 执行与 NSS 不同的任务,它被其他程序使用。但是,正如我在本页中所读到的那样,应该可以仅使用 NSS 或仅使用 PAM 。
所以我进行了一些试验,我首先尝试从nsswitch.conf(并且身份验证停止工作,好像只有 pam_ldap 不足以完成这项工作)中删除 LDAP 。然后我在 NSS 中重新启用了 LDAP,并从 PAM 配置中删除了它(这次一切正常,好像pam_ldap没用一样,而且 NSS 足以验证用户的身份)。
有没有人可以帮我澄清一下?提前谢谢了。
我现在刚刚尝试了一些东西。我再次删除了所有pam_ldappam 配置字段中的所有条目,并且还shadow: ldap从nsswitch.conf. 由于现在所有的系统,只有行:passwd: ldap files和group: ldap files中nsswitch.conf。嗯……使用 LDAP 用户登录工作完美,这两行(加号/etc/ldap.conf)足以配置 LDAP 身份验证。
根据我的知识 PAM 独立于 NSS,但我的测试表明它不是。所以我问自己是否可以完全禁用 NSS 并仅使用 PAM?
And*_*w B 28
它有助于在你的脑海中分解这样的事情:
NSS - 基于模块的系统,用于控制如何在内存中组装各种操作系统级数据库。这包括(但不限于)passwd、group、shadow(这一点很重要要注意)和hosts。UID 查找使用passwd数据库,GID 查找使用group数据库。
PAM - 基于模块的系统,用于允许基于服务的身份验证和记帐。与 NSS 不同,您不是扩展现有数据库;PAM 模块可以使用他们喜欢的任何逻辑,尽管 shell 登录仍然依赖于NSSpasswd和group数据库。(你总是需要 UID/GID 查找)
重要的区别在于 PAM 本身什么都不做。如果应用程序不链接到 PAM 库并调用它,则永远不会使用 PAM。NSS 是操作系统的核心,数据库对于操作系统的正常运行来说是无处不在的。
现在我们已经解决了这个问题,下面是曲线球:虽然 pam_ldap 是针对 LDAP 进行身份验证的流行方法,但它不是唯一的方法。
shadow指向 内的 ldap 服务/etc/nsswitch.conf,如果这些影子字段映射(特别是加密的密码字段)的属性存在于 LDAP 中并且允许登录,则针对影子数据库运行的任何身份验证都将成功。
pam_unix.so can potentially result in authentication against LDAP, as it authenticates against the shadow database. (which is managed by NSS, and may be pointing at LDAP)pam_sss.so, which hooks sssd), it's possible that LDAP will be referenced.