学习 Linux,302(混合环境): Winbind

使用 Windows 域控制器进行 Linux 帐户管理

如果您的网络包括一个域控制器(一台 Windows 计算机或一台 Samba 服务器),那么您可以使用它的用户数据库,或者在 Linux 计算机的本地帐户数据库中维护本地登录用户。这样做要求使用一个名为 Winbind 的工具集。对于没有运行 Samba 来共享文件或打印机的 Linux 计算机来说,此工具集十分方便;具有 Windows 域帐户的用户可以从控制台登录,或者使用 SSH 访问仅限于 Linux 的功能,使用 POP 或 IMAP 邮件服务器进行 Windows 域身份验证,等等。

Roderick W. Smith, 顾问兼作家

Roderick Smith 作者照片Roderick W. Smith 是一位顾问兼作家,他撰写了十多本关于 UNIX 和 Linux 的书,包括 The Definitive Guide to Samba 3、Linux in a Windows World Linux Professional Institute Certification Study Guide。他还是 GPT fdisk 分区软件的作者。他目前定居罗得岛州的 Woonsocket 市。



2011 年 12 月 27 日

关于本系列

本系列文章帮助您了解 Linux 系统管理任务。您可以使用本系列文章的资料准备 Linux Professional Institute Certification 级别 3 (LPIC-3) 考试

参见我们的 学习 Linux, 302(混合环境):LPI-302 路线图 查看本系列中各篇文章的介绍和链接。路线图目前仍在更新中,目前反映的最新内容是 LPIC-3 考试的 最新目标(2011 年 3 月)。在完成每篇文章之后,我们都会将其添加到路线图中。

概述

在本文中,将了解这些概念:

  • 安装 Winbind
  • 配置 Winbind

本文帮助您准备 Linux Professional Institute (LPI) 的混合环境专业考试 (302) 的主题 312 下的目标 313.3。该目标的权值为 2。


先决条件

关于选修的 LPI-302 考试

Linux Professional Institute Certification (LPIC) 与其他许多认证一样,Linux Professional Institute Certification (LPIC) 提供多个不同级别,每个级别都比前一个级别要求更多知识和经验。LPI-302 考试是 LPIC 层级的第三级中的一个可选专业考试,要求具有高级 Linux 系统管理知识。

要通过 LPIC 级别 3 (LPIC-3) 认证,您必须通过前两个一级考试 (101 和 102),两个二级考试(201 和 202),以及 LPIC-3 核心考试 (301)。到达这个级别后,才能参加一些可选专业考试,比如 LPI-302

为了最有效地利用本系列中的文章,您应该具备高级 Linux 知识,同时还需要准备一个 Linux 系统,用它来练习本文介绍的命令。具体地讲,本文假设您拥有 Linux 命令行功能的应用知识,并且对 学习 Linux,302(混合环境):概念 中介绍的 Samba 的用途有基本了解,并了解 Samba 配置的一些基础知识,包括配置 Samba 以使用域控制器。您应该熟悉 smb.conf 配置文件的总体结构。您还应该了解服务器通常如何运行,包括使用 System V (SysV) 启动脚本和超级服务器。实际上,您必须具有访问 Windows 域的权限才能使用此处展示的信息。(您可以使用由 Samba 管理的域,或者是由运行 Windows Server 操作系统的计算机管理的域。)


了解 Winbind

构建您自己的提要

您可以构建一个自定义 RSS、Atom 或 HTML 提要,以便在我们添加新文章或更新内容时收到通知。访问 developerWorks RSS 提要。选择 Linux 作为专区,Articles 作为类型,输入 Linux Professional Institute 作为关键字。然后选择您想要的提要类型。

学习 Linux,302(混合环境):Samba 角色学习 Linux,302(混合环境):域控制 所述,Windows 网络通常包括一个域控制器,这是一台管理网络中所有 Windows 计算机的身份验证的计算机。这种配置可极大地简化具有许多用户和计算机的操作,因为不需要在多台计算机上复制(和维护)用户帐户信息。相反,所有 Windows 帐户信息都集中在一台计算机上,这支持管理员在一个位置管理帐户,并支持用户一次更改所有域成员计算机的密码。

