内容摘要 本教程讲解如何使用安全的基于 LDAP 的身份验证机制将 Samba 安装和配置为主域控制器。还描述如何为基于 PAM 的身份验证配置 LDAP 服务器 OpenLDAP,以及如何用 Transport Layer Security(TLS)保护 Samba 和 OpenLDAP 之间的链路。完整的系统包括安全的文件共享和打印共享设置,以及健壮的 LDAP 服务器,这些设施支持的功能甚至超出了 Samba 的需要。另外,Windows® 客户机能够登录到作为主域控制器的 Samba 服务器,并能够根据它们的组成员关系共享自动挂装的驱动器。
关于本教程
本教程讲解如何使用安全的基于 LDAP 的身份验证机制将 Samba 安装和配置为主域控制器。在本教程中,我将:
- 介绍 LDAP,讲解它如何与 Samba 集成,并讨论安全问题。
- 介绍配置 LDAP 的步骤,包括安装 OpenLDAP 和 IDEALX LDAP Samba 工具箱;配置 OpenLDAP 所需的 slapd.conf 文件、/etc/ldap.conf 文件和 Pluggable Authentication Modules(PAM);并解释如何启动 OpenLDAP。
- 接下来,讲解如何配置 Samba,包括安装和启动 Samba 和 Logon Profile Generator;创建所需的目录和共享驱动器;配置 smb.conf 文件并设置 LDAP 数据库访问密码;填充数据库;添加 PAM 和其他用户并将 Windows 工作站添加到域中;以及对不工作的 Samba 安装进行调试。
- 最后,讨论安全问题以及如何为这个系统启用安全性,包括为 OpenLDAP、PAM 和 Samba 启用 Transport Layer Security,以及如何测试系统的安全性。
完整的系统包括安全的文件共享和打印共享设置,以及健壮的 LDAP 服务器,这些设施支持的功能甚至超出了 Samba 的需要。另外,Microsoft Windows 客户机能够登录到作为主域控制器的 Samba 服务器,并能够根据它们的组成员关系共享自动挂装的驱动器。
本教程的读者最好具有中等程度的 UNIX 或 Linux 技能和经验,并了解基本的 IP 网络概念。作者使用 Fedora Core 3 作为 Linux 发行版,但是其他 Linux 发行版或 UNIX 变体(比如 AIX、Solaris 或 HP-UX)也可以应用本教程中描述的设置。本教程中使用的所有应用程序和实用程序都是开放源码的,可以从 Linux 厂商或应用程序厂商的主页获得。
前提条件
Linux 发行版是 Fedora Core 3;但是这里描述的设置也可以应用于其他 Linux 发行版或 UNIX 变体(比如 AIX、Solaris 或 HP-UX)。这种软件可以以许多方式免费获得。建议从 Linux 厂商的 ftp 镜像站点获得预编译的版本(比如 RPM)。
下面是本教程中使用的软件的清单。不需要事先按照这张清单进行准备,因为本教程会描述如何下载和安装这些软件。
- OpenSSL
- OpenLDAP
- Samba
- Perl module Crypt::SmbHash
- Perl module Digest::SHA1
- Perl module IO::Socket::SSL
- Perl module Net::SSLeay
- IDEALX Samba LDAP 工具
注意:本教程指出了各种经过测试的软件组件的特定版本。采用以前的软件版本也可能可以,但是我不能保证会成功。一般来说,使用比本教程中使用的版本更新的软件应该没问题。
教程的网络布局
本教程中描述的网络比较小,所以很容易在您自己的家庭或实验室网络上重现这里的示例。对于这个设置,我使用一个典型的家用宽带路由器,其中内置了防火墙。下图描述了物理网络布局。
图 1. 教程的网络配置
这个 Microsoft Windows 网络包含三类用户 —— 市场营销、工程和管理。工程和市场营销用户各有一个共享的驱动器,每个组的用户可以分别将文件放在这里,供同组的其他用户查看;但是,一个组的成员不能查看另一个组的共享驱动器上的文件。例如,市场营销职员不能查看工程驱动器上的文件。管理用户也有一个共享驱动器,只有经理能够看到这个驱动器。另外,经理具有特殊特权,他们还能够查看工程和市场营销组的文件。
安装 LDAP
现在介绍 LDAP,讲解它如何与 Samba 集成,并讨论安全问题。
LDAP 简介
LDAP 是一种流行的身份验证机制,并可以作为存储个人可识别信息的存储库。与传统的基于平面文件的身份验证机制(例如 /etc/passwd)相比,它有几个优点。优点之一是 LDAP 可以用来实现密码管理的理想形式 —— 单点登录。能够实现单点登录是因为软件应用程序可以通过 TCP/IP 网络针对通用的基于 LDAP 的用户存储库进行远程身份验证。LDAP 身份验证方法与基于平面文件的身份验证方案正好相反,后者通常只使用一台计算机,并不是分布式的。
LDAP 将数据组织为目录信息树(directory information tree)。这个树按照分类对数据进行组织。许多 LDAP 服务器使用 SQL 数据库存储数据,因为这是一种自然的选择。与传统的 SQL 数据库一样,LDAP 使用模式来定义数据应该放在哪里以及数据应该如何格式化。使用模式以及与传统 SQL 数据库的相似性是 LDAP 的关键优点,因为它们大大提高了可扩展性。
集成 Samba 和 LDAP
在 Samba 和 LDAP 服务器之间有三个主要的集成点:
- 第一个集成点是将 Samba 的模式包含到 LDAP 服务器中。
- 第二个集成点是将 Samba 配置为通过 LDAP 服务器进行身份验证。
身份验证要利用 Linux 的 PAM 实用程序(Pluggable Authentication Modules)。PAM 实用程序将身份验证过程从 Linux 上运行的软件应用程序抽象出来,这样应用程序就不必理解特定身份验证机制的复杂细节。因此,PAM 为软件应用程序提供了很大的灵活性,软件应用程序只需调用身份验证 API,而 PAM 会决定是应该使用平面文件、LDAP 还是其他身份验证机制。
- 第三个集成点涉及一组工具,它们帮助管理 Samba 的 LDAP 目录信息树。这个工具箱是由第三方开发的;但是它采用 GNU Public License。
安全
LDAP 的关键优点是它能够作为分布在网络上的软件应用程序的身份验证机制。这个优点的一个副作用是,在身份验证期间密码可能会通过网络传输,因此可能被截获。幸运的是,LDAP 支持 SSL(Secure Sockets Layer)和 TLS。
在本教程中,LDAP 服务器运行在与 Samba 相同的物理服务器上;因此不必进行加密。但是,我将演示如何对 LDAP 和 Samba 之间的通道进行加密,因为这相当简单,而且对于 Samba 和 LDAP 在不同计算机上的情况,这种措施是必要的。
本教程分为两个阶段。第一个阶段详细描述如何在非安全模式中配置 Samba 和 LDAP。第一个阶段完成之后,对 Samba 和 LDAP 服务器之间的通道启用加密。采用两阶段方式是因为在非安全模式中往往更容易进行安装、配置和诊断问题。
配置 LDAP