在本文中,将了解这些概念:
- 了解 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 进行了配置并可运行它。
关于选修的 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 最初是为了满足比其前身 X.500 协议更轻型的目录服务需求。自 1993 年发布以来,LDAP 已改进了许多。现在,它实际上是目录服务的 Internet 标准。
Microsoft 声称 LDAP 在核心方面是兼容的。表 1 显示了请求注释 (RFCs),提供了在 LDAP 中读取和执行操作的扩展支持。
表 1. LDAP 的 Microsoft RFC 支持
RFC | 支持 | |
---|---|---|
2251 | LDAP v3 | 自 Windows 2000 以来 |
2252 | Attribute Syntax Definitions | 自 Windows 2000 以来 |
2253 | UTF-8 String Representation of Distinguished Names | 自 Windows 2000 以来 |
2254 | LDAP Search Filters Using Strings | 自 Windows 2000 以来 |
2255 | The LDAP URL Format | 自 Windows 2000 以来 |
2256 | The X.500 User Schema for use with LDAPv3 | 自 Windows 2000 以来 |
2829 | Authentication Methods for LDAP | 自 Windows 2000 以来 |
2830 | Extension for Transport Layer Security | 自 Windows 2000 以来 |
2589 | Extensions for Dynamic Directory Services | 自 Windows Server 2003 以来 |
2798 | Defines the inetOrgPerson LDAP Object Class | 自 Windows Server 2003 以来 |
2831 | Using Digest Authentication as an SASL Mechanism | 自 Windows Server 2003 以来 |
2891 | LDAP Control Extension for Server Side Sorting of Search Results | 自 Windows Server 2003 以来 |
构建您自己的提要
您可以构建一个自定义 RSS、Atom 或 HTML 提要,以便在我们添加新文章或更新内容时收到通知。访问 developerWorks RSS 提要。选择 Linux 作为专区,Articles 作为类型, 输入 Linux Professional Institute
作为关键字。然后选择您想要的提要类型。
Kerberos 由 Massachusetts Institute of Technology 作为网络验证协议进行开发,那时 Internet 和内部网的安全性已成为十分重要的内容。此协议提供了强加密,支持客户端向服务器证明其身份。同样,服务器也可以向客户端证明其身份。此操作使用了票据和 身份验证器。
AD DS 使用 Kerberos 5 进行用户身份验证。在 AD DS 中,域控制器作为客户端身份验证的 Kerberos 密钥发布中心。
AD DS 与 DNS 紧密集成并使用它来实现以下操作:
- 定位 AD DS 域控制器
- 以分级方式用域名表示组织的结构
- 提供域控制器位置和 AD DS 域的名称解析服务
请记住,AD DS 本身并不是一个 DNS 服务器,并且不会替代 DNS 通常执行的任务。一般情况下,DNS 服务器会存储区域和资源记录,而 AD DS 使用同一命名空间来存储域及其对象。表 2 比较了典型的 DNS 和 AD DS 角色。
表 2. DNS 和 AD DS 角色
DNS | AD DS |
---|---|
将域名映射到资源记录 | 将 DNS 名作为对象存储 (dnsZone ) |
将计算机名映射到资源记录 | 将计算机名作为对象记录存储 |
服务记录(SRV 记录)是 DNS 中的数据规范,定义指定服务的服务器位置。为了使 AD DS 正常工作,DNS 服务器必须提供对服务位置资源记录 (RR) 的支持。 SRV RR 将服务名映射到提供该服务的服务器名。AD DS 客户端和域控制器使用 SRV 记录来确定域控制器的 IP 地址。
在您的 Linux 服务器可以与 AD DS 进行交互之前,必须验证您的 Samba 安装可以支持 LDAP 和 Kerberos。如果您正在使用之前编译的 Samba 版本,很有可能您的安装会支持 Kerberos 5 和 LDAP。如果您根据源代码编译 Samba,一定要包含对 kbr5
和 ldap
库的支持。首先,这包含在运行 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 发行版对 krb5
和 ldap
库的支持。您的输出可能有所不同,这取决于发行版。尽管如此,验证您的命令输出至少显示 HAVE_KRB5_H
和 HAVE_LDAP_H
。
Kerberos 和 NTP
Kerberos 依赖于 Samba 服务器,与域的时间保持同步。通常将 AD DS 配置为使用时间服务的域控制器。通过将指定的 Windows 域控制器用作时间服务器,您可以配置 Linux 计算机上的网络时间协议 (NTP)。
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 守护进程促进对 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 发行版,身份验证文件的名称可能有所不同。通常,文件名是 services 或 login。
pam_winbind.so 文件的位置很重要。如果您希望用户主要从其 AD DS 帐户而不是本地密码文件进行身份验证,则应该首先输入 pam_winbind.so。否则,您可能发现 auth.log 文件很快就会被失败的本地登录尝试填满。
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 文件也需要进行配置更改,以便 Samba 可以在 AD DS 域中工作。从根本上讲,需要设置 realm
和 security
的参数,如清单 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/ 进行身份验证。
配置完成时,系统会重新启动 Samba,并且 Winbind 守护进程正在运行,您可以与 AD DS 进行交互。
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 |
您可以使用 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
手册,了解有关的更多工具选项和功能。
如果您熟悉 setfacl
和 getfacl
命令,在学习 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
命令显示该工具的各种功能可用的选项。
学习
- 从 Samba 3.x 手册了解有关 integrating Samba, Active Directory & LDAP 的更多信息。
- 从 Samba 手册了解 Samba 如何使用 DNS 和 AD DS。
- 了解如何配置 Samba 以实现 AD DS 身份验证。
- 在 Samba 手册中了解 Winbind 如何与 AD DS 进行交互。
- 从 LDAPv3 工作组了解有关 LDAPv3 的更多信息。
- 在 LPIC Program 网站,查找 LPI 的 Linux 系统管理认证的三个级别的详细目标、任务列表和示例问题。具体地讲,查看 LPI-302 详细目标。
- 复习 developerWorks 上的整个 LPI 考试准备系列,学习 Linux 基础知识,根据 2009 年 4 月以前的 Linux 考试目标准备系统管理员认证考试。
- 观看 developerWorks 演示中心,包括面向初学者的产品安装和设置演示,以及为经验丰富的开发人员提供的高级功能。
- 在 developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。
- 在 developerWorks 上查阅所有 Linux 技巧 和 Linux 教程。
- 随时关注 developerWorks 技术活动和网络广播。