您可以通过设置多个选项来将 Samba 服务器配置为域的成员服务器。加入域的常见全局选项集可能如下所示:

security = Domain
password server = CONTROL
domain logons = No
encrypt passwords = Yes

如果域控制器支持 Microsoft Active Directory 域服务功能,那么您可以使用 security = ADS 而不是 security = Domain。您还必须输入 net join member -U adminuser,以便让 Samba 服务器加入域中,其中 adminuser 是域的管理帐户。请参阅 学习 Linux,302(混合环境):Samba 角色,以获得如何将 Samba 服务器配置为域成员的详细描述。

所有这些操作对 Samba 服务器来说都很好,但是,当然 Samba 仅是可以在 Linux 计算机上运行的一种服务器。其他服务器(和本地登录服务器)可能是域控制器提供的主要益处。例如,如果网络上的一些计算机作为 Linux 工作站进行工作,或者如果您在 Linux 计算机上运行邮局协议 (POP) 电子邮件服务器,那么您可能想要它们使用域控制器进行身份验证。这就是 Winbind 发挥作用的地方;它提供了 “粘合剂”,使得 Linux 能够使用 Windows 域的帐户完成非 Samba 身份验证任务。

在配置 Winbind 之前,您应该注意其局限性。由于 Microsoft 设计其域身份验证过程时考虑的是 Windows 的需求,因此它缺少 Linux 所需的帐户方面的一些功能,比如 UNIX®-style用户 ID (UID) 和组 ID (GID) 值。相反,Windows 域使用安全标识,它们与 Linux UID 和 GID 无法直接对应。同样地,域控制器不存储 UNIX/Linux 主目录信息。因此,Winbind 必须在本地创建一些此类 Linux 信息。这适用于大多数用途,但是这意味着使用 Winbind 的两台 Linux 计算机可轻松地位同一用户创建不同的 UID 和 GID。如果这些计算机使用网络文件系统 (NFS) 共享文件,那么这一事实可能具有负面影响,这取决于服务器之间的 UID 和 GID 对应关系。在这种情况下,这样做可能会更好,即为网络配置轻型目录访问协议 (LDAP) 服务器,并针对 Linux 帐户和 Windows 域帐户使用其帐户数据库。

Winbind 取决于几个不同的元素:

  • smb.conf 中特定于 Winbind 的选项
  • Pluggable Authentication Modules (PAM) 子系统的配置选项,这是现代 Linux 安装的标准部件
  • Net Service Switch (NSS) 子系统的 配置选项,这是现代 Linux 安装的标准部件
  • winbindd 服务器程序

因此,配置 Winbind 要求修改所有这些配置。您不需要运行主 Samba 服务器程序(smbdnmbd)来使用 Winbind,但是,您必须安装该服务器才能获得所有必需的支持文件。您可能需要安装一个单独的 Winbind 包,通常称为 winbindsamba-winbind。您可能还需要安装一个名为 samba-winbind-clients 的包。一定要确保最终安装包括 /lib/security/pam_winbind.so 和 /lib/libnss_winbind.so.2 文件。


在 smb.conf 中设置 Winbind 选项

要设置 Winbind,您必须首先将计算机配置为加入域,如前所述,更多信息请参见 学习 Linux,302(混合环境):Samba 角色。然后,您必须设置与 Winbind 相关的各种 smb.conf 选项。

了解 Winbind 选项

