长久以来Linux和Windows一直对立存在并快速发展着,企业中的应用也逐渐分为两大阵营。它们彼此既不互相竞争,也不互相协作。虽然Windows与Linux之间的竞争水火不容,但目标都希望为公司提供高质量且经济高效的IT服务。作为企业IT管理者,实现此目标的方法之一是共享ActiveDirectory。几乎所有的IT组织都采用ActiveDirectory,为它们的Windows桌面和服务器提供身份验证服务。与其针对Linux环境维护一个不同的身份验证基础结构(加上一组不同的用户名和密码),还不如让Linux计算机也采用ActiveDirectory,这样岂不是更好?本文中向您介绍如何实现这一目的。
Windows身份验证
Windows推出集成网络身份验证和单一登录系统至今已有一段时间了。在Windows2000之前,WindowsNT域控制器(DC)使用NT LAN Manager(NTLM)协议为Windows客户端提供身份验证服务。虽然NTLM不像当初想象的那样安全,但它还是非常有用的,它完美地解决了需要在网络上跨多个服务器维护重复用户帐户的问题。
自Windows2000开始,Microsoft便从NTLM移到了ActiveDirectory及其集成Kerberos身份验证服务。与NTLM相比,Kerberos更安全,而且更适合调整。此外,Kerberos更是Linux和UNIX系统早已采纳的行业标准,从而为这些平台打开了与Windows集成的大门。
Linux身份验证
Linux(以及在其上面运行的GNU工具和库)当初并不是以单一身份验证机制的设计理念进行构建的。因此,Linux应用程序开发人员就逐渐养成了一种习惯,即创建属于自己的身份验证方案。他们设法通过在/etc/passwd中查询名称和密码哈希,或者提供截然不同(和个别)的机制,来实现这一目标。
由此产生了很多身份验证机制,以至于无法对其进行管理。1995年,Sun提出了称为“可插入身份验证模块”(PluggableAuthenticationModules,PAM)的机制。PAM提供了一组所有应用程序开发人员都可以使用的通用身份验证API,以及管理员配置的后端,允许多种“可插入”身份验证方案。通过使用PAMAPI 进行身份验证以及使用Name Server Switch(NSS)API来查询用户信息,Linux应用程序开发人员可以少编写一些代码,并且Linux管理员可从同一个地方配置和管理身份验证过程。
大多数Linux发布版本都会随附多个PAM身份验证模块,其中包括支持对LDAP目录进行身份验证和使用Kerberos进行身份验证的模块。用户可以使用这些模块对ActiveDirectory进行身份验证,但这其中存在一些明显的限制。
Samba和Winbind
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绑定)通过网络以明文形式传递用户名和密码。对于大多数用途来说,这不仅不安全,而且也是无法接受的。
使用 LDAP 对 Active Directory 进行身份验证
降低以明文形式传递凭据的风险的唯一方法是使用类似于SSL 的协议加密客户端与ActiveDirectory进行通信所使用的通道。这绝对可行,但会增加在DC和Linux计算机上管理 SSL 证书的负担。此外,使用 PAMLDAP模块并不支持更改已重置的或过期的密码。
使用 LDAP 和 Kerberos 利用 Active Directory 进行 Linux 身份验证的另一种策略是,将PAM配置为使用 Kerberos 身份验证,以及将 NSS 配置为使用 LDAP 查找用户和组信息,如图2所示。此方案的优点是,它相对来说比较安全,而且它利用的是 Linux 的“内置”功能。但是它不利用 ActiveDirectoryDC 发布的 DNS 服务位置 (SRV) 记录,所以您会被迫挑选一组特定的 DC来进行身份验证。对于管理即将过期的 ActiveDirectory密码或是直至最近的适当组成员身份查询,它提供的方法也不是很直观。
使用LDAP和Kerberos对Active Directory进行身份验证
使用Winbind、 Active Directory进行Linux身份验证的第三种方法是,将PAM和NSS配置为调用Winbind后台程序。Winbind 将使用LDAP、Kerberos或RPC(使用其中最合适的一个),将不同的PAM和NSS请求转换为相应的ActiveDirectory调用。图3说明了这一策略。
使用 Winbind 对 Active Directory 进行身份验证
实施计划
由于与Active Directory 的集成的增强,我选择在Red Hat Enterprise Linux 5(RHEL5)上使用Winbind 来进行我的Linux与Active Directory 集成项目。RHEL5是最新的商用RedHatLinux 发布版本,而且它在企业数据中心中相当受欢迎。
使RHEL5 对 Active Directory 进行身份验证基本上需要下列五个不同的步骤:
·查找并下载适当的 Samba 以及其他依存组件。
·构建 Samba。
·安装并配置 Samba。
·配置 Linux,特别是 PAM 和 NSS。
·配置 Active Directory。
本文的下面几节将详细介绍这些步骤。
#p#查找适当的软件
Linux 与 Windows之间最大的区别之一是,Linux由一个小型操作系统内核和大型的可单独下载和安装的组件集构成。这虽然可以创建为某些任务而进行优化的特定Linux配置,但也会使服务器的配置和管理变得极为复杂。不同的发布版本处理这种情况的方式也不一样。RedHat(及其非商用版Fedora)使用 Red Hat Package Manager (RPM) 来安装和管理这些组件。
适用于 Red Hat 的 Linux 组件包含两种形式。RPM 文件包含针对组件版本、Linux 发布版本和CPU体系结构的特定组合而预先编译和构建的二进制文件。因此,您可以下载和安装二进制文件,例如,针对在 Intel x86 体系结构CPU上运行的 Fedora 版本 10 构建的通用 UNIX 打印系统 (Common UNIX PrintingSystem,CUPS) 的 1.3.8-5 版本。假如有十多种不同的 CPU 体系结构、100 多个Linux发布版本,还有上千个程序包和版本,则要选择的二进制 RPM 的数量之多便可想而知。
另一方面,源RPM文件包含给定程序包的实际源代码。但您需要自己下载和安装源、配置构建选项,以及编译和链接二进制文件。构建您自己的操作系统组件这一想法使习惯于Microsoft在 Windows 安装 CD 上提供什么就安装什么的Windows用户十分畏怯,但是程序包管理器可使整个过程相当轻松,而且非常可靠。Samba 小组发布更新和安全修补程序的速度惊人,仅在2008年七、八月两个月内,就发布了四个版本的 Samba 3.2,总共包含 100多个错误和安全修补程序。对于此项目,我下载了最新的Samba 稳定版本 3.0.31 版的源。
为什么要下载Samba源,而不下载预先编译的二进制文件集呢?当然,我刚开始也尝试过这么做,但在调试器上花了数小时之后,我发现下载的二进制文件并不是使用支持ActiveDirectory 身份验证的正确选项构建而成的。具体来说,在 Active Directory 中支持 LinuxID映射的代码在默认版本中被关闭了,因此我必须使用适当的构建选项重建 Samba。稍后,我将在本文中详细讨论 ID 映射。
虽然 Linux 原本是小型内核,但 Red HatEnterprise发布版本预先安装了许多程序包。这通常会使生活变得更轻松,因为您从完全正常运行的操作系统开始着手,但预先安装的程序包有时会与您以后想要安装的软件发生冲突。
我在安装 Red Hat 时,因为想要使用较新的版本,所以并没有包含 Samba(通常会默认安装Samba)。但是,较新版本的Samba 要求已安装的几个其他库和实用工具也要使用新版本。这类的依赖问题非常烦人,不过,使用 RPM就可以轻松解决。
承载二进制 RPM 程序包的网站很多。我使用的网站(勿庸置疑,是我找到的第一个网站)称为PBONE,网址为rpm.pbone.net。该网站提供了搜索程序包的简便方法,并且具有我的 CPU 体系结构 (i386)和操作系统发布版本(Red Hat Enterprise Linux 5/Fedora 7&8)所需的所有二进制文件。
我必须下载和更新程序包来构建和安装最新的 3.0 版 Samba(但我从未尝试过较新的 3.2版)。请注意,这些程序包主要针对Fedora Core (fc) 发布版本。Red Hat 以 Fedora使用的相同源为基础,而且完全可与它交互。针对Fedora Core 7 及更高版本构建的程序包,不需要任何修改即可在 RHEL5上运行。请将下载的 RPM 文件放在/usr/src/redhat/RPMS 目录中。
构建和安装 Samba 3.0.31 所需的程序包:
samba-3.031-0.fc8.src.rpmSamba 3.0.31 源 RPM
gnutls1.6.3-3.fc7.i386GNU 传输层安全性 (TLS) 库
gnutils-devel-1.6.3-3.fc7.i386GNU TLS 开发文件
popt-1.12-3.fc8.i386命令行参数分析库
popt-devel-1.12-3.fc8.i386命令行参数分析开发文件
cups-libs-1.2.12-11.fc7.i386通用 UNIX 打印机系统库
cups-devel-1.2.12-11.fc7.i386通用 UNIX 打印机系统开发文件
cups-1.2.12.11.fc7.i386通用 UNIX 打印机系统二进制文件
构建Samba
构建 Samba 的第一歩是下载适当的源 RPM。我从 PBONE 站点下载了 Samba 3.0.31的源RPM。然后,将下载的源 RPM 文件放到 /usr/src/redhat/SRPMS 中,这是构建过程中用于源RPM的标准目录。
打开终端会话(在 Windows 中称为命令行窗口)并移至 SRPMS文件夹。完成后,使用该命令安装源程序包,如图4所示。
安装 Samba 源 RPM
如果您看到“用户 mockbuild 不存在,请使用根”错误警告,请不要担心。这个错误指出尚未安装Mock构建实用工具,但没有这些实用工具,构建过程也可以进行。
然后,移至 /usr/src/redhat/SPECS 目录并编辑文件 SAMBA.SPEC,该文件包含了Samba构建选项。搜索以“CFLAGS=”开头的那一行,并确保存在“--with-shared-modules=idmap_ad,idmap_rid”选项。此选项可确保构建过程包含将LinuxUID(唯一标识符)适当转换到 Active Directory 的代码。图5显示了此选项。
with-shared-modules 构建选项
接下来,您可能必须更新计算机上的一些库,才能适当构建和安装Samba,具体取决于您安装的是哪个版本的库。在我的例子中,我必须使用rpm --install 命令安装图 4中列出的程序包;在某些情况下,我必须使用 --force 选项来克服一些依赖问题。
要构建 Samba,请移至 /usr/src/redhat 目录,并运行命令 rpmbuild–bbSPECS/samba.spec,如图6所示。此过程将新的 samba-3.0.31-0.i386 RPM文件留在/usr/src/redhat/RPMS 目录中。我们稍后将在此项目中安装这个 RPM 文件。
创建 Samba 二进制 RPM 文件
#p#配置 Linux 网络
为了使用 Active Directory 进行身份验证,您的 Linux 计算机必须能够与DC通信。您必须配置三个网络设置才能与 DC 通信。
首先,重要的是通过使用动态主机配置协议 (DHCP) 或使用 ifconfig 命令为 Linux 计算机分配适当的IP地址和网络掩码,来确保适当配置该计算机的网络接口。在RHEL5下,通过从“系统”“管理”菜单中选择“网络”来配置网络,如图7所示。
配置网络
接着,确保将 Linux 计算机的 DNS 解析程序设置为与 DC 使用相同的 DNS名称服务器;在大多数情况下,假定您要使用Active Directory 集成的 DNS,则该 DC 是您想要加入 Linux计算机的域中的DC。在用于配置网络的相同网络配置实用工具的 DNS 选项卡上,配置 DNS 解析程序,如图8所示。
设置主 DNS 解析程序
最后,完成上述步骤后,您必须设置Linux计算机的主机名称以反映它在域中的名称。虽然您可以使用网络配置应用程序设置主机名称,但这一方法不一定始终适用。
但是,可直接编辑 /etc/hosts 文件,并在具有 <主机名称> 形式的localhost.localdomain条目下添加条目。(例如,“10.7.5.2rhel5.linuxauth.locallinuxauth”)。请注意,如果不这么做,当您将 Linux计算机加入到域后,会在目录中创建错误的计算机对象。
配置Linux 时间同步
Kerberos 协议需要身份验证系统具有能在相对较小的时间内同步的时钟。默认情况下,ActiveDirectory可允许的偏差时间最长为五分钟。为了确保您的 Linux 系统与 DC 的系统时钟维持在这个时间内,您应该将Linux 系统配置为使用DC 的网络时间协议 (NTP) 服务。
然后,在Linux服务器上,从“系统”“管理”菜单中运行日期与时间实用工具,然后单击“网络时间协议”选项卡。选中“启用网络时间协议”框,然后添加您要用作网络时间源的DC的 IP 地址。请注意,这通常应该是在域中担任主域控制器 (PDC) 仿真器灵活单主机操作 (FSMO)角色的DC。图9显示了如何设置 Linux 网络时间源的一个示例。
配置网络时间协议
配置PAM和NSS
PAM和NSS提供Linux 应用程序(如桌面)与Winbind之间的联系媒介。与许多Linux服务一样,您可以通过文本文件来配置PAM 和 NSS。我们先来讨论一下如何配置 PAM。
PAM为使用它的应用程序提供了四个与身份验证相关的功能。身份验证设施允许应用程序确定使用它的用户。帐户设施提供的帐户管理功能(如登录时间限制)与身份验证并不是特别相关。密码设施提供请求和管理密码的机制。会话设施执行与用户相关的安裝和应用程序的拆卸任务,例如,在用户特定的目录中记录或创建文件。
Red Hat 下的 PAM 将它的配置文件存储在 /etc/pam.d 目录中,其中包含使用PAM进行身份验证的每个应用程序的文本文件。例如,文件 /etc/pam.d/gdm 包含 Gnome DesktopManager(GDM) 的 PAM 配置信息,即 Red Hat 的默认窗口运行环境。每个 PAM配置文件都包含多行内容,其中每行分别定义PAM 身份验证过程的某个方面。图10显示了 GDM 的 PAM 配置文件的内容。
Gnome Desktop Manager 的 PAM 配置文件
PAM 配置文件中的每个项目都具有 <管理组> <控制> <模块><参数>的形式,其中 <管理组>对应于配置条目所属的设施:身份验证、帐户、密码或会话。该文件的第三栏包含/lib/security 目录中的 PAM共享库的名称。共享库包含可动态加载的可执行代码,类似于 Windows 中的DLL。模块名称后的其他术语都是 PAM传递到共享库的参数。
PAM 控制关键字
Required如果模块成功,则 PAM将继续评估管理组的其余项目,并且结果将由其余模块的结果决定。如果模块失败,PAM将继续评估,但向调用应用程序返回失败消息。
Requisite如果模块成功,PAM将继续评估管理组条目。如果模块失败,PAM将返回到调用应用程序,并且不做进一步处理。
Sufficient如果模块成功,PAM将向调用应用程序返回成功消息。如果模块失败,PAM会继续评估,但结果将由后续模块决定。
Optional除非模块是为管理组指定的唯一模块,否则 PAM 将忽略模块的结果。
IncludePAM包括引用的 PAM 配置文件的内容,并且还会处理该配置文件包含的条目。
您可以看到每个管理组都包含多个条目。PAM 按照调用命名的模块的顺序处理条目。然后,该模块返回成功或失败消息,而PAM将继续根据控制关键字进行评估。
您可能会注意到,GDM 的 PAM 配置文件在它的所有管理组中都包含系统身份验证。这正是 PAM 为GDM建立默认身份验证行为的方式。通过修改系统身份验证,您可以修改在其PAM配置中包含系统身份验证文件的所有应用程序的身份验证行为。图11中介绍了默认系统身份验证文件。
PAM 系统身份验证文件
Name Service Switch (NSS) 模块将隐藏系统数据存储的详细信息以防应用程序开发人员看见,这与PAM隐藏身份验证的详细信息的方式大体相似。NSS允许管理员指定存储系统数据库的方式。具体来说,管理员可以指定如何存储用户名和密码信息。因为我们希望应用程序使用Winbind 在Active Directory 中查询用户信息,所以我们必须修改 NSS 配置文件才能显示此信息。
Red Hat 包含一个小型的图形小程序,可用来配置 PAM 和NSS,称为system-config-authentication。它负责管理您需要对系统身份验证和nss.conf文件进行的大部分(而非全部)更改。
运行 system-config-authentication应用程序后,您会看到如图12所示的对话框。选中“用户信息”(用于配置 nss.conf文件)和“身份验证”(用于修改系统身份验证文件)这两个选项卡上的Winbind 选项。
systemconfig-authentication 对话框
单击“配置 Winbind”按钮,您将看到如图13所示的对话框。在Winbind域字段中输入要对用户进行身份验证的域的名称,并选择“ads”作为安全模式。在 Winbind ADS 领域字段中输入ActiveDirectory 域的 DNS 域名称。在 Winbind 域控制器字段中,输入您希望该 Linux系统对其进行身份验证的 DC的名称,也可以输入星号,表明 Winbind 应通过查询 DNS SRV 记录来选择 DC。
配置 Winbind 对话框
选择您的 Active Directory 用户应该具有的适当默认命令行界面,在本例中,我选择的是Bourne-againShell 或 BASH。此时,不要按下“加入域”按钮,稍后,再将此计算机加入到域。
在将 /etc/pam.d/system-auth 文件修改为支持 Winbind 后,还需要对其进行另一个更改。当Linux用户登录时,系统要求该用户必须拥有主目录。主目录包含许多用户特定的首选项和配置条目,与Windows注册表非常相似。问题在于,因为您要在 Active Directory 中创建用户,所以Linux不会自动为用户创建主目录。幸运的是,您可以将 PAM 配置为在其会话配置期间为用户创建主目录。
打开 /etc/pam.d/system-auth 文件,然后向下滚动到底部,在标有“sessionoptionalmap_mkhomedir.soskel=/etc/skelumask=0644”会话部分中的最后一行之前插入一行(请参见图14)。这一行将PAM配置为创建用户的主目录(如果用户没有主目录)。它将目录 /etc/skel用作“框架”或模板,而且将权限掩码0644(所有者具有的读写权限、主要组具有的读取权限,以及其他人具有的读取权限)分配给新文件夹。
为用户创建主目录
安装和配置Samba
要安装您刚刚创建的 Samba 二进制文件,请转至 /usr/src/redhat/RPMS 目录。由rpmbuild命令创建的所有 RPM 文件都会显示在此目录中。请记住,Samba 包括允许 Linux 客户端访问Windows(或Samba)文件共享的二进制文件,以及允许 Linux 系统充当 Windows 文件服务器、Windows打印机服务器和Windows NT 4.0-style DC 角色的代码。
要让 Linux 对 Active Directory 进行身份验证,我们根本用不到这么多角色,其实我们只需要使用Samba公共文件和 Samba 客户端二进制文件就可以了。为了方便起见,这些文件可为两个RPM文件:samba-client-3.0.31-0.i386.rpm和samba-common-3.0.31-0.i386.rpm。使用 rpm --install 命令安装RPM文件,请看下面的示例:rpm --installsamba-common-3.0.31-0.i386.rpm。(请注意,您需要先安装–common RPM 文件。)
安装了Samba 客户端二进制文件后,您必须修改默认 Samba 配置,以确保 Winbind 使用ActiveDirectory 适当处理身份验证。所有 Samba 配置信息(包括客户端和服务器)都可以在smb.conf文本文件中找到,该文件在默认情况下位于 /etc/samba目录中。Smb.conf可能包含大量配置选项,本文只会对其内容进行简要介绍。samba.org 网站和 Linux 主页简要讨论了smb.conf。
第一步是将 Winbind 配置为使用 Active Directory 进行身份验证。您必须将smb.conf中的安全模式设置为“ads”。system-config-authentication实用工具应该已经帮您设置好了,但检查一下总是比较保险。编辑smb.conf文件,并搜索标有“域成员选项”的部分。找出以“security”开头的那一行,并确定它的内容是“security=ads”。下一个配置步骤是确定 Winbind 如何将 Windows 安全主体(如用户和组)映射到Linux标识符,这需要进行进一步的说明。
#p#ID 映射问题
通过 Active Directory 对 Linux 用户进行身份验证时有个大问题我还没有提到,那就是用户和组的UID问题。Linux 和 Windows 在内部都不是根据用户名来引用用户的,而是使用唯一的内部标识符。Windows使用安全标识符(即SID),它能够唯一标识 Windows 域中的每个用户,其结构长度可以变化。SID 也包含唯一域标识符,以便Windows区别不同域中的用户。
Linux 的方案则简单得多,Linux 计算机上的每个用户都有一个 UID,而此 UID 只是一个 32 位的整数。但是UID的范围受限于计算机本身。在某台 Linux 计算机上具有 UID 436 的用户,不一定与另一台 Linux 计算机上具有UID436 的用户相同。因此,用户必须登录他需要访问的每台计算机,这显然不是理想的情况。
Linux 网络管理员解决此问题的常用方法是,使用 Network Information System (NIS)或共享LDAP 目录来提供网络身份验证。网络身份验证系统提供用户的 UID,而使用该身份验证系统的所有Linux计算机都将共享相同的用户和组标识符。在这种情况下,我将使用 Active Directory来提供唯一的用户和组标识符。
要解决此问题,我可以采用两种策略。第一个(也是最明显的)策略是,为每个用户和组创建UID,并将该标识符与各自的对象一起存储到Active Directory 中。这样一来,当 Winbind对用户进行身份验证时,它就可以查询该用户的 UID,然后将它提供给Linux 作为该用户的内部标识符。Winbind 将此方案称为Active Directory ID 映射,或idmap_ad。图15介绍了 Active Directory ID映射的过程。
Active Directory ID 映射
Active DirectoryID映射的唯一缺点是,我们必须提供一种机制来确保每个用户和组都拥有标识符,而且这些标识符在林中都是唯一的。有关详细信息,请参阅“针对ActiveDirectory ID 映射配置 Active Directory”边栏。
幸好,还有另外一种 ID 映射策略,这种策略的管理负荷要少得多。回想一下,我们在前面曾提到过 WindowsSID可以唯一标识域中的用户和域本身。SID 中能唯一标识域中用户的部分称为相对标识符(或 RID),而且这部分事实上是一个32位的整数。因此,Winbind 可在用户登录时直接从 SID 中提取 RID,然后将该 RID 用作唯一的内部UID。Winbind将此策略称为 RID 映射,或 idmap_rid。图 18 描述了 RID 映射的实际工作方式。
RID 映射
RID 映射具有零管理负荷的优点,但是您不能将它用在多域的环境中,因为不同域中的用户可能拥有相同的 RID值。但是,如果您拥有单个Active Directory 域,则可以使用 RID 映射。
要配置 Winbind ID 映射策略,请再次编辑 /etc/samba/smb.conf文件,并且添加“idmapbackend = ad”行来使用 Active Directory 映射策略;如果您要使用 RID映射策略,请添加“idmapbackend = rid”行。确保该文件中不存在任何其他指定映射策略的行。
对于 Winbind,我们还需要在 smb.conf 文件中添加其他配置选项。虽然我们已将PAM设置为在每个用户登录时为其创建主目录,但是还需要告诉 Winbind主目录的名称是什么。我们可以通过将“templatehomedir = /home/%U”行添加到 smb.conf来执行此操作(请参见图17)。这会告诉 Winbind,使用Active Directory 进行身份验证的每个用户的主目录都将是/home/<用户名>。但务必要先创建好/home 目录。
指定主目录的名称
加入域并登录
既然网络、PAM、NSS 和 Samba Winbind 都已配置成功,现在应该将 Linux 计算机加入到域中。可使用SambaNET 命令来执行此操作。在外壳程序提示符下,运行“net ads join–U<管理员名称>”。使用具有足够权限来将计算机加入到域的帐户名称替换 <管理员名称>。
net 命令会提示您输入用户的密码。如果一切运行正常,net 命令会将您的计算机加入到域中。您可以使用ActiveDirectory 用户和计算机来查找刚刚创建的计算机帐户。
您可以使用称为 wbinfo 的 Winbind 测试工具来测试加入的状态。运行 wbinfo–t将测试计算机与域之间的信任关系。运行 wbinfo –u 将列出域中的所有用户,而运行 wbinfo–g将列出域中的所有组。
如果您成功将 Linux 计算机加入到域中,则下一步是尝试使用 Active Directory用户帐户和密码登录。注销Linux 计算机,然后使用 Active Directory用户名登录。如果一切运行正常,您应该能够登录。
要是行不通怎么办?
使用Winbind 设置Linux 计算机以便使用ActiveDirectory进行身份验证并非易事。要配置的东西有很多,而且很多地方都可能会出错,而 Linux 的每个版本和Samba的每个版本之间又都存在一些细微差别,这更是雪上加霜。但是您可以查找几个地方,以帮助确定怎样操作。
首先是Linux 系统日志文件,它保存在 /var/log/messages中。Samba将重大事件的消息(例如,丢失文件或配置失败)存储在这个文件中。除了系统日志文件外,还有 Samba 和Winbind的日志文件。您可以在 /var/log/samba 中找到这些文件,而且它们还会为您提供一些其他信息。
您可以通过修改Winbind 的启动脚本来设置调试级别,来提高 Winbind发出的日志消息的详细程度(和数量)。编辑/etc/init.d/winbind 外壳脚本,然后在 windbindd 命令中添加“-d5”。这可将调试级别增加到5(允许的值范围为 1 至 10),使 Winbind 生成更详细的错误消息。
如果Winbind 最后可与 DC 通信,您可以运行网络数据包捕获实用工具,如 Netmon3.1。这使您可以精确分析Winbind 要进行的操作。而且,您还可以检查 DC 上的 Windows安全日志,此日志会显示身份验证尝试。
如果行得通,您又应该做些什么呢?
如果一切都能顺利进行,现在您就可以使用在 Active Directory 中保存的凭据登录 Linux 系统中了。与在Linux计算机上本地管理标识,或与使用诸如NIS之类的不安全系统相比,这是一项重大改进。它使您可以将您的用户管理任务集中到一个标识存储上:ActiveDirectory。
但是,要让这套解决方案真正具备实际用途,还缺几样东西。首先,无法保证能获得技术支持,有点像撞大运。大多数 Linux组织对于Active Directory 都不是很了解,而且您可以从Linux社区获得的支持完全取决于谁刚好读到您的帖子以及他们当天的心情。
Samba 也没有迁移或部署工具。如果您具有现有的 Linux 帐户及其相关的用户 ID 和权限,则您在将它们迁移至ActiveDirectory 时,必须手动确保它们维护其 UID。
最后,Samba 仍然无法使用最重要的 ActiveDirectory应用程序之一,即组策略,尽管已经实施了此策略。虽然您可以使用 Samba 将 Linux 系统加入到 ActiveDirectory中,但无法使用组策略来管理它。
#p#第三方解决方案
使用Active Directory 对 Linux 计算机进行身份验证显然是件好事,但使用 SambaWinbind推出您自己的解决方案,即使不把您累死,也会让您感到枯燥无味。您可能会想,一些创新的软件供应商可能会提出易于使用的解决方案,您猜得没错。
对于我在本文中演示的版本,有四家商用软件供应商已经开发了易于安装和使用的相应版本。它们几乎为每个受欢迎的 Linux、UNIX和Macintoshes 版本都提供了代码和迁移工具,另外也支持使用组策略管理 Linux 计算机。
这四家公司分别为Centrify、Likewise Software、Quest Software和Symark。这四家供应商都提供了相似的功能,其中包括跨越各个 Linux 发布版本的组策略管理。LikewiseSoftware最近还公开了它实现的开放源代码,称为 Likewise Open,但它的组策略组件仍旧是商用产品。LikewiseOpen将可用于多个主要的 Linux 发布版本。
有了可用的商用产品后,还有必要使用 Samba 和Winbind来构建自己的身份验证系统吗?如果花钱购买集成软件不在预算之内,则可以利用免费的Samba开放源代码路由。您还可以获得所有的源代码,这样的好处真是令人难以抗拒。但是,迁移现有的 Linux 计算机及其现有的UID是非常棘手的问题。
另一方面,假如您想要省下安装和实现的时间、需要迁移现有的Linux计算机,或是希望有人对您的问题提供权威性的解答,那么寻求其中的一种商用解决方案比较划算。另外,如果您需要使用组策略管理功能,那么商用产品是您唯一的选择。
但是,无论您采取哪种方式,将Linux 身份验证与 ActiveDirectory集成都可以减少您为管理多用户帐户投入的精力、增强系统安全性,并为您提供单一的标识存储来进行管理和审核,而这些全都是相当吸引人的理由,值得试一试。
【编辑推荐】