学习 Linux,302(混合环境): 与 Active Directory 集成

加入 Active Directory 域并与之进行交互

自 Windows 2000 发布以来,Microsoft 将 Active Directory 作为其目录服务提供,之后的版本将它命名为 Active Directory 域服务 (AD DS)。AD DS 利用流行的 LDAP 进行资源管理,利用 Kerberos 进行身份验证,并与 DNS 紧密集成以进行名称解析。如果您目前正在使用 AD DS,那么将它与一个 Linux 服务器集成,可帮助集中化 Linux 打印和文件服务的身份管理和维护。但是,这样做极具挑战性。幸运的是,Samba 为 Linux 与 AD DS 的集成提供了一个解决方案,无需对目录服务进行任何修改。

Tracy Bost, 顾问及培训师, 自由职业

作者照片 - Tracy BostTracy Bost 是一名经验丰富的软件开发人员和系统工程师。他的专长是企业应用程序集成。他过去曾担任过抵押行业标准维护组织 (Mortgage Industry Standards Maintenance Organization, MISMO) 业务规则工作组的联合主席和 RuleML2010 行业标准的委员会联合主席。他曾在多个行业任职,这些行业包括抵押贷款、房地产和非营利行业。



2012 年 1 月 04 日

关于本系列

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

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

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

  • 了解 Active Directory 域服务 (AD DS)
  • 了解 Samba 如何与 AD DS 进行通信
  • 配置 Samba 以使用 AD DS
  • 与 AD DS 集成

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

先决条件

为了最有效地利用本系列中的文章,您应该具备高级 Linux 知识,同时还需要准备一个 Linux 系统,用它来练习本文介绍的命令。具体地讲,本文假设您拥有 Linux 命令行功能的应用知识,并且对 学习 Linux,302(混合环境):概念 中介绍的 Samba 的用途有基本了解 。要执行本文中描述的操作,您必须安装 Samba 软件。此外,您应该能够访问具有 Windows Server 操作系统的计算机,该操作系统针对 AD DS 进行了配置并可运行它。


了解 Active Directory

关于选修的 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

如果您在拥有大量 Windows 客户端的环境中工作,或者是在具有 AD DS 的环境中工作,则可以考虑将 Linux 服务器集成到 AD 环境中。自 Microsoft Windows 2000 以来,AD 一直是 Windows 的身份验证和目录服务。AD DS 对主域控制器和备份域控制器进行了重大更改,它使用了可复制到另一个 AD DS 的域控制器。

尽管还有其他可以将 Linux 服务器集成到 AD DS 域中的方法,但是 Samba 可帮助简化管理和配置,且无需对 AD DS 进行任何架构修改,或者是在 Windows Server 计算机上安装其他软件。Samba 服务器无法成为 AD DS 域中的域控制器,但它可以作为成员服务器加入 AD DS 服务并与之进行交互。

AD DS 基于下列 Internet 标准:

  • 进行名称解析的域名系统 (DNS)
  • 进行用户身份验证的 Kerberos 版本 5
  • 进行目录服务的 Lightweight Directory Access Protocol (LDAP) 版本 3

LDAP 3

LDAP 最初是为了满足比其前身 X.500 协议更轻型的目录服务需求。自 1993 年发布以来,LDAP 已改进了许多。现在,它实际上是目录服务的 Internet 标准。

Microsoft 声称 LDAP 在核心方面是兼容的。表 1 显示了请求注释 (RFCs),提供了在 LDAP 中读取和执行操作的扩展支持。

表 1. LDAP 的 Microsoft RFC 支持
RFC支持
2251LDAP v3自 Windows 2000 以来
2252Attribute Syntax Definitions自 Windows 2000 以来
2253UTF-8 String Representation of Distinguished Names自 Windows 2000 以来
2254LDAP Search Filters Using Strings自 Windows 2000 以来
2255The LDAP URL Format自 Windows 2000 以来
2256The X.500 User Schema for use with LDAPv3自 Windows 2000 以来
2829Authentication Methods for LDAP自 Windows 2000 以来
2830Extension for Transport Layer Security自 Windows 2000 以来
2589Extensions for Dynamic Directory Services自 Windows Server 2003 以来
2798Defines the inetOrgPerson LDAP Object Class自 Windows Server 2003 以来
2831Using Digest Authentication as an SASL Mechanism自 Windows Server 2003 以来
2891LDAP Control Extension for Server Side Sorting of Search Results自 Windows Server 2003 以来