需要设置的 smb.conf 选项包括:

  • winbind separator在域中,Windows 用户名包含一个用户名和一个域名,在它们之间有一个分隔符。此选项设置该字符。默认是反斜杠(\),加号(+)是常见的替代分隔符。
  • winbind cache timeWinbind 缓存指定时间段的身份验证数据,默认设置为 300 秒(5 分钟)。在测试 Winbind 配置时您可能想要降低此值。
  • template shell使用此选项设置用户的默认 shell。默认值是 /bin/false,这适用于不支持 shell 访问的系统;但是,如果您想让用户能够从本地登录或者通过 Secure Shell (SSH) 等服务器登录,则应该将此选项设置为 /bin/bash 或其他一些合法的 Linux shell。
  • template homedir您必须为用户设置默认主目录。您通常会使用一个或多个 Samba 变量,比如用户名的 %U 和域名的 %D。此参数的默认值是 /home/%D/%U
  • winbind enum users此 Boolean 选项启用或禁用某些系统调用的支持,支持程序枚举用户。默认值是 Yes,但是将它设置为 No 可改进性能,也会避免一些程序(比如 finger)的古怪行为。
  • winbind enum groups此选项的工作方式与 winbind enum users 非常类似,但它适用于组而不是用户。
  • winbind use default domain如果您将此选项设置为 Yes,Winbind 会删除大多数操作的用户名的域组件,这通常是想要的效果,因为它会缩写用户名—例如,将 MYDOMAIN\rexx 缩写为 rexx。如果网络包含多个域,则使用默认值 No 很有意义。
  • idmap uid您应该使用此选项指定一组 UID,使用短划线作为 (-) 分隔符,如 10000-20000 所示。确保您使用的范围与您系统上使用的本地定义的 UID 不重叠。
  • idmap gid此选项和 idmap uid 一样,但它设置一组 GID。

检查示例配置

例如,考虑 清单 1,它显示一组 smb.conf 选项,演示所有前面的选项。

清单 1. 演示 Winbind 配置的示例 smb.conf 文件
winbind separator = +
winbind cache time = 60
template shell = /bin/bash
template homedir = /home/%U
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
idmap uid = 10000-20000
idmap gid = 10000-20000

当然,您应该根据自己的需要自定义这些选项。例如,如前所述,the default value for template shell 的默认值可能适用于不提供登录 shell 访问的服务器,比如电子邮件服务器或 FTP 服务器。


配置 PAM

配置了 smb.conf 后,您必须处理 PAM 配置。学习 Linux,302(混合环境):身份验证和授权 介绍了 PAM,但是由于 Winbind 的目的,您想要将 Winbind 作为非 Samba 工具的身份验证方法进行添加,而不是使用 PAM 对 Samba 用户进行身份验证。这样做可能有些困难,因为不同版本以不同的方式配置 PAM,所以在一个版本上有效的修改在另一个版本上未必有效。

了解 PAM

PAM 是一个库集合,可供需要身份验证的程序使用,比如处理文本模式登录的 login 程序、处理图形用户界面登录的 X Display Manager 程序或 POP 电子邮件服务器程序。要提供灵活的系统,您可以使用配置文件配置 PAM,如前所述。

PAM 是一个复杂的系统,并且由于 PAM 配置中不同版本之间的差别,在此处进行完整的描述是不可能的。(参考资料 部分提供了其他 PAM 文档的链接。)您可以通过 /etc/pam.d 中的文件配置 PAM。此目录下的大部分文件描述 PAM 在具体的程序中如何工作,比如文本模式的 login 程序或 SSH 服务器计划。尽管大多数版本提供全局 PAM 配置文件,比如 system-auth 或 common-stackname,其中 stackname 是四个 PAM 堆栈名的一个名称。(每个堆栈定义 PAM 提供的一种具体服务类型。)

修改 PAM 堆栈

配置 PAM 时,您必须决定您想进行的更改是要影响所有登录服务还是几个登录服务。(检查 /etc/pam.d 中的文件来查看系统上安装的登录服务类型,然后询问自己是所有还是仅一些登录服务需要使用 Winbind。)如果您只想修改一或两个服务,比如一台 POP 服务器,同时又不支持对其他服务使用 Winbind 身份验证,比如一台 FTP 服务器,则只需修改想要更改的服务文件即可。如果您想要更改影响所有服务,可编辑通用文件,比如 system-auth。

典型的 PAM 堆栈如 清单 2 所示,清单 2 是 Ubuntu 版本 10.10 系统的 /etc/pam.d/common-auth 文件。

清单 2. 一个示例 PAM 堆栈
auth  [success=1 default=ignore]  pam_unix.so nullok_secure
auth  requisite                   pam_deny.so
auth  required                    pam_permit.so

不幸的是,这一特定语法有些含义模糊。pam_unix.so 模块使用本地密码数据库文件管理身份验证,此行的 success=1 选项表示当此模块成功返回时 PAM 会跳过此行。因此,如果 pam_unix.so 成功并且登录成功,会跳过 pam_deny.so(总是返回身份验证失败代码)。

