菜单

使用 Active Directory402.com: 对 Linux 客户端进行身份验证

2019年10月30日 - 计算机教程

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

长久以来Linux和Windows一直对立存在并快速发展着,企业中的应用也逐渐分为两大阵营。它们彼此既不互相竞争,也不互相协作。虽然Windows与Linux之间的竞争水火不容,但目标都希望为公司提供高质量且经济高效的IT服务。作为企业IT管理者,实现此目标的方法之一是共享ActiveDirectory。几乎所有的IT组织都采用ActiveDirectory,为它们的Windows桌面和服务器提供身份验证服务。与其针对Linux环境维护一个不同的身份验证基础结构(加上一组不同的用户名和密码),还不如让Linux计算机也采用ActiveDirectory,这样岂不是更好?本文中向您介绍如何实现这一目的。

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

Windows身份验证

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

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

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

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

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

Linux身份验证

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

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

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

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

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

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

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
密码的功能。

Samba和Winbind

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

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

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

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

三种身份验证策略

假设Linux计算机上提供了LDAP、Kerberos
和Winbind三种身份验证,我们可以采用三种不同的实现策略允许Linux计算机使用ActiveDirectory来进行身份验证。

使用LDAP身份验证使用Active
Directory进行身份验证的最简单但成效最低的方法是,将PAM
配置为使用LDAP身份验证,如图1 所示。虽然 Active Directory 属于 LDAPv3
服务,但Windows客户端使用Kerberos(回退到 NTLM)而不是 LDAP 进行身份验证。

LDAP身份验证(称为LDAP绑定)通过网络以明文形式传递用户名和密码。对于大多数用途来说,这不仅不安全,而且也是无法接受的。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图