Kerberos 5

构建您自己的提要

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

Kerberos 由 Massachusetts Institute of Technology 作为网络验证协议进行开发,那时 Internet 和内部网的安全性已成为十分重要的内容。此协议提供了强加密,支持客户端向服务器证明其身份。同样,服务器也可以向客户端证明其身份。此操作使用了票据和身份验证器。

AD DS 使用 Kerberos 5 进行用户身份验证。在 AD DS 中,域控制器作为客户端身份验证的 Kerberos 密钥发布中心。

DNS

AD DS 与 DNS 紧密集成并使用它来实现以下操作:

  • 定位 AD DS 域控制器
  • 以分级方式用域名表示组织的结构
  • 提供域控制器位置和 AD DS 域的名称解析服务

请记住,AD DS 本身并不是一个 DNS 服务器,并且不会替代 DNS 通常执行的任务。一般情况下,DNS 服务器会存储区域和资源记录,而 AD DS 使用同一命名空间来存储域及其对象。表 2 比较了典型的 DNS 和 AD DS 角色。

表 2. DNS 和 AD DS 角色
DNSAD DS
将域名映射到资源记录将 DNS 名作为对象存储 (dnsZone)
将计算机名映射到资源记录将计算机名作为对象记录存储

服务记录(SRV 记录)是 DNS 中的数据规范,定义指定服务的服务器位置。为了使 AD DS 正常工作,DNS 服务器必须提供对服务位置资源记录 (RR) 的支持。 SRV RR 将服务名映射到提供该服务的服务器名。AD DS 客户端和域控制器使用 SRV 记录来确定域控制器的 IP 地址。


配置 Samba 以提供 AD DS 支持

在您的 Linux 服务器可以与 AD DS 进行交互之前,必须验证您的 Samba 安装可以支持 LDAP 和 Kerberos。如果您正在使用之前编译的 Samba 版本,很有可能您的安装会支持 Kerberos 5 和 LDAP。如果您根据源代码编译 Samba,一定要包含对 kbr5ldap 库的支持。首先,这包含在运行 make 命令之前对 include/config.h 标头文件的更改:

#define HAVE_KRB5 1
#define HAVE_LDAP 1

库名称可能有所不同,具体差异取决于您的 Linux 计算机。

在 Linux 计算机上安装了 Samba 后,就可以使用 Samba 服务守护进程 smbd 来发现已安装的 Samba 支持的内容(参见清单 1)。

清单 1. 显示在 Samba 中对 Kerberos 5 支持的部分列表
[tbost@samba3 ~]$ smbd -b | grep KRB
   HAVE_KRB5_H
   HAVE_KRB5_LOCATE_PLUGIN_H
   HAVE_ADDRTYPE_IN_KRB5_ADDRESS
   HAVE_DECL_KRB5_AUTH_CON_SET_REQ_CKSUMTYPE
   HAVE_DECL_KRB5_GET_CREDENTIALS_FOR_USER
   HAVE_INITIALIZE_KRB5_ERROR_TABLE
   HAVE_KRB5
   HAVE_KRB5_AUTH_CON_SETUSERUSERKEY
   HAVE_KRB5_AUTH_CON_SET_REQ_CKSUMTYPE
   HAVE_KRB5_C_ENCTYPE_COMPARE
   HAVE_KRB5_C_VERIFY_CHECKSUM
   HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER
   HAVE_KRB5_ENCRYPT_BLOCK
   HAVE_KRB5_ENCRYPT_DATA
   HAVE_KRB5_ENCTYPE_TO_STRING
.....

