我是一家组织的新系统管理员,希望了解有关 NSS、PAM 和 WINBIND 如何协同工作的身份验证流程。我们一直遇到与 winbind 相关的问题,我想尝试改进我们的配置。
下面是一些关键的配置文件。请注意,为了简洁起见,我只复制了一小部分。
/etc/ssh/sshd_config
UsePAM yes
/etc/nsswitch.conf
passwd: files ldap winbind
shadow: files ldap winbind
group: files ldap winbind
services: files ldap
/etc/pam.d/ssh
auth required pam_env.so
auth sufficient pam_winbind.so
auth sufficient pam_krb5.so
auth sufficient pam_unix.so nullok
auth required pam_deny.so
举个例子,假设我尝试使用 AD 域中的帐户通过 SSH 访问 Linux 系统。 Linux系统使用winbind与AD交互。
下面是流程如何我认为这会起作用:
- SSH 服务收到通过端口 22 访问它的请求。用户输入其凭据。
- 由于 SSH 服务配置为使用 PAM 进行身份验证,因此它将引用“/etc/pam.d/ssh”来查看要使用哪些 PAM 模块。
- 在 PAM 中,SSH 配置为首先尝试“pam_winbind.so”模块。该模块的功能是查询AD进行认证。如果成功,则足以满足 PAM 的要求,因此它会授予用户访问权限。否则,它将继续沿着列表向下移动。
NSS 在这个过程中扮演什么角色?我很难理解 NSS 的实际用途。我认为这是一个告诉操作系统利用寻找某些“名称”的系统。例如,如果查找用户帐户(使用上面的 nsswitch.conf 文件),它将首先查看本地“文件”。如果在那里找不到帐户信息,它将查找“ldap”服务器,最后查找“winbind”。
但这不是 PAM 正在做的事情吗?
PAM 利用“pam_winbind.so”库对域控制器 winbind 配置的内容进行身份验证。为什么我们需要在 NSS 中列出“winbind”?也许这适用于不使用 PAM 的服务?通常是其中之一还是另一个?
在这里任何知识转移将不胜感激!