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

来源:互联网 发布:php strcamp == 编辑:程序博客网 时间:2024/06/04 19:33

http://www.ibm.com/developerworks/cn/linux/l-lpic3-313-3/index.html

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

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

Roderick W. Smith, 顾问兼作家

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 = Domainpassword server = CONTROLdomain logons = Noencrypt 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 = 60template shell = /bin/bashtemplate homedir = /home/%Uwinbind enum users = Yeswinbind enum groups = Yeswinbind use default domain = Yesidmap uid = 10000-20000idmap 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_secureauth  requisite                   pam_deny.soauth  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_secureauth  [success=1 default=ignore]  pam_winbind.so cached_login try_first_passauth  requisite                   pam_deny.soauth  required                  pam_permit.so

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

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

配置 NSS

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

passwd:     compatgroup:      compatshadow:     compat

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

passwd:     compat winbindgroup:      compat winbindshadow:     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 -ugrogersfastairemikhail

此示例显示了三个用户。您还可以键入 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,则使用不同的分隔符。)


原创粉丝点击