使用 Active Directory 对 Linux 客户端进行身份验证

Linux 和 Windows。有些东西放在一起就是不搭配,对吧?我曾参与过的每个 IT 商店都分成两大阵营:Windows 团队和 Linux 团队。它们彼此既不互相竞争,也不互相协作。事实上,有些地方甚至还在地板上画上一道黄线,以绝对确保两组之间没有不适当的友善关系。

我是 Windows 这一边的,当然也曾嘲弄过那些使用 Linux 的同事,但我们的目标是一致的,全都希望为公司提供高质量且经济高效的 IT 服务。我们实现此目标的方法之一是共享内核软件基础结构,如 Active Directory。几乎所有的 IT 组织都采用 Active Directory,为它们的 Windows 桌面和服务器提供身份验证服务。与其针对 Linux 环境维护一个不同的身份验证基础结构(加上一组不同的用户名和密码),还不如让 Linux 计算机也采用 Active Directory,这样岂不是更好?我赞同这样做,而且我将在本文中向您介绍如何实现这一目的。

Windows 身份验证
Windows 推出集成网络身份验证和单一登录系统至今已有一段时间了。在 Windows 2000 之前,Windows NT 域控制器 (DC) 使用 NT LAN Manager (NTLM) 协议为 Windows 客户端提供身份验证服务。虽然 NTLM 不像当初想象的那样安全,但它还是非常有用的,因为它完美地解决了需要在网络上跨多个服务器维护重复用户帐户的问题。

自 Windows 2000 开始,Microsoft 便从 NTLM 移到了 Active Directory 及其集成 Kerberos 身份验证服务。与 NTLM 相比,Kerberos 更安全,而且更适合调整。此外,Kerberos 更是 Linux 和 UNIX 系统早已采纳的行业标准,从而为这些平台打开了与 Windows 集成的大门。

Linux 身份验证
Linux(以及在其上面运行的 GNU 工具和库)当初并不是以单一身份验证机制的设计理念进行构建的。因此,Linux 应用程序开发人员就逐渐养成了一种习惯,即创建他们自己的身份验证方案。他们设法通过在 /etc/passwd(包含 Linux 用户凭据的传统文本文件)中查询名称和密码哈希,或者提供截然不同(和个别)的机制,来实现这一目标。

由此产生了很多身份验证机制,以至于无法对其进行管理。1995 年,Sun 提出了称为“可插入身份验证模块”(Pluggable Authentication Modules, PAM) 的机制。PAM 提供了一组所有应用程序开发人员都可以使用的通用身份验证 API,以及管理员配置的后端,允许多种“可插入”身份验证方案。通过使用 PAM API 进行身份验证以及使用 Name Server Switch (NSS) API 来查询用户信息,Linux 应用程序开发人员可以少编写一些代码,并且 Linux 管理员可从同一个地方配置和管理身份验证过程。

大多数 Linux 发布版本都会随附多个 PAM 身份验证模块,其中包括支持对 LDAP 目录进行身份验证和使用 Kerberos 进行身份验证的模块。您可以使用这些模块对 Active Directory 进行身份验证,但这其中存在一些明显的限制。稍后,我将在本文中讨论这些限制。

Samba 和 Winbind
Samba 是一种开放源代码项目,旨在在 Windows 与 Linux 环境之间提供集成。Samba 包含的组件使 Linux 计算机有权访问 Windows 文件和打印服务,同时还提供了基于 Linux 的服务来模拟 Windows NT 4.0 DC。使用 Samba 客户端组件,Linux 计算机便可利用 Windows NT 和 Active Directory DC 所提供的 Windows 身份验证服务。

Samba 在这个项目中对我们来说最有趣的一部分叫做 Winbind。Winbind 是在 Samba 客户端上运行的后台程序(在 Windows 中称为服务),它的作用是充当在 Linux 计算机上运行的 PAM 和 NSS 与在 DC 上运行的 Active Directory 之间通信的代理。具体来说,Winbind 使用 Kerberos 来对 Active Directory 和 LDAP 进行身份验证,以检索用户和组信息。Winbind 还提供其他服务,如使用类似于 Active Directory 中 DCLOCATOR 的算法来查找 DC 的功能,以及通过使用 RPC 与 DC 进行通信来重置 Active Directory 密码的功能。

Winbind 解决了多个仅使用 Kerberos 和 PAM 无法解决的问题。具体来说,Winbind 并不是将 DC 进行硬编码以便按照 PAM Kerberos 模块的方式进行身份验证,而是以类似于 Microsoft DC LOCATOR 模块运行的方式通过搜索 DNS 定位程序记录来选择 DC。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyxzyf.html