[tbost@samba3 ~]$smbd -b | grep LDAP
   HAVE_LDAP_H
   HAVE_LDAP
   HAVE_LDAP_ADD_RESULT_ENTRY
   HAVE_LDAP_INIT
   HAVE_LDAP_INITIALIZE
   HAVE_LDAP_SASL_WRAPPING
   HAVE_LDAP_SET_REBIND_PROC
   HAVE_LIBLDAP
   LDAP_SET_REBIND_PROC_ARGS

清单 1 显示了在 Fedora 发行版对 krb5ldap 库的支持。您的输出可能有所不同,这取决于发行版。尽管如此,验证您的命令输出至少显示 HAVE_KRB5_HHAVE_LDAP_H

Kerberos 和 NTP

Kerberos 依赖于 Samba 服务器,与域的时间保持同步。通常将 AD DS 配置为使用时间服务的域控制器。通过将指定的 Windows 域控制器用作时间服务器,您可以配置 Linux 计算机上的网络时间协议 (NTP)。

Samba 和 Kerberos

Samba 可使用 Kerberos 对 AD DS 域中的用户进行身份验证。要配置 Samba,请找到 /etc 目录中的 krb5.conf 文件,因为您需要对默认文件配置进行一些修改。至少,您应该在文件的 realms 部分中指定域名,以及执行 AD DS 身份验证的 Windows 域服务器的完全限定域名(参见清单 2)。

清单 2. 配置 krb5.conf 文件
[realms]

	LPIC302.LOCAL= {
		kdc = wins3.lpic302.local 
		admin_server =wins3.lpic302.local
		default_domain = LPIC302.LOCAL
	
	}

清单 2 显示了一个简单的配置示例,该配置使用 LPIC302.LOCAL 作为 AD DS 域名。一定要以全部大写的字母形式输入域,否则将无法连接 Kerberos。kdc 指令使用主机名 wins3.lpic302.local 指定 AD DS 控制器。此外,将 admin_server 指定为域控制器。如果您想让 Kerberos 在用户没有指定域名时使用此域名,那么 default_domain 参数很有用。

Winbind 守护进程

Winbind 守护进程促进对 AD DS 域的用户进行身份验证。因此,您应该将 Pluggable Authentication Modules (PAM) 配置为使用 pam_winbind 模块,如清单 3 所示。

清单 3. 配置 PAM 以使用 pam_winbind
auth        sufficient   pam_winbind.so
auth        sufficient   pam_unix.so use_first_pass
auth        required     pam_stack.so service=system-auth
auth        required     pam_nologin.so
account     sufficient   pam_winbind.so
account     required     pam_stack.so service=system-auth
password    required     pam_stack.so service=system-auth
session     required     pam_stack.so service=system-auth
session     optional     pam_console.so

清单 3 显示基于 Fedora 发行版的 /etc/pam.d 目录中修改的 system-auth 文件。根据您的 Linux 发行版,身份验证文件的名称可能有所不同。通常,文件名是 serviceslogin。

pam_winbind.so 文件的位置很重要。如果您希望用户主要从其 AD DS 帐户而不是本地密码文件进行身份验证,则应该首先输入 pam_winbind.so。否则,您可能发现 auth.log 文件很快就会被失败的本地登录尝试填满。

Name Service Switch

Name Service Switch 提供了一种标准机制,在该机制中,Linux 计算机可以与常见服务进行交互,其中一个服务是身份验证。在使用这些服务时,Linux 计算机会查询 /etc/nsswitch.conf 文件。请根据下列方法修改该文件,以便允许 Linux 计算机使用 Winbind 进行用户身份验证。

下面的代码突出了使用 Winbind 添加 Winbind 支持,以便允许用户参照 AD DS Kerberos 5 数据库,使用 Winbind 进行身份验证:

passwd: files winbind
group:	 files winbind

smb.conf

毫不奇怪,smb.conf 文件也需要进行配置更改,以便 Samba 可以在 AD DS 域中工作。从根本上讲,需要设置 realmsecurity 的参数,如清单 4 所示。

清单 4. 配置 /etc/nssswitch.conf 文件
[global]
realm = lpic302.LOCAL
security = ADS
password server = wins.lpic302.local
workgroup = lpic302
winbind use default domain = yes
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes

