快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

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

   长久以来Linux和Windows一直对立存在并快速发展着,企业中的应用也逐渐分为两大阵营。它们彼此既不互相竞争,也不互相协作。虽然Windows与Linux之间的竞争水火不容,但目标都希望为公司提供高质量且经济高效的IT服务。作为企业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中查询名称和密码哈希,或者提供截然不同(和个别)的机制,来实现这一目标。

  由此产生了很多身份验证机制,以至于无法对其进行管理。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。

  三种身份验证策略

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

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

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

  图1 使用 LDAP 对 Active Directory 进行身份验证


 

     降低以明文形式传递凭据的风险的唯一方法是使用类似于SSL 的协议加密客户端与Active Directory 进行通信所使用的通道。这绝对可行,但会增加在DC和Linux计算机上管理 SSL 证书的负担。此外,使用 PAM LDAP 模块并不支持更改已重置的或过期的密码。

  使用 LDAP 和 Kerberos 利用 Active Directory 进行 Linux 身份验证的另一种策略是,将 PAM 配置为使用 Kerberos 身份验证,以及将 NSS 配置为使用 LDAP 查找用户和组信息,如图 2 所示。此方案的优点是,它相对来说比较安全,而且它利用的是 Linux 的“内置”功能。但是它不利用 Active Directory DC 发布的 DNS 服务位置 (SRV) 记录,所以您会被迫挑选一组特定的 DC 来进行身份验证。对于管理即将过期的 Active Directory 密码或是直至最近的适当组成员身份查询,它提供的方法也不是很直观。

  图2 使用LDAP和Kerberos对Active Directory进行身份验证

    
    使用Winbind、 Active Directory进行 Linux 身份验证的第三种方法是,将PAM和NSS配置为调用Winbind后台程序。Winbind 将使用LDAP、Kerberos 或 RPC(使用其中最合适的一个),将不同的PAM和NSS请求转换为相应的Active Directory调用。图3说明了这一策略。

  图3 使用 Winbind 对 Active Directory 进行身份验证

 [2] [3] [4] [5] 下一页

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论