要将此配置修改为包含 Winbind,您必须添加对 pam_winbind.so 模块的引用,并将行号更改为跳过 pam_unix.so 行。结果与 清单 3 类似,突出显示了更改。

清单 3. 提供 Winbind 支持的 PAM 堆栈
auth  [success=2 default=ignore]  pam_unix.so nullok_secure
auth  [success=1 default=ignore]  pam_winbind.so cached_login try_first_pass
auth  requisite                   pam_deny.so
auth  required	                  pam_permit.so

除了 Ubuntu(本示例使用的版本)之外的版本都需要对 PAM 进行其他更改,但是在进行此类更改之前您必须完全了解初始配置。还要注意,您必须修改所有四个堆栈:—authaccountsessionpassword。这些堆栈可能在一个文件中出现也可能分散在多个文件中。如果您想要修改单个服务,则必须在您想要修改的所有服务配置文件中修改所有四个堆栈。

在安装 Winbind 包时,一些版本会对其 PAM 配置进行相应的更改。因此,您可能根本不需要进行任何更改。


配置 NSS

第二个您必须进行调整以支持 Winbind 登录的服务是 NSS。幸运的是,与 PAM 配置相比,NSS 配置相对简单。您必须编辑 /etc/nsswitch.conf 文件并更改下列三行内容:

passwd:     compat
group:      compat
shadow:     compat

一些系统在这些行使用 files 而不是 compat,并且您可能在这些行中发现其他项。这些行告诉 NSS 为其任务使用本地文件,这为想要使用它们的程序提供了用户和组列表。要将 Winbind 添加到系统,请为下列每一行添加一个对 Winbind 的引用:

passwd:     compat winbind
group:      compat winbind
shadow:     compat winbind

运行 Winbind

更改完成之后,您可以最终运行并测试 Winbind。通常您可以使用 SysV 启动脚本来启动 Winbind,如下所述:

# /etc/init.d/winbind start

警告:如果您的系统正在运行 Name Service Cache Daemon (NSCD),请在运行 Winbind 守护进程之前终止守护进程。NSCD 会影响 Winbind 操作。

如果您想要在每次启动系统时都运行守护进程,请确保针对此任务正确配置了其 SysV 启动脚本。您可以使用 chkconfigntsysvupdate-rc.d 或其他工具来进行这一操作。

在 Winbind 运行时,wbinfo 程序支持您测试它。-u 选项返回一个用户列表:

$ wbinfo -u
grogers
fastaire
mikhail

此示例显示了三个用户。您还可以键入 getent passwd 来获取一个用户列表;从本质上讲,这等同于 /etc/passwd 文件。此命令返回由所有方法定义的用户,包括本地帐户、Winbind 和其他可能正在使用的服务,比如 LDAP 服务器。

注意:wbinfo -ugetent passwd 命令有时无法返回域用户的而完整列表,尤其是如果您设置了 winbind enum users = No。因此,如果这些命令不起作用,可测试登录能力。

当然,测试 Winbind 是否正常工作的最终测试是,它是否可对配置为在 PAM 中使用的服务进行用户身份验证。因此,您应该使用在 Windows 域中的帐户而不是本地计算机上的帐户来测试此能力。如果您没有成功,请尝试检查客户端和 Windows 域控制器上的日志文件。记住,如果您设置了 inbind use default domain = No,则本地用户名的格式为 DOMAIN\username(或类似的格式,如果您设置 winbind separator,则使用不同的分隔符。)


下期简介

本系列文章的下一个主题是 学习 Linux,302(混合环境):CIFS 集成,介绍如何将 Linux 计算机集成到 Server Message Block (SMB)/Common Internet File System (CIFS) 网络作为文件共享客户端。该主题的内容包括如何使用独立客户端工具,以及如何在标准 Linux 文件系统层次结构中挂载 SMB/CIFS 共享内容。

参考资料

学习

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和 wikis,并与其他 developerWorks 用户交流。
  • 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=783091
ArticleTitle=学习 Linux,302(混合环境): Winbind
publish-date=12272011