清单 4 中的配置将 realm 设置为域名 lpic302.local。将 security 参数设置为 ADS。ADS 表明 Samba 将在 AD DS Service 安全模式下运行。您可以设置代码行 windbind use default domain = yes,消除访问资源时使用域名验证用户名和其他资源的需要。例如,在指定了用户名 tbost 时,Winbind 使用了域 LPIC302.LOCAL,而不是使用 LPIC302.LOCAL/ 进行身份验证。


与 AD DS 进行交互

配置完成时,系统会重新启动 Samba,并且 Winbind 守护进程正在运行,您可以与 AD DS 进行交互。

使用 net 命令

net 工具对 Samba 管理员非常有用。如果您使用过 Windows 的 net 命令,应该熟悉它的大部分选项和功能。net ADS 命令是您在使用 AD DS 时使用的命令。首先要做的一件事是加入一个域:

[tbost@samba3 ~]$ sudo net ADS join -U Administrator%password
[tbost@samba3 ~]$ sudo net ADS testjoin
[tbost@samba3 ~]$ sudo net ADS join Computers\OrganizationalUnit\Accounting\Servers

该代码使用 net 命令来加入域。另外,您可以省略 %password,并在提示时输入 Windows Administrator 帐户密码。第二个命令验证服务器已加入到域中。该代码段中的最后一步操作是在 AD DS 的 Computers\OrganizationalUnit\Accounting\Servers 下为 Samba 服务器创建一个计算机帐户。如果您需要有关 net 命令的更多信息,其在线手册页提供了很多有用信息。此外,您可以发出命令 net help ADS,如清单 5 所示。

清单 5. 列出 AD DS 域中的用户和组
[tbost@samba3 ~]$ net help ADS
Usage:
net ads info
    Display details on remote ADS server
net ads join
    Join the local machine to ADS realm
net ads testjoin
    Validate machine account
net ads leave
    Remove the local machine from ADS
net ads status
    Display machine account details
net ads user
    List/modify users
net ads group
    List/modify groups
net ads dns
    Issue dynamic DNS update
net ads password
    Change user passwords
net ads changetrustpw
    Change trust account password
net ads printer
    List/modify printer entries
net ads search
    Issue LDAP search using filter
net ads dn
    Issue LDAP search by DN
net ads sid
    Issue LDAP search by SID
net ads workgroup
    Display the workgroup name
net ads lookup
    Find the ADS DC using CLDAP lookups
net ads keytab
    Manage local keytab file
net ads gpo
    Manage group policy objects
net ads kerberos
    Manage kerberos keytab

与 wbinfo 进行交互

您可以使用 Winbind 守护进程提供的 wbinfo 工具来查询 AD DS 资源:

[tbost@samba3 ~]$  wbinfo -p
[tbost@samba3 ~]$  wbinfo -u 
[tbost@samba3 ~]$  wbinfo -g

该代码段使用 wbinfo 探索关于域的信息。wbinfo -p 命令将对 Winbind 守护进程运行 ping 命令,以验证它是否正在运行。wbinfo -u 命令返回某个域中的所有用户清单,而wbinfo -g 返回域中的所有组。请参阅 wbinfo 手册,了解有关的更多工具选项和功能。

使用 smbcacls 管理访问控制列表

如果您熟悉 setfaclgetfacl 命令,在学习 Samba 客户端套件提供的 smbcacls 命令时,您应该没有什么问题。您可以使用 smbcacls 工具来更改组和用户所有权,或者在由域中的一个 Windows Server 机器提供的共享上管理访问控制列表:

[tbost@samba3 ~]$sudo smbcacls -G LPIC302.LOCAL\accounting \
//wins2.lpic302.local/budget private.doc

该代码使用 smbcacls 命令将文件 private.doc 上的组权限更改为共享目录上的 accounting 组、Window Server 机器上的 budget 和 AD DS 域中的 accounting 组。smbcacls --help 命令显示该工具的各种功能可用的选项。

参考资料

学习

讨论

  • 加入 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=783979
ArticleTitle=学习 Linux,302(混合环境): 与 Active Directory 集成
publish-date=01042012