http://www.ibm.com/developerworks/cn/linux/l-lpic3-310-2/
在本文中,了解下列概念:
- Samba 安全模式
- 核心 Samba 守护程序的角色
- Samba 守护程序的管理
本文帮助您准备 LPI 混合环境专业考试(302)中主题 310 中的目标 310.2。该目标的权重为 1。
为了最有效地利用本系列中的文章,您应该具有高级 Linux 知识,并需要准备一个 Linux 系统,用于练习本文介绍的命令。特别是,本文假设您具有 Linux 命令行函数的工作知识且至少大致了解 “学习 Linux,302(混合环境):概念” 中所讲述的 Samba 的用途。要执行本文所描述的操作,您必须安装 Samba 软件。 一些操作需要拥有由您管理的工作的服务器消息块(SMB)/通用 Internet 文件系统(CIFS)网络。
Linux 服务器通常作为守护程序(daemon) 来实现,这一词源于希腊神话,其中守护神(daemon)是超自然生物。Linux 守护程序在后台运行以便执行一些有用的任务。Samba 服务器套件由几个守护程序组成,包括 smbd
、nmbd
和 winbindd
。swat
程序是另外一个 Samba 服务器,但是其通常都是从一个超级服务器运行,因此在技术上不是守护程序。
smbd
程序提供 Samba 的大部分核心功能。其职责包括:
- 提供文件和打印机共享。此功能可以说是一个最重要的 Samba 职责,
smbd
执行此功能。 - 验证用户。
smbd
针对本地数据库验证用户或传递验证请求到另一台计算机。如果您的 Samba 服务器被配置为域控制器,则smbd
还可从其他计算机响应验证请求。(在 设置您的安全模式 中将描述工作组和域配置)。 - 提供时间服务。Samba 可以告诉其他计算机当前的时间;
smbd
可处理此细节。
默认情况下,smbd
守护程序绑定到 TCP 端口 139 和 445。SMB 协议通过 TCP 上的 NetBIOS 使用端口 139,它是许多旧客户端使用 SMB/CIFS 的方式。端口 445 在 TCP 服务上提供简单的 SMB,它是访问 Samba 服务器的新客户端数。
由于这些职责的关键性质(尤其是,提供文件和打印机共享及验证),smbd
可视为是 Samba 的核心。实际上,可以使用诸如 Samba 自己的 smbclient
等的程序连接到单独运行 smbd
的计算机以便执行文件传输。然而一些客户端依靠其他 Samba 守护程序提供的服务。
第二个关键的 Samba 守护程序是 nmbd
。此服务器的主要职责是处理名称相关的任务。您可以将其视为 Samba 自己版本的域名系统(DNS),只是它更易于配置且远没有 DNS 复杂。nmbd
执行的特定任务包括:
- 对名称广播进行响应。在操作的一个通用模式中,客户端将名称查询广播到整个网络段。
nmbd
服务器监听此类广播,并且在 Samba 配置为使用正在查询的名称时,该服务器将进行响应。在将其配置为另一计算机或网络的代理时,它也会响应。 - 注册 NetBIOS 名称。为使 NetBIOS 名称解析正常进行,计算机必须注册其名称,通过集中的 NetBIOS 名称服务器(NBNS;又名 Windows Internet 名称服务(Windows Internet Name Service [WINS]) 服务器)或通过广播名称并作为整体与网络协商其权利。
nmbd
负责执行此操作并与其他注册名称的计算机进行协商。 - 作为 NBNS 服务器运作。Samba 可被配置为 NBNS 系统,在这种情况下,
nmbd
可处理这些职责。 - 作为主浏览器运行。用户体验 SMB/CIFS 网络的一部分是浏览 — 浏览网络上的服务器的能力就像您浏览硬盘上的目录。此功能依赖于主浏览器 的存在,它收集并传播浏览列表。在 Samba 作为主浏览器运行时,它是从事此项工作的
nmbd
。
正如此列表所示,nmbd
执行很多工作。虽然它们不涉及提供文件或打印机,但是许多任务都是任何 SMB/CIFS 服务器的重要部分,因此 nmbd
应被认为是 Samba 的重要部分。它通常通过分布的启动脚本与 smbd
一起运行。
虽然大多数 nmbd
的功能都需要将其绑定到 TCP 端口 137,但是主浏览器职责涉及用户数据报协议(User Datagram Protocol)端口 138。
第三个 Samba 守护程序是 Winbind 守护程序,即 winbindd
。不同于 smbd
和 nmbd
,winbindd
不为远程计算机提供服务;相反,它作为 Windows®(或 Samba)域控制器与本地计算机自己的可插拔验证模块(Pluggable Authentication Modules)工具之间的接口,允许域控制器来托管 Linux 帐户信息。
在许多分布上,winbindd
被安装在与 Samba 的其余分布不同的包中 — 通常在称为 winbind
或 winbindd
的包中。它还通常被分别发布。原则上,您可以在不运行 Samba 服务器或或甚至用作 SMB/CIFS 客户端的计算机上运行 winbindd
,除了 winbindd
是 SMB/CIFS 客户端之外。不过,在实践中,如果其正在运行 winbindd
,那么您可能运行 Samba 服务器或使用 Linux 计算机作为 SMB/CIFS 客户端。
控制 Samba 至少涉及两个任务:使用其配置文件调整其配置选项和在临时的、实时的基础上变更其选项。通过 Samba 配置文件,您可以完成第一个任务,而第二个可通过 smbcontrol
配置工具完成。
主 Samba 配置文件被称为 smb.conf 且通常位于 /etc/samba,但也可位于其他位置。(如果您从源构建 Samba,那么 /usr/local/samba/lib 是一个通用位置。)
smb.conf 文件由一些部分组成,每一个都以方括号([]
)括起来的名称开始,如 [global]
或 [documents]
。大多数部分都定义了文件或打印机共享;然而,[global]
部分是特别的:它存放作为整体影响服务器的选项或设置后续共享定义中使用的默认值的选项。([global]
部分通常首先出现在文件中。)
smb.conf 中的行可能是以井号(#
)或分号(;
)开始的注释行;它们可以是部分的名称;或者它们是设置 Samba 参数的行。最后这个类型行采用以下形式:
parameter = Value |
parameter
是关键字,如 security
或 create mask
。参数名是不区分大小写的。一些常见的参数有同义词,而少数具有反义词。例如,writable
和 writeable
是同义词,而 read only
是这些的反义词 — 也就是说,read only = Yes
等同于 writable = No
。
您指定的参数 Value
可以是自由格式的字符串、数字(包括特殊数值,如 IP 地址)、Boolean 值、变量或列表。Boolean 值可取以下两种真值:Yes
、True
和 1
是同义词,No
、False
和 0
是同义词。
在编写配置文件时,变量都以百分比符号(%
)开始,表示未知的信息。例如,%D
指服务器工作组或域名称;%h
指服务器的 DNS 名称;%H
指用户的主目录;%L
指服务器的 NetBIOS 名称;%u
指用户的用户名。
一些参数采取若干值的列表,如用户名的列表。在这种情况下,列表元素以逗号分隔,如 george, mary
是指 george
和mary
。在大多数情况下,smb.conf 文件忽视空白。如果您需要在值中包括空白,请将其括在引号中。
smb.conf 文件包含适用于 smbd
、nmbd
、winbindd
和其他 Samba 服务器和程序的选项。不同程序的选项是不分开的或明确区分的,但是有时候名称使参数应用于的守护程序更加明显。
您可以使用 smbcontrol
程序在 Samba 运行时对其进行控制。例如,您可以告诉 Samba 关闭特定共享、强制主浏览器选择、重新加载配置文件,等等。此命令的基本句法是:
smbcontrol [-i] [-s configfile] smbcontrol [destination] [message-type] [parameter] |
在使用 -i
选项时,smbcontrol
进入互动模式,其中您可以按顺序传递一系列命令,使您不必在每一个命令前键入smbcontrol
。destination
是服务器名称(smbd
、nmbd
或 winbindd
),all
用来发送消息到所有守护程序或进程 ID 号。message-type
是命令,如表 1 中所总结。parameter
是一些命令可能需要的可选参数。
表 1. 文件系统卷和大小限制
命令(消息类型) | 含义 |
---|---|
close-share |
关闭参数指定的共享。 |
debug |
设置调试等级为参数指定的值。 |
force-election |
强制新的主浏览器选择。 |
debuglevel |
显示守护程序的当前调试等级。 |
printnotify |
发送消息到与打印机共享连接的客户端,在客户端队列状态中强制变更。 |
samsync |
将用户数据库与域控制器同步。(官方文档指示此函数当前不使用;请在您依赖它以前对其进行测试。) |
shutdown |
关闭指定的守护程序。 |
pool-usage |
显示指定守护程序的内存使用信息。 |
drvupgrade |
通知客户端新的打印机驱动程序可供使用。该命令采用打印机共享名作为参数。 |
reload-config |
强制服务器重新加载 smb.conf 文件。 |
Samba 提供一些关于如何验证用户的选项。最重要的是 security
选项,它取五种可能的值:
Share
。此安全模式尝试模拟 Microsoft® Windows 9x/Windows Me 操作系统使用的验证方法,其中忽略用户名且密码与共享关联在一起。要做到这一点,Samba 尝试将客户端提供的密码用于各种用户名。User
。此安全模式是默认的,它使用用户名和密码进行验证,这类似于 Linux 通常工作的方式。在现在系统的大多数情况下,密码存储于仅 Samba 加密的密码数据库中。Server
。如果您想要 Samba 遵从另一个服务器进行验证,请使用此验证方法。对于客户端,虽然此方法看上去像用户级验证,但是 Samba 联系通过password server
参数指定的服务器来进行实际的验证。Domain
。使用此方法,您可以完全加入 Windows 域,其看上去像针对客户端的用户级验证。与服务器级别验证不同,域验证涉及更安全的域级别密码交换。同时,完全加入域需要在 Samba 系统上或也可能在域控制器上运行额外的命令。ADS
。此验证方法工作非常像域验证;然而,其需要 Active Directory® Domain Services 域控制器。
作为一般规则,如果您的 Samba 服务器是 Windows 工作组(它是 SMB/CIFS 网络的基本形式)的成员,那么用户级验证是最佳的选择。工作组不同于域,主要是因为域提供域控制器,它是为域提供验证服务的服务器。要使用域控制器,您必须使用服务器级别、域级别或 ADS 级别 security
。服务器级别安全是最简单的配置但最不安全,而 ADS 级别安全最难于配置但最安全。
要完全加入域以获得域级别或 ADS 级别安全的,您必须在 smb.conf 文件的 [global]
部分中设置几个选项:
password server = DOMCONT domain logons = No encrypt passwords = Yes |
DOMCONT
系统是域控制器。您还必须在应该加入域的 Samba 服务器上键入以下命令:
# net join member -U adminuser |
您还可能需要配置域控制器以便接受 Samba 服务器到域中。(目标 312.4 涵盖了 Samba 服务器的此主题。)
共享级别安全已经过时;它的存在主要是为了为旧的无法理解用户名的客户端提供兼容性。它对于一些您可能想提供最少安全的共享类型(如打印机共享)也是有用的。因为 Linux 需要帐户用于所有访问,所以 Samba 尝试针对一系列帐户而提供的密码直到获得一个匹配或它们都失败。这些帐户包括:
- 访客帐户(通过
guest account
参数设置),如果guest only = Yes
- 客户端提供的用户名(不是所有客户端都提供一个,而是只有一些客户端这样做)
- 用于客户端计算机的最后访问的用户名
- 被访问的共享名称
- 客户端的 NetBIOS 名
- 通过
username
参数指定的任何用户名
因为目前使用的大多数客户端都了解用户名,所以很少需要支持共享级别安全。使用它只会造成混乱并增加安全风险 — 针对如此多帐户检查密码,落入坏人之手的单个密码可能成为您服务器的